How can i generate xml with following schema using jaxb.
<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>
I dont know how to tell jaxb that every new item should be NS(n+1) with the same namespace. Changing xml format is not an option,because it`s external.
JAXB parses this xml correctly, but when producing using same classes it produce it like this:
<?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>
For this use case I would do the following:
XMLStreamWriter
getRatesResponse
andresponse
elements directly to theXMLStreamWriter
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
to prevent the header from being written on each marshal call.Rate
objects to theXMLStreamWriter
individually.NamespacePrefixMapper
on it to control the namespace prefix (this currently requires the JAXB RI, support for this extension is currently being added to EclipseLink JAXB (MOXy)).For More Information