ich ein Repo eingerichtet, das zeigt mein Problem: https://github.com/Waxolunist/stackoverflow.34392476Kann nicht Dokument vermarshallten Abstellungs wenn Standard-Namespace
Ich versuche, ein einfaches XML-Dokument zu entpacken:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<for:document xmlns:for="http://www.adcubum.com/wsdl/global/callout/syrius/modul_bl/doc/service/documentrenderer/forwktbx">
<Export xmlns="urn:adcubum:Syrius">
<ExportInhalt/>
<ExportKopf>
<Quelle>lokal</Quelle>
</ExportKopf>
<SchemaVersion>bec811a9807a8c8da403d70b9b5e22ad</SchemaVersion>
</Export>
</for:document>
Dies ist das Dokument, das ich bekommen aus folgenden Code:
Document document = new Document();
Export export = new Export();
ExportKopf exportKopf = new ExportKopf();
exportKopf.setQuelle("lokal");
export.setExportKopf(exportKopf);
ExportInhalt exportInhalt = new ExportInhalt();
export.setExportInhalt(exportInhalt);
export.setSchemaVersion("bec811a9807a8c8da403d70b9b5e22ad");
document.setExport(export);
JAXBContext jaxbContext = JAXBContext.newInstance(Document.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(document, System.out);
Dokument sieht wie folgt aus:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "document", namespace = "http://www.adcubum.com/wsdl/global/callout/syrius/modul_bl/doc/service/documentrenderer/forwktbx")
public class Document {
@XmlElement(name = "Export", namespace = "urn:adcubum:Syrius")
private vo.dom.common_service.modul_bl.syrius.Export export;
}
package-info.java
@XmlSchema(
namespace = "urn:adcubum:Syrius",
xmlns = {
@XmlNs(prefix = "for", namespaceURI = "http://www.adcubum.com/wsdl/global/callout/syrius/modul_bl/doc/service/documentrenderer/forwktbx"),
@XmlNs(prefix = "", namespaceURI = "urn:adcubum:Syrius")
},
elementFormDefault = XmlNsForm.UNQUALIFIED)
Wenn ich versuche, es zu entpacken, ich habe nicht die abgebildeten Daten:
JAXBContext jaxbContext = JAXBContext.newInstance(Document.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
InputStream is = this.getClass().getResourceAsStream("/requests/document_simple3.xml");
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader xmlsr = factory.createXMLStreamReader(is);
Document document = unmarshaller.unmarshal(xmlsr, Document.class).getValue();
ExportKopf und ExportInhalt zurückkehren null.
Stattdessen folgende XML funktioniert. Der einzige Unterschied ist der Namespace-Präfix:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<for:document xmlns:for="http://www.adcubum.com/wsdl/global/callout/syrius/modul_bl/doc/service/documentrenderer/forwktbx">
<ns3:Export xmlns:ns3="urn:adcubum:Syrius">
<ExportInhalt/>
<ExportKopf>
<Quelle>lokal</Quelle>
</ExportKopf>
<SchemaVersion>bec811a9807a8c8da403d70b9b5e22ad</SchemaVersion>
</ns3:Export>
</for:document>
Ich benutze Eclipselink Moxy.
Was muss ich ändern, damit das Marshalled-Dokument entpackt wird?
ich Ihren Code in der GitHub Repo-Fest für sie auch, einen Pull-Request, so dass Sie es finden können. Hier ist mein Klon: https://github.com/nfekete/stackoverflow.34392476/commit/3b980248b05403a51b9b53c90176bc5361772b9a –
Diese Frage kann Ihnen mit dem qualifizierten vs unqualifizierten Wert für die 'ElementFormDefault' helfen: http: // stackoverflow.com/questions/1463138/was-ist-elementformdefault-do-for-xml-wenn-ist-es-verwendet –
Vielen Dank für Ihre Arbeit. Es hilft. – Christian