当使用绑定器对带有名称空间的xml进行解组时,jaxb moxy出现问题

当使用绑定器对带有名称空间的xml进行解组时,jaxb moxy出现问题,jaxb,xml-namespaces,moxy,unmarshalling,Jaxb,Xml Namespaces,Moxy,Unmarshalling,我正在使用jaxb moxy从绑定器中解组xml,但它给出了一个例外:在项目中找不到具有默认根元素bean的描述符。im还使用package-info.java指定名称空间 要解组的Xml文件- <?xml version="1.0" encoding="UTF-8" standalone="no"?> <beans xmlns="http://www.example.org/package"> </beans> } package-info.java @X

我正在使用jaxb moxy从绑定器中解组xml,但它给出了一个例外:在项目中找不到具有默认根元素bean的描述符。im还使用package-info.java指定名称空间

要解组的Xml文件-

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

package-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

默认情况下,
DocumentBuilderFactory
不支持命名空间。这意味着您要传递给MOXy的文档将不会按预期进行命名空间限定。您可以通过向代码中添加以下内容来解决此问题:

dbf.setNamespaceAware(true);

解决了这个问题。我没有使用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>

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)
<?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>