如何使用JAX RPC在Handler中获取WS操作名称?

时间:2013-01-02 12:16:21

标签: java handler jax-rpc

我已经编写了一个处理程序来构造我的SOAP头,但我将把它用于不同的操作。现在,根据操作,一些标题名称会发生​​变化。所以我需要知道哪个操作被调用,根据哪个操作我将改变我的标题名称。

存在我的问题。我正在使用JAX RPC,这是我正在处理的当前项目的要求。如何在我的处理程序中了解操作名称?请帮助。

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:-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信封以获取操作名称。

希望这有助于一些人。