1

SOAP エンベロープのない SOAP 要求である文字列として XML ドキュメントがあります。私は今、次のことをする必要があります:

  • SOAP エンベロープでラップされた Web サービスにリクエストをポストする
  • SOAP エンベロープをアンラップして応答を返す

実際の HTTP 接続は問題ありませんが、ラッピングとアンラッピングに本当に苦労しています。Java でこの XML 操作を行う方法を理解しようとしましたが、実際には理解できません。javax.xmlたとえば、パッケージを見てみましたが、ほとんどが非常に混乱していることがわかります。残念ながら、私は Java 1.5 に限定されており、外部ライブラリはありません。それ以外の場合は、おそらくいくつかの apache commons などを使用していたでしょう。

基本的に私が探しているのは、次のようなメソッドのペアです。

/* Wraps the xml in a standard soap envelope */
String wrap(String xml)

/* Removes soap envelope from the xml */
String unwrap(String xml)

注意しないとxmlヘッダーが混乱する可能性がありますが、私が推測する方法はのwrapように単純である可能性があります。soapStart + xml + soapEndしかし、実際に内容を抽出し、必要な名前空間宣言などを確実に取得する必要があるため、アンラップは私にはトリッキーすぎ<soapenv:Body> ます

私は何時間もここに座っていましたが、まだわかりません...うまくいけば、あなたの何人かはそうします:)

4

2 に答える 2

1

正規表現を使用してみてください。エンベロープの内容を検索するには:

String regex = "^<(soapenv:Envelope).*?>(.*?)</\\1>$";
Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
Matcher matcher = pattern.matcher(xml);
matcher.matches();
String body = matcher.group(2);

このようなもの

于 2012-10-05T16:48:19.470 に答える
0

メッセージの SOAP 部分には、本文 (データまたは障害情報を含めることができる) とオプションのヘッダーを含むエンベロープが含まれます。JAXM を使用して SOAP メッセージを作成すると、SOAP 部分、エンベロープ、および本文が自動的に作成されます。作成する必要があるのは、本文要素のみです。そのためには、ボディ要素の親である SOAP ボディにアクセスする必要があります。

SOAPMessage ツリー内の任意のオブジェクトに到達するには、次のコード行に示すように、ルートから開始してツリーをトラバースする必要があります。たとえば、SOAPMessage が MyMsg であるとすると、SOAP 本文を取得するために行う必要がある呼び出しは次のとおりです。

SOAPPart MyPart = MyMsg.getSOAPPart();

SOAPEnvelope MyEnv = MyPart.getEnvelope();

SOAPBody MyBody = envelope.getBody();

この時点で、(名前空間で説明されているように) body 要素の名前を作成し、body 要素を SOAPMessage に追加できます。

たとえば、次のコード行は body 要素の名前 (XML タグの表現) を作成します。

Name bodyName = envelope.createName("Temperature");

次のコード行は、body 要素を body に追加します。

SOAPBodyElement myTemp = MyBody.addBodyElement(bodyName);

最後に、このコード行は body 要素 bodyName のいくつかのデータを定義します。

myTemp.addTextNode("98.6");

参照: http://docs.oracle.com/cd/E19263-01/817-6026/SOAP.html

于 2012-10-05T16:32:20.270 に答える