JAXB: как маршалировать с пространством имен по умолчанию для подэлементов - PullRequest
0 голосов
/ 04 августа 2020

Я работаю с классами, созданными из классов publi c xsds (swift) + JAXB java, чтобы объединить элементы из сгенерированных классов. Моя проблема в том, что во время маршалинга этих классов JAXB пространства имен, поступающие из xsds, помещаются на уровень root, но я хочу иметь пространство имен по умолчанию для элемента из xsds.

Вот мой ожидаемый результат:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SidRequestIso20022 xmlns="a.b.c">
<AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.02">
    <xxxx>
...
</AppHdr>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:seev.045.001.02">
    <yyyy>
...
</Document>
</SidRequestIso20022>

... но вот мой вывод маршалинга:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns4:SidRequestIso20022 xmlns:ns2="urn:iso:std:iso:20022:tech:xsd:head.001.001.02" 
                    xmlns:ns3="urn:iso:std:iso:20022:tech:xsd:seev.045.001.02"
                    xmlns:ns4="a.b.c">
<AppHdr>
    <ns2:xxxx>
...
</AppHdr>
<Document">
    <ns3:yyyy>
...
</Document>
</ns4:SidRequestIso20022>

здесь xsds (я не могу их изменить):

appHdr.xsd:

<xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.02" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" 
           targetNamespace="urn:iso:std:iso:20022:tech:xsd:head.001.001.02">
<xs:element name="AppHdr" type="AppHdr"/>
...

seev045.xsd:

<xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:seev.045.001.02" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" 
     targetNamespace="urn:iso:std:iso:20022:tech:xsd:seev.045.001.02">
<xs:element name="Document" type="Document"/>
...

И мой класс JAXB, который объединяет сгенерированные классы из xsds:

@XmlRootElement(name = "SidRequestIso20022", namespace = "a.b.c")
@XmlAccessorType(XmlAccessType.FIELD)
public class SidRequestMsg {

@XmlElement(name = "AppHdr")
protected AppHdr appHdr;

@XmlElement(name = "Document")
protected Document document;
...

Я много чего пробовал, но потерял слишком много времени уже ! Если бы кто-то мог помочь !? заранее спасибо

...