jaxb - 使用 binder 解码具有命名空间的 xml 时出现 jaxb moxy 问题

标签 jaxb xml-namespaces moxy unmarshalling

我正在使用 jaxb moxy 从活页夹中解码 xml,但它给出了异常:在项目中找不到具有默认根元素 bean 的描述符。我还使用 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;
}

}

包信息.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

异常(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)

最佳答案

默认为 DocumentBuilderFactory不知道命名空间。这意味着您传递给 MOXy 的文档不会像预期的那样被命名空间限定。您可以通过在代码中添加以下内容来解决此问题:

dbf.setNamespaceAware(true);

关于jaxb - 使用 binder 解码具有命名空间的 xml 时出现 jaxb moxy 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15522451/

相关文章:

jakarta-ee - 加载打包在 WAR 中的 XSD 的正确方法?

java - 解码原始无模式 XML

java - JAXB 注释用于处理不同命名空间中的相同元素名称

java - 使用 maven-jaxb2-plugin 获取 boolean 变量的 Getter

java - JAXB 元素列表中缺少字段

php - SimpleXmlElement 和 XPath,获取空数组()

powershell - 在 PowerShell 中为命名空间管理器设置默认命名空间

java - 使用 JAX-RS REST 服务的 HTTP Put 枚举

java - moxy jaxb : mapping member attribute

JAXB、MOXy、JSR-303、JPA - 解码后禁用 JSR-303 验证?