Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JAXB进行解组';行不通_Java_Xml_Jaxb - Fatal编程技术网

Java 使用JAXB进行解组';行不通

Java 使用JAXB进行解组';行不通,java,xml,jaxb,Java,Xml,Jaxb,我有一个simpexml,我想将其解压到一个模型类中。我已经用JAXB注释对该类进行了注释,以定义访问类型(字段): import javax.xml.bind.annotation.XmlAccessType; 导入javax.xml.bind.annotation.XmlAccessorType; @XmlAccessorType(XmlAccessType.FIELD) 公共类数据测试{ 私有字符串名称; 公共DtoTest(){} 公共数据测试(字符串名称){ 超级(); this.na

我有一个simpexml,我想将其解压到一个模型类中。我已经用JAXB注释对该类进行了注释,以定义访问类型(字段):

import javax.xml.bind.annotation.XmlAccessType;
导入javax.xml.bind.annotation.XmlAccessorType;
@XmlAccessorType(XmlAccessType.FIELD)
公共类数据测试{
私有字符串名称;
公共DtoTest(){}
公共数据测试(字符串名称){
超级();
this.name=名称;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
@凌驾
公共字符串toString(){
返回“DtoTest[name=“+name+”]”;
}
}
这是我的主要类,我在其中对保存在字符串变量中的简单XML运行解组方法:

公共类测试{
公共静态void main(字符串[]args)引发异常{
Object obj=new DtoTest();
String testXML=“示例”;
obj=unmarshal(obj,testXML);
系统输出打印项次(obj);
}
/*这是一种通用的解组方法,我已经成功地将其用于其他XML*/
公共静态T解组(T obj,字符串xml)引发异常{
XMLInputFactory xif=XMLInputFactory.newFactory();
XMLStreamReader xsr=xif.createXMLStreamReader(新的StringReader(xml));

Class我刚刚在jdk1.7.0_67上运行了您的代码,它运行正常

DtoTest [name=example]

可能您对包含的库有一些问题?我只使用普通java运行了它。

您的问题对我来说运行得非常好。您可以对其进行一个优化,即创建一个
StreamSource
,而不是
XMLStreamReader

import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
import java.io.StringReader;

public class Test {

    public static void main(String[] args) throws Exception {
        Object obj = new DtoTest();
        String testXML = "<dtoTest><name>example</name></dtoTest>";
        obj = unmarshal(obj, testXML);
        System.out.println(obj);
    }

    public static <T> T unmarshal(T obj, String xml) throws Exception {
        StreamSource source = new StreamSource(new StringReader(xml));

        Class<? extends Object> type = obj.getClass();
        JAXBContext jc = JAXBContext.newInstance(type);
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        obj =  (T)unmarshaller.unmarshal(source, type).getValue();

        return obj;
    }

}
import javax.xml.bind.*;
导入javax.xml.transform.stream.StreamSource;
导入java.io.StringReader;
公开课考试{
公共静态void main(字符串[]args)引发异常{
Object obj=new DtoTest();
String testXML=“示例”;
obj=unmarshal(obj,testXML);
系统输出打印项次(obj);
}
公共静态T解组(T obj,字符串xml)引发异常{
StreamSource=新的StreamSource(新的StringReader(xml));

ClassI在我的简单项目中尝试了您的示例,效果很好。:)您可以添加所有库的版本吗?(输出为DtoTest[name=example])我只使用了difference
XMLInputFactory xif=XMLInputFactory.newInstance();
我在一个使用JavaSE 1.7的简单java项目中运行这段代码,我没有配置任何额外的jar或依赖项。我发现在同一个包中有一个package info类导致了这种奇怪的行为。在我删除它后,一切正常。我发现在同一个包中有一个package info类t对这种奇怪的行为负责。在我移除它之后,一切都很好。谢谢你的优化提示。