[解決済み] JavaでSOAPMessageから生のXMLを取得する
2023-06-05 18:12:08
質問
JAX-WSでSOAP WebServiceProviderをセットアップしましたが、SOAPMessage(または任意のNode)オブジェクトから生のXMLを取得する方法がわからなくて困っています。 以下は、私が今持っているコードのサンプルで、XML を取得しようとしているところです。
@WebServiceProvider(wsdlLocation="SoapService.wsdl")
@ServiceMode(value=Service.Mode.MESSAGE)
public class SoapProvider implements Provider<SOAPMessage>
{
public SOAPMessage invoke(SOAPMessage msg)
{
// How do I get the raw XML here?
}
}
元のリクエストのXMLを取得する簡単な方法はないでしょうか? もし、別のタイプのプロバイダ(Sourceなど)を設定して生のXMLを取得する方法があれば、それもやってみたいと思っています。
どのように解決するのですか?
Provider<Source> を使って、この方法で生のXMLを取得できることが判明しています。
import java.io.ByteArrayOutputStream;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.ws.Provider;
import javax.xml.ws.Service;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceProvider;
@ServiceMode(value=Service.Mode.PAYLOAD)
@WebServiceProvider()
public class SoapProvider implements Provider<Source>
{
public Source invoke(Source msg)
{
StreamResult sr = new StreamResult();
ByteArrayOutputStream out = new ByteArrayOutputStream();
sr.setOutputStream(out);
try {
Transformer trans = TransformerFactory.newInstance().newTransformer();
trans.transform(msg, sr);
// Use out to your heart's desire.
}
catch (TransformerException e) {
e.printStackTrace();
}
return msg;
}
}
私は結局このソリューションを必要としなかったので、このコードを自分自身で実際に試していません - 正しくするためにいくつかの調整が必要かもしれません。 しかし、これが Web サービスから生の XML を取得するために進むべき正しい道であることは分かっています。
(どうしてもSOAPMessageオブジェクトが必要な場合、これをどのように動作させるかはわかりませんが、いずれにせよ生のXMLを処理するのであれば、なぜ上位のオブジェクトを使用するのでしょうか?)
関連
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
linux ant Resolve error: main class not found or couldn't be loaded org.apache.tools.ant.launcher.
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
Javaクラスが "Error occurred during initialization of boot layer "というエラーで実行される。
-
Jsoup-Crawlingの動作
-
ジャバアレイ
-
List list = new ArrayList(); Error: ArrayList は型に解決できません。
-
Java appears タイプEを囲むインスタンスがアクセスできない。
-
X11 DISPLAY変数が設定されていない」問題の解決方法
-
eclipse にリソースリーク:'in' が閉じない
-
代入の左辺は変数でなければならない 解答
-
linux ant Resolve error: main class not found or couldn't be loaded org.apache.tools.ant.launcher.