【问题标题】:JAX-WS | Getting operation name in a logical handlerJAX-WS |在逻辑处理程序中获取操作名称
【发布时间】:2013-02-15 17:34:26
【问题描述】:

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

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

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

context.get(MessageContext.WSDL_OPERATION);

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

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

提前致谢。

【问题讨论】:

  • @kolossus - 不是直接复制的。您的链接问题指的是SOAPHandler,其中该问题指的是LogicalHandler。不同之处在于LogicalHandler 将LogicalMessageContext 传递给handleMessage 方法,该方法的范围比传递给SOAPHandler.handleMessage() 的MessageContext 更有限。

标签: jax-ws


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可以试试这个方法:

    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;
     }
    

    【讨论】:

      【解决方案3】:

      如果您的处理程序正在实现LogicalHandler&lt;LogicalMessageContext&gt;,您可以这样做:

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

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

      【讨论】:

        猜你喜欢
        • 2016-08-31
        • 1970-01-01
        • 1970-01-01
        • 2012-03-30
        • 1970-01-01
        • 2021-05-26
        • 2021-10-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多