Ald*_*und 2 java xml namespaces jaxb xml-namespaces
我如何使用jaxb使用以下模式生成xml。
<NS1:getRatesResponse xmlns:NS1="http://mynamespaceTypes">
<response>
<NS2:rates xmlns:NS2="http://mynamespace">
<currency>USD</currency>
</NS2:rates>
<NS3:rates xmlns:NS3="http://mynamespace">
<currency>EUR</currency>
</NS3:rates>
<NS4:rates xmlns:NS4="http://mynamespace">
... etc
</response>
Run Code Online (Sandbox Code Playgroud)
我不知道如何告诉jaxb每个新项目都应该是具有相同名称空间的NS(n + 1)。更改xml格式不是一种选择,因为它是外部的。
JAXB可以正确解析此xml,但是在使用相同的类进行生成时,它会像这样生成:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:getRatesResponse
xmlns:ns2="http://mynamespaceTypes"
xmlns:ns3="http://mynamespace">
<response>
<ns2:rates>
<currency>EUR</currency>
</ns2:rates>
<ns2:rates>
<currency>USD</currency>
</ns2:rates>
</response>
</ns3:getRatesResponse>
Run Code Online (Sandbox Code Playgroud)
对于此用例,我将执行以下操作:
XMLStreamWritergetRatesResponse和response元素直接写入XMLStreamWritermarshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);以防止在每个调度调用中写入标头。Rate对象XMLStreamWriter分别编组。NamespacePrefixMapper上为其设置一个实例以控制名称空间前缀(当前需要JAXB RI,对此扩展的支持当前已添加到EclipseLink JAXB(MOXy))。想要查询更多的信息