3

さまざまな 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"/>

これを非整列化すると、同じエラーが発生します。

4

2 に答える 2

0

WebLogic 12 でも同じエラー メッセージが表示されましたが、問題は名前空間プレフィックスが原因でした。@Xmlrootelement(name="namespace:root tag name") に名前空間を明示的に追加すると修正されました

于 2015-03-11T18:42:52.100 に答える