どの操作が呼び出されているかに基づいて異なるコードを実行する受信メッセージ用のカスタム SOAP メッセージ ハンドラーがあります。操作名を取得する最初の試みは、次のようになりました。
public boolean handleMessage(SOAPMessageContext context)
{
String op = context.get(MessageContext.WSDL_OPERATION);
...
プロパティが設定されていないように見えるため、これは失敗しましたMessageContext.WSDL_OPERATION
。次に、これを使用してみました:
public boolean handleMessage(SOAPMessageContext context)
{
Map<?, ?> headers = (Map<?, ?>)context.get(MessageContext.HTTP_REQUEST_HEADERS);
ArrayList<String> SOAPAction = ((ArrayList<String>) headers.get("SOAPAction"));
String opName = SOAPAction.get(0);
//opName will be formatted like "urn#myOperation", so the prefix must be removed
opName = ((opName.replace("\"","").split("#"))[1]);
これは機能しますが、ヘッダー プロパティ「SOAPAction」が設定されていない (または存在すらしていない) か、期待する値を持っていない可能性があるのではないかと心配しています。これが操作名を取得する「公式」の方法であるかどうかわからないため、少し心配です-context
デバッガーの内容を見てわかりました。
着信 SOAP メッセージを処理するときに操作名を取得するより良い方法はありますか?