Например, у меня есть простая схема, которая импортирует другую схему. Вторая схема (urn: just: attributes, just-attributes.xsd) просто определяет группу атрибутов.
<?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>
Я использую задачу Metro xjc Ant, чтобы сгенерировать классы из этой схемы. Проблема, с которой я сталкиваюсь, заключается в том, что стороннее приложение, с которым я взаимодействую, свойственно пространствам имен. В этом случае мне нужно значение String, поэтому я должен его сериализовать. Для этого я использую код шаблона.
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();
}
Что дает мне что-то в строках
<?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"/>
Проблема заключается в том, что эта третья сторона ожидает что-то вроде xmlns:thirdpartyns="urn:just:attributes"
, то есть они анализируются на основе имени, заданного для пространства имен. Он имеет, чтобы быть "сторонними" для работы своего программного обеспечения.
Кто-нибудь знает об этом, не выполняя поиск и замену в результирующей строке? Возможно правило пользовательского связывания?