さまざまな xsd ファイルに対して moxy を使用してコードを生成しました: http://www.forum-datenaustausch.ch/generalinvoiceresponse_400.xsd および http://www.forum-datenaustausch.ch/xmlstandards_generelle_rechnung_beispiele_antwort_4.3_20100901.zip
両方の xsd に対して jaxb-classes を生成しました (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 タイプ (2 番目のリンク) の xml ファイルでは問題なく動作しますが、400 タイプ (1 番目のリンク) の xml では次のエラーが発生します。
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"/>
これを非整列化すると、同じエラーが発生します。