【问题标题】:How to get the WS operation name in Handler using JAX RPC?如何使用 JAX RPC 获取 Handler 中的 WS 操作名称?
【发布时间】:2013-01-02 12:16:21
【问题描述】:

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

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

【问题讨论】:

    标签: java handler jax-rpc


    【解决方案1】:

    这会为您提供服务名称:

    @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();
    }
    

    【讨论】:

      【解决方案2】:

      我对此进行了一些研究。互联网上没有很多可用的材料。不过我很幸运。和我一样遇到类似问题的朋友可以用这个方法:

          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信封以获取操作名称。

      希望这对一些人有所帮助。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-31
      • 2011-03-19
      • 1970-01-01
      • 2016-08-23
      • 2014-03-23
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多