Проблема с jaxb moxy при использовании связующего для демаршалирования xml с пространством имен

Я использую jaxb moxy для демаршалирования xml из связующего, но это дает исключение: в проекте не найден дескриптор с компонентами корневого элемента по умолчанию. я также использую package-info.java для указания пространства имен.

Xml файл для демаршалирования-

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.example.org/package">
</beans>

Beans.java-

@XmlRootElement(namespace="http://www.example.org/package")
public class Beans {

String name = "ss";

@XmlElement
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}

пакет-info.java

@XmlSchema(
    namespace="http://www.example.org/package",
    elementFormDefault=XmlNsForm.QUALIFIED)
package com.jaxb.test;


import javax.xml.bind.annotation.*;

Основной класс-

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        File xml = new File(
                "D:\\eclipse-jee-indigo-SR2\beans.xml");
        Document document = db.parse(xml);

        JAXBContext jc = JAXBContext.newInstance(Beans.class);



        Binder<Node> binder = jc.createBinder();

        Beans customer = (Beans)   jc.createBinder().unmarshal(document);//throws exception

     //Beans customer = (Beans) jc.createUnmarshaller().unmarshal(xml);This works
    //Beans customer = (Beans) jc.createUnmarshaller().unmarshal(document);Throws same exception

Исключение-

javax.xml.bind.UnmarshalException
- with linked exception:
[Exception [EclipseLink-25008] (Eclipse Persistence Services - 2.4.1.v20121003-   ad44345): org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: A descriptor with default root element beans was not found in the project]
at  org.eclipse.persistence.jaxb.JAXBUnmarshaller.handleXMLMarshalException(JAXBUnmarshaller.java:1014)
at  org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:199)
at com.jaxb.test.JaxbTest.main(JaxbTest.java:43)

person Kuldeep Singh    schedule 20.03.2013    source источник


Ответы (2)


По умолчанию DocumentBuilderFactory не знает пространства имен. Это означает, что документ, который вы передаете MOXy, не будет соответствовать пространству имен, как ожидалось. Вы можете исправить это, добавив в свой код следующее:

dbf.setNamespaceAware(true);
person bdoughan    schedule 20.03.2013

Решено. Вместо использования package-info.java я использовал bindins.xml .

beans-bindings.xml-

<?xml version="1.0" encoding="UTF-8"?>
<xml-schema element-form-default="QUALIFIED" namespace="http://www.example.org/package">
    <xml-ns prefix="" namespace-uri="http://www.example.org/package" />
</xml-schema>

<java-types>
    <java-type name="Beans">
    <xml-root-element name="beans"/>
        <java-attributes>

        </java-attributes>
    </java-type>
</java-types>

person Kuldeep Singh    schedule 20.03.2013