0

SOAP ヘッダーを作成するためのハンドラーを作成しましたが、それをさまざまな操作に使用する予定です。現在、操作に応じて、一部のヘッダー名が変更されています。したがって、ヘッダー名を変更することに基づいて、どの操作が呼び出されているかを知る必要があります。

そこに私の問題があります。私が取り組んでいる現在のプロジェクトの要件である JAX RPC を使用しています。ハンドラーで操作名を知るにはどうすればよいですか? 親切に助けてください。

4

2 に答える 2

0

これにより、サービス名が得られます。

@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();
}
于 2016-04-19T11:24:23.880 に答える
-1

私はこれについていくつかの研究をしました。これについては、インターネット上で入手できる資料は多くありません。しかし、私は幸運になりました。私のような同様の問題に直面している人は、この方法を使用できます。

    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 エンベロープ全体を反復して操作名を取得します。

これが一部の人々に役立つことを願っています。

于 2013-01-02T12:52:02.087 に答える