2013-03-20 59 views
4

我m使用jaxb moxy从解压缩xml解组,但它给出异常:在项目中找不到具有默认根元素bean的描述符。即时通讯也使用package-info.java来指定命名空间。问题与jaxb moxy时使用粘结剂unmrshal与命名空间xml

Xml文件的unmarshal-

<?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; 
} 

}

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 

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) 

回答

1

缺省情况下DocumentBuilderFactory没有名称空间感知的。这意味着您传递给MOXy的文档将不会按预期命名空间合格。您可以通过添加解决这个问题下面给您的代码:

dbf.setNamespaceAware(true); 
+1

谢谢,它的工作。 – 2013-03-20 12:36:14

1

解决使用package-info.java我用bindins.xml的。相反。

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