我使用 moxy 为不同的 xsd 文件生成代码: http ://www.forum-datenaustausch.ch/generalinvoiceresponse_400.xsd 和 http://www.forum-datenaustausch.ch/xmlstandards_generelle_rechnung_beispiele_antwort_4.3_20100901.zip
我为两个 xsd 生成了 jaxb 类(使用 moxy)。然后我尝试使用以下代码解组 xml 文件(由 eclipse 生成):
public void tempTest() throws JAXBException{
JAXBContext jC = JAXBContext.newInstance(<package for corresponding type>.ResponseType.class);
jC.createUnmarshaller().unmarshal(ResponseTest.class.getResourceAsStream("/responses/generalInvoiceResponse_400.xml"));
}
使用 4.3 类型的 xml 文件(第 2 个链接)可以正常工作,但使用 400 类型的 xml(第 1 个链接)我收到此错误:
Caused by: javax.xml.bind.UnmarshalException
- with linked exception:
[Exception [EclipseLink-25008] (Eclipse Persistence Services - 2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: A descriptor with default root element {http://www.forum-datenaustausch.ch/de}response was not found in the project]
这似乎是名称空间的问题。命名空间不同,但我看不到生成的代码或生成的 xml 的相关差异 - 命名空间是一致的。那么什么可能导致这个问题(区别在哪里)以及如何解决它?
小补充:我还尝试解组使用 jaxb/moxy-code 编组的 xml:
public void marshall() throws JAXBException, FileNotFoundException {
JAXBContext jC = JAXBContext.newInstance(ResponseType.class);
ObjectFactory of = new ObjectFactory();
jC.createMarshaller().marshal( of.createResponse(of.createResponseType()),new FileOutputStream("simpleresponse.xml"));
}
这将创建一个非常简单的 xml:
<?xml version="1.0" encoding="UTF-8"?>
<response xmlns="http://www.forum-datenaustausch.ch/de"/>
解组这会产生相同的错误。