2

POSTリクエストに問題があります。XML メッセージを受信し、JAXB で解析する必要があります。すべてが正常に機能しますが、メッセージに特殊文字が含まれている場合

<?xml version="1.0" encoding="UTF-8"?>
<sending>
    <sms>
        <message>España</message>
    </sms>
</sending>

不正な要求エラー (400) がスローされます。クライアントから送信された要求は構文的に正しくありません (不正な要求)。

これは、xml メッセージを処理するための私のコードです

@POST
@Path("smsSendPost")
@Produces(MediaType.APPLICATION_XML)
public Response smsSendPost(JAXBElement<Sending> xml){
    Sending sending = xml.getValue();

    //Process the message
}

私はそれをテストするためにTomcatを使用しています。

誰でもこれで私を助けることができますか?

更新: 問題の原因が tomcat であることがわかりました。ISO-8859-1 エンコーディングを使用して POST 経由でリクエストを送信すると、サービスは正常に動作します。解決策は、Tomcat のエンコーディングを変更することです。

4

4 に答える 4

1

ISO-8859-1 エンコーディングを使用して POST 経由でリクエストを送信すると、問題の原因は tomcat にあることがわかりました。サービスは正常に動作します。解決策は、Tomcat のエンコーディングを変更することだと思います。

于 2012-10-05T19:14:14.663 に答える
1

コンテンツ タイプが問題になる可能性がありますが、それは、クライアントの POST で生成するコンテンツ タイプと、受信側の XML パーサーで使用されている文字セットによって異なります。

このような多くの状況で実行可能な代替手段の 1 つは、特殊文字が発生する可能性がある XML で CDATA (解析されていない文字データ) ブロックを使用することです。

<sending>
    <sms>
        <message><![CDATA[España]]></message>
    </sms>
</sending>

デフォルトでは、XML パーサーは XML メッセージ内のすべてのテキストを解析しようとします。CDATA ブロックは、CDATA ブロック内に含まれる文字を解析しないように XML パーサーに指示します。

これを受信して​​いるサービスが文字を識別できない場合は、エラーが発生するか、XML の形式が正しくないと想定して、表示されている 400 をスローしている可能性があります。

CDATA ブロックの詳細: http://www.w3schools.com/xml/xml_cdata.asp

于 2012-09-21T15:29:46.717 に答える
0

私に突き出ているのは、@Consumesアノテーションを指定していないことです...@Consumes(MediaType.APPLICATION_XML)メソッドに追加してみてください。また、文字エンコーディングを指定するContent-Type適切な<?xmlタグを送信し、持っていることを確認してください。

于 2012-09-21T15:16:30.830 に答える
0

クライアントが無効なリクエストを送信しているようです。Content-TypeUTF8 以外のエンコーディングを使用していて、 headerでその名前を指定していないと思われます。完全な HTTP リクエストを投稿していただければ、問題をより詳細に診断できる可能性があります。

于 2012-09-21T15:06:23.947 に答える