2

SOAP メッセージの解析に関連する問題があります。
これはメッセージです:

------=_Part_3_5438437.1107262647279

Content-Type: text/xml

<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
  <soap-env:Body>
    <content>
     [...]
     </content>
  </soap-env:Body>
</soap-env:Envelope>

------=_Part_3_5438437.1107262647279
Content-Type: text/plain; charset=ISO-8859-1

text
------=_Part_3_5438437.1107262647279--

これは、メッセージを受信して​​解析する Java サーブレットの抜粋です。

messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
message = messageFactory.createMessage(mimeHeaders, req.getInputStream());

サーブレットをテストするために、JMeter を使用しています。SOAP メッセージを HTTP リクエストの未加工の投稿本文に入れました。ヘッダーにこれを入れました: Content-type multipart/related;boundary=----=_Part_3_5438437.1107262647279

問題番号 1: SAAJ での解析にバグがあるようです。デバッグすると、境界が ----null と見なされ、まるで = をトークンとして使用できるかのように見えるためです。そのため、本文とヘッダーの両方から削除しました。受信した入力を変更できないため、これは大きな問題ですが、しばらくの間、変更できるふりをしましょう。わかりました、これで問題番号 2 に進みます: 境界は正しく解析されるようになりましたが、次の例外が発生します: com.sun.xml.messaging.saaj.SOAPExceptionImpl: Bad Content-Type for SOAP Part : text/plain

わかりました、私はそれを解決する方法を知っていると思います.Content-type ヘッダーにタイプを追加する必要があります: Content-type multipart/related;type=text/xml;boundary=----_Part_3_5438437.1107262647279

はい、もちろん、別の厄介な例外があります。

saaj-impl-1.3.18 と saaj-api-1.3.3 を使用しています。
Java バージョン "1.6.0_29"
Java(TM) SE ランタイム環境 (ビルド 1.6.0_29-b11-402-11D50b)
Java HotSpot(TM) 64 ビット サーバー VM (ビルド 20.4-b02-402、混合モード)

4

1 に答える 1

2

問題番号2の解決策は、ここのの行にあります。

------=_Part_3_5438437.1107262647279

Content-Type: text/xml

削除する必要があります。そうしないと、コンテンツタイプはデフォルトでテキスト/プレーンであると見なされます。これを指摘してくれたBrianJohhttp://twitter.com/brianwjohに感謝します。
問題番号1については、「」の間に境界値を置くだけで解決しました。同じことがタイプにも当てはまります。

 type="text/xml";boundary="----=_Part_3_5438437.1107262647279"
于 2012-02-15T10:50:30.783 に答える