如何使用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>
我不知道如何告诉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>
答案 0 :(得分:4)
对于此用例,我将执行以下操作:
XMLStreamWriter
getRatesResponse
和response
元素直接写入XMLStreamWriter
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
上设置以下属性,以防止在每个编组调用中写入标题。Rate
个对象分别编组为XMLStreamWriter
。NamespacePrefixMapper
的实例来控制命名空间前缀(这当前需要JAXB RI,目前正在将此扩展的支持添加到EclipseLink JAXB (MOXy))。了解更多信息
答案 1 :(得分:0)
将这些配置添加到我的方案中解决了我的问题 attributeFormDefault="unqualified" elementFormDefault="qualified"