Ad esempio, ho uno schema semplice che importa un altro schema. Il secondo schema (urn: just: attributes, just-attributes.xsd) definisce semplicemente un gruppo di attributi.È possibile personalizzare il prefisso dello spazio dei nomi che JAXB utilizza quando si esegue il marshalling su una stringa?
<?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>
Sto utilizzando l'attività Metro xjc Ant per generare classi fuori da questo schema. Il problema che sto incontrando è che l'applicazione di terze parti con cui sto interagendo è peculiare dei namespace. In questo caso ho bisogno di un valore di stringa, quindi devo serializzarlo. Per questo utilizzo il codice boilerplate.
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();
}
Il che mi dà qualcosa sulla falsariga di
<?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"/>
Il problema che ho è che questa terza parte si aspetta qualcosa di simile xmlns:thirdpartyns="urn:just:attributes"
, vale a dire, sono l'analisi di base al nome dato al namespace. Lo ha il valore di come "terze parti" perché il loro software funzioni.
Qualcuno sa di un modo per aggirare questo, a corto di fare un trovare e sostituire nella stringa risultante? Una regola di bind personalizzata forse?
Grazie. Funziona come un fascino! –
Il link è rotto. –
Il link è morto ... @DaveC si prega di controllare! – basZero