SOAP ヘッダーを作成するためのハンドラーを作成しましたが、それをさまざまな操作に使用する予定です。現在、操作に応じて、一部のヘッダー名が変更されています。したがって、ヘッダー名を変更することに基づいて、どの操作が呼び出されているかを知る必要があります。
そこに私の問題があります。私が取り組んでいる現在のプロジェクトの要件である JAX RPC を使用しています。ハンドラーで操作名を知るにはどうすればよいですか? 親切に助けてください。
これにより、サービス名が得られます。
@Override
public boolean handleMessage(SOAPMessageContext pContext) {
QName servicio = (QName) pContext.get(MessageContext.WSDL_SERVICE);
return servicio.getLocalPart();
}
これにより、操作名が得られます。
@Override
public boolean handleMessage(SOAPMessageContext pContext) {
QName servicio = (QName) pContext.get(MessageContext.WSDL_OPERATION);
return servicio.getLocalPart();
}
私はこれについていくつかの研究をしました。これについては、インターネット上で入手できる資料は多くありません。しかし、私は幸運になりました。私のような同様の問題に直面している人は、この方法を使用できます。
protected String getMethodName(MessageContext mc)
{
String operationName = null;
try
{
SOAPMessageContext messageContext = (SOAPMessageContext) mc;
// assume the operation name is the first element
// after SOAP:Body element
Iterator i = messageContext.
getMessage().getSOAPPart().getEnvelope().getBody().getChildElements();
while ( i.hasNext() )
{
Object obj = i.next();
if(obj instanceof SOAPElement)
{
SOAPElement e = (SOAPElement) obj;
operationName = e.getElementName().getLocalName();
break;
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
return operationName;
}
このメソッドは、メッセージ コンテキスト オブジェクトを取得し、soap エンベロープ全体を反復して操作名を取得します。
これが一部の人々に役立つことを願っています。