我正在尝试从xml文件创建java对象.我正在使用jaxb(解组)来创建java对象.我收到错误javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.w3.org/2001/XMLSchema", local:"schema"). Expected elements are
我做了一些谷歌并发现,我们需要xsd文件才能这样做...所以我使用apache inst2xsd工具将其转换为xsd.我使用以下java代码:
import java.io.FileNotFoundException;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.UnmarshalException;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="report")
public class Report
{
public static void main(String [] args) throws FileNotFoundException
{
try
{
JAXBContext jc = JAXBContext.newInstance(new Class[] {com.bcbsks.testjb.Report.class});
Unmarshaller um = jc.createUnmarshaller();
Report myJAXBObject = (Report)um.unmarshal(new java.io.FileInputStream("report.xsd"));
}
catch( UnmarshalException ue )
{
ue.printStackTrace();
}
catch( JAXBException je )
{
je.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到了fol;由于错误:
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.w3.org/2001/XMLSchema", local:"schema"). Expected elements are (none)
Run Code Online (Sandbox Code Playgroud)
你能告诉我我做错了什么吗?
任何帮助是极大的赞赏.
我想你错过了几步.你没有发布report.xsd是什么,也没有发布样本xml,所以我将采取一些猜测.
对于初学者,你试图解组xsd而不是xml,这本身就是问题的根源.话虽这么说,你的Report.java类看起来看起来不正确,所以即使你试图攻击你的xml文件,你的解组也不太可能.
如果你有一个正确创建的XSD文件,你应该做的第一件事是使用创建JaxB POJO xjc. xjc与java一起安装,您可以使用它从xsd创建带注释的java类.它还将创建另外两个文件--JAXB使用的ObjectFactory.java和package-info.java.(您可以使用-d参数指定输出路径(有关开关的完整列表,请参阅--help)
xjc -d c:\dev\myproject\src\main\java report.xsd
Run Code Online (Sandbox Code Playgroud)
生成这些文件后,必须根据该包/文件创建JAXBContext.
JAXBContext jc = JAXBContext.newInstance(something.generated.Report.class);
Unmarshaller um = jc.createUnmarshaller();
Report myJAXBObject = (Report)um.unmarshal(new java.io.FileInputStream("report.xsd"), Report.class).getValue();
Run Code Online (Sandbox Code Playgroud)
unmarshaller生成一个JAXBElement,您可以从中提取实际的报告类.
希望这可以帮助.