Я получаю следующее исключение, когда пытаюсь отменить XML-код обратно в java-код. Кажется, я где-то пропускаю декларацию пространства имен, но я не уверен, где.UnmarshalException - Пространство имен?
javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"wg_provider").
Expected elements are <{http://www.warriorgateway.org/WGProvider.xsd}wg_provider>
Этот файл изначально был создан с JAXB ИАС здесь:
JAXBContext providerContext = JAXBContext.newInstance(WgProvider.class);
Marshaller providerMarshaller = providerContext.createMarshaller();
providerMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter providerWriter = new StringWriter();
providerMarshaller.marshal(provider, providerWriter);
Вот верхняя часть файла схемы:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.warriorgateway.org/WGProvider.xsd"
xmlns:ns1="http://www.warriorgateway.org/WGProvider.xsd"
elementFormDefault="qualified">
<xsd:element name="wg_provider">
<xsd:complexType>
Вот верх файла XML не должно быть размещено:
<?xml version="1.0" encoding="UTF-8"?>
<wg_provider xmlns="http://www.warriorgateway.org/WGProvider.xsd">
<ein>26-0081701</ein>
<name>MOMS CLUB</name>
<is_virtual>false</is_virtual>
<description>
</description>
Вот вершина JAXB генерируется Java файл:
@XmlRootElement(name = "wg_provider")
public class WgProvider {
Я попытался добавить элемент пространства имен в аннотации, но это не имело никакого значения.
Вот содержимое пакета-info.xml:
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.warriorgateway.org/WGProvider.xsd", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package org.warriorgateway.api.model.wg;
И, наконец, вот демаршаллинга код:
for (String wrappedProviderXML : wrappedProviderXMLList) {
DocumentBuilderFactory documentbuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentbuilder = documentbuilderFactory.newDocumentBuilder();
ByteArrayInputStream xmlStream = new ByteArrayInputStream(wrappedProviderXML.getBytes());
Document providerXMLDocument = documentbuilder.parse(xmlStream);
JAXBContext wgProviderContext;
try {
wgProviderContext = JAXBContext.newInstance(WgProvider.class);
Unmarshaller wgProviderUnmarshaller = wgProviderContext.createUnmarshaller();
WgProvider wgProvider = (WgProvider) wgProviderUnmarshaller.unmarshal(providerXMLDocument);
} catch (JAXBException ex) {
Logger.getLogger(MainController.class.getName()).log(Level.SEVERE, null, ex);
}
Благодаря-в-заранее,
Guido
PS Я использую Netbeans 7 для создания привязок.
Вы можете найти следующую полезную: HTTP: // blog.bdoughan.com/2011/11/jaxb-and-namespace-prefixes.html –
@BlaiseDoughan - я поднял дополнительную информацию выше. Вы думаете, что мне нужно добавить «NamespacePrefixMapper»? –
Вам не нужно использовать 'NamespacePrefixMapper'. Кажется, что ваш входной документ не является пространством имен. Как выглядит ваш немаршальный код? –