Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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 我得到的错误是;缺少@XmlRootElement注释";在尝试使用JAXB将对象打包成xml文件时_Java_Jaxb_Xml Serialization - Fatal编程技术网

Java 我得到的错误是;缺少@XmlRootElement注释";在尝试使用JAXB将对象打包成xml文件时

Java 我得到的错误是;缺少@XmlRootElement注释";在尝试使用JAXB将对象打包成xml文件时,java,jaxb,xml-serialization,Java,Jaxb,Xml Serialization,我是一个刚刚开始使用JAXB的人,我所需要的只是将一个对象写入xml,然后在某个时候将其读回java 这是我的班级: public class VSM implements java.io.Externalizable { ArrayList<String> termList; //Term Dictionary ArrayList<String> queryTermList; /

我是一个刚刚开始使用JAXB的人,我所需要的只是将一个对象写入xml,然后在某个时候将其读回java

这是我的班级:

public class VSM implements  java.io.Externalizable 
{

     ArrayList<String> termList;                    //Term Dictionary
     ArrayList<String> queryTermList;               //Query list
     ArrayList<ArrayList<Doc>> docLists;                    
     ArrayList<ArrayList<Doc>> queryDocLists;
     double[] docLength;                               //Denominator for doc linearization      
     double queryLength;                               //Denominator for query lineriazation


     HashMap<String, Double> queryDocLenght;        //Vector for holding noramiliase queries  
     HashMap<String, Double> queryDoc;
     String Docs[];                          //List of file names 

     Double scoreCap=0.04;                          //Score cap to reduce the effect of stop words

     public static String fileName = "indexedFiles.txt";
     private static final long serialVersionUID = 7863262235394607247L;
public VSM()
{
//Some constructor code
}
}

我还不完全理解JABX和所有的it方法,所以我很难理解这个错误,我试着用谷歌搜索了一下,发现很多人都犯了这个错误,但是仍然很难理解这里的问题和解决方案。

当您的类没有使用
@XmlRootElement
注释时,您需要将其包装到
JAXBElement
的实例中,就像您对
封送
操作之一所做的那样:

jaxbMarshaller.marshal(new JAXBElement<VSM>(new QName("uri","local"), VSM.class, vsm), System.out);
更新
谢谢你的回答,这样做只会让我创建空的xml文件,但是 现在我知道我做错了什么,我试图写作是愚蠢的 不指定注释的xml


实现不需要任何注释(请参阅)。添加的最常见注释是
@XmlRootElement
,但如果没有它,您可以使用
JAXBElement
(请参阅:)。如果您的类没有公共访问器方法,那么您可能还对
@xmlacessortype(xmlacesstype.FIELD)
注释感兴趣(请参阅:)。

感谢您的回答,这样做只会让我创建空xml文件,但现在我知道我做错了什么,我试图编写一个xml而不指定annoations@Snedden27-我已经用一些额外的信息更新了我的答案,这些信息应该会有所帮助。非常感谢,我在JAX-RPC中使用了这些信息,效果非常好!
javax.xml.bind.MarshalException
 - with linked exception:
[com.sun.istack.SAXException2: unable to marshal type "KPT.VSM" as an element because it is missing an @XmlRootElement annotation]
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:326)
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:251)
    at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(Unknown Source)
    at KPT.VSM.writeXML(VSM.java:477)
    at KPT.VSM.main(VSM.java:511)
Caused by: com.sun.istack.SAXException2: unable to marshal type "KPT.VSM" as an element because it is missing an @XmlRootElement annotation
    at com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:249)
    at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:339)
    at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:494)
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:323)
    ... 4 more
jaxbMarshaller.marshal(new JAXBElement<VSM>(new QName("uri","local"), VSM.class, vsm), System.out);
jaxbMarshaller.marshal(vsm, System.out);