Zum Beispiel habe ich ein einfaches Schema, das ein anderes Schema importiert. Das zweite Schema (urn: just: attributes, just-attributes.xsd) definiert nur eine Attributgruppe.Ist es möglich, das Namespace-Präfix anzupassen, das JAXB beim Marshalling zu einem String verwendet?
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/MySchema"
xmlns:tns="http://www.example.org/MySchema"
elementFormDefault="qualified"
xmlns:ja="urn:just:attributes">
<import schemaLocation="just-attributes.xsd" namespace="urn:just:attributes"/>
<element name="MyElement">
<complexType>
<attributeGroup ref="ja:AttributeGroup"/>
</complexType>
</element>
</schema>
Ich verwende die Metro xjc Ant Aufgabe, um Klassen aus diesem Schema zu generieren. Das Problem, auf das ich stoße, ist, dass die Third-Party-Anwendung, mit der ich interagiere, merkwürdig in Bezug auf Namespaces ist. In diesem Fall brauche ich einen String-Wert, also muss ich ihn serialisieren. Ich verwende hierfür den Standardcode.
private static <T> String marshal(T object) throws JAXBException{
OutputStream outputStream = new ByteArrayOutputStream();
JAXBContext jaxbContext = JAXBContext.newInstance(object.getClass());
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.marshal(object, outputStream);
return outputStream.toString();
}
Was mir etwas entlang der Linien von
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:MyElement xmlns:ns1="urn:just:attributes" xmlns:ns2="http://www.example.org/MySchema" ns1:attrib1="1234" ns1:attrib2="5678"/>
Ich habe das Problem gibt, ist, dass diese dritte Partei so etwas wie xmlns:thirdpartyns="urn:just:attributes"
erwartet, was zu sagen ist, parsen sie basierend auf den Namen dem Namensraum gegeben. Es hat zu "Drittparteien" für ihre Software zu arbeiten.
Kennt jemand einen Weg um dies zu tun, kurz eine Suche und ersetzen in der resultierenden Zeichenfolge? Eine benutzerdefinierte Bindungsregel vielleicht?
Dank. Das funktioniert wie ein Zauber! –
Die Verbindung ist unterbrochen. –
Der Link ist tot ... @DaveC bitte überprüfen Sie es! – basZero