JAX-WS |在逻辑处理程序中获取操作名称

时间:2013-02-15 17:34:26

标签: jax-ws

我有一个从我的WSDL生成的JAX-WS 2.0 Web服务实现。

我需要在逻辑处理程序实现中访问Web服务操作名称。

我使用了以下来解决这个问题,但它总是返回null。

context.get(MessageContext.WSDL_OPERATION);

如果有人帮我解决这个问题,那就太好了。

我的服务器是WAS 7.0,开发IDE是RAD 8.

提前致谢。

3 个答案:

答案 0 :(得分:2)

如果您想要SOAPAction Header并且它包含Web服务名称(就像我的那样),您可以使用它来打印它:

private void inLogger(SOAPMessageContext context){
    HttpServletRequest req = (HttpServletRequest)context.get(MessageContext.SERVLET_REQUEST);
    System.out.println(req.getHeader("SOAPAction"));
}

答案 1 :(得分:0)

您可以尝试这种方式:

1)通过requestContext设置参数:

 Map<String, Object> requestCtx = dispatcher.getRequestContext();
 requestCtx.put("operationName", "anyOperation");

2)在WS LogicalHandler中的handleMessage中检查此参数:

 public boolean handleMessage(LogicalMessageContext messageContext) {
    boolean isCustomOperation = messageContext.containsKey("operationName");
    if (isCustomOperation) {
    // do smth..
    }
    return true;
 }

答案 2 :(得分:0)

如果您的处理程序正在实施LogicalHandler<LogicalMessageContext>,您可以这样做:

((QName)context.get( LogicalMessageContext.WSDL_OPERATION )).getLocalPart();

这将返回被调用操作的名称。