Por ejemplo, tengo un esquema simple que importa otro esquema. El segundo esquema (urn: just: attributes, just-attributes.xsd) solo define un grupo de atributos.¿Es posible personalizar el prefijo del espacio de nombres que utiliza JAXB cuando se coordina con una Cadena?
<?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>
Estoy utilizando la tarea Metro xjc Ant para generar clases fuera de este esquema. El problema al que me estoy enfrentando es que la aplicación de terceros con la que estoy interactuando es peculiar sobre los espacios de nombres. En este caso, necesito un valor de cadena, así que tengo que serializarlo. Yo uso un código repetitivo para esto.
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();
}
Lo que me da algo en la línea de
<?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"/>
El problema que tengo es que esta tercera parte espera algo así como xmlns:thirdpartyns="urn:just:attributes"
, es decir, que se está analizando en función del nombredado al espacio de nombres. Es tiene para ser "thirdpartyns" para que su software funcione.
¿Alguien sabe de una forma de evitar esto, a menos de hacer un hallazgo y reemplazar en la cadena resultante? Una regla de enlace personalizado tal vez?
Gracias. Esto funciona como un encanto! –
El enlace está roto. –
El enlace está muerto ... @DaveC por favor ¡compruébalo! – basZero