1

org.springframework.oxm.jaxb.Jaxb2Marshallerを使用して、リクエストxmlをアンマーシャリングしています。エンコーディングがプロローグで次のように設定されている場合でも、リクエストに「&」(アンパサンド)が含まれているため、アンマーシャリングは失敗します

requestXML-

<?xml version="1.0" encoding="utf-8"?><createaccountrequest><username>Test&jsongg</username><userpassword>12345</userpassword></createaccountrequest>

私が得る例外は以下の通りです

    500内部サーバーエラー

    org.springframework.http.converter.HttpMessageNotReadableException:[class com.marketplace.system.customer.service.component.request.vo.AccountRequestVO]にアンマーシャリングできませんでした:null; ネストされた例外はjavax.xml.bind.UnmarshalExceptionです
     -リンクされた例外を除く:
    [org.xml.sax.SAXParseException:エンティティ"jsongg1h61"への参照は「;」で終わる必要があります デリミタ。]
        org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter.readFromSource(Jaxb2RootElementHttpMessageConverter.java:82)〜[spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]で
        org.springframework.http.converter.xml.AbstractXmlHttpMessageConverter.readInternal(AbstractXmlHttpMessageConverter.java:61)〜[spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]で
        org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:153)〜[spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]で
        org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:120)〜[spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]

どんなポインタも大いに役立ちます。

前もって感謝します

4

1 に答える 1

2

パーサーエラーは次のように正しいです。

<username>Test&jsongg</username>

整形式のXMLではありません。XMLの要素のコンテンツにアンパサンドが必要な場合は、としてエスケープする必要があります&amp;

XML文字データに関するルール(そのまま使用できる文字、エスケープする必要がある文字(およびその方法)、エスケープされた形式でも完全に禁止されている文字)は複雑であり、XMLを生成する場合は、手作業でやろうとするのではなく、そうするためのXMLライブラリ。そうは言っても、CDATAを使用して目的を達成できる可能性があります。以下整形式です。

<username><![CDATA[Test&jsongg]]></username>

<![CDATA[で始まり、で終わるテキストのブロックは]]>、パーサーによってプレーンテキストとして扱われ、アンパサンド、小なり記号などは特別な意味を失います。ここで注意しなければならないのは、CDATAセクションはネストされないため、CDATAでラップしている値に3文字の部分文字列が含まれている場合は]]>]]]]><![CDATA[>]]、、 CDATAセクションの終わりで、すぐに別のセクションを開始し、)を続行し>ます。

于 2013-01-24T10:15:29.387 に答える