【问题标题】:Java-Missing WS-Addressing header: "{http://www.w3.org/2005/08/addressing}Action"Java-Missing WS-Addressing 标头:“{http://www.w3.org/2005/08/addressing}Action”
【发布时间】:2016-07-11 11:44:36
【问题描述】:

我尝试在 java 7 中使用客户端到 Web 服务。我明白了:

警告:表示消息寻址属性的必需标头不存在,问题标头:{http://www.w3.org/2005/08/addressing}操作 com.sun.xml.internal.ws.addressing.model.MissingAddressingHeaderException:缺少 WS-Addressing 标头:“{http://www.w3.org/2005/08/addressing}Action”

我该如何解决这个错误?

非常感谢。

--web 服务安全性看起来像 SOAPUI 中的以下部分--

    <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
         <wsse:UsernameToken wsu:Id="UsernameToken-1">
            <wsse:Username>gelistirici</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">gelistirme12</wsse:Password>
            <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">NT357!!_</wsse:Nonce>
            <wsu:Created>2016-05-07T11:57:03.821Z</wsu:Created>
         </wsse:UsernameToken>
      </wsse:Security>
   </soapenv:Header>

--Web服务接口--

 @WebMethod(action = "getRequestDetail")
    @WebResult(name = "requestDetail", targetNamespace = "")
    @RequestWrapper(localName = "getRequestDetail", targetNamespace = "http://xmlns.oracle.com/scheduler", className = "tr.com.service.soap.client.oracle.ess.beans.GetRequestDetail")
    @ResponseWrapper(localName = "getRequestDetailResponse", targetNamespace = "http://xmlns.oracle.com/scheduler", className = "tr.com.service.soap.client.oracle.ess.beans.GetRequestDetailResponse")
    public RequestDetail getRequestDetail(
        @WebParam(name = "requestId", targetNamespace = "http://xmlns.oracle.com/scheduler")
       long requestId)
        throws NotFoundException_Exception, RuntimeServiceException_Exception;

--web服务客户端的java代码--

ESSWebService_Service service = new ESSWebService_Service();
  ESSWebService port = service.getSchedulerServiceImplPort();
  BindingProvider provider = BindingProvider.class.cast(port);

  provider.getRequestContext().put("UsernameToken", "UsernameToken-1");
  provider.getRequestContext().put("Username", "gelistirici");
  provider.getRequestContext().put("Password", "gelistirme12");
  provider.getRequestContext().put("Nonce", "NT357!!_");
  provider.getRequestContext().put("Created", "2016-05-07T11:57:03.821Z");

  RequestDetail requestDetail = port.getRequestDetail(37);

【问题讨论】:

    标签: java web-services jax-ws wsimport


    【解决方案1】:

    我有点感动

    我收到的第一个错误是 --Missing WS-Addressing header--

    我找到了解决这个链接:http://informatictips.blogspot.com.tr/2013/09/using-message-handler-to-alter-soap.html

    我收到第二个错误是 --can't add a header when one is already present--

    我找到了解决这个链接:SEVERE: SAAJ0120: Can't add a header when one is already present

    现在我收到第三个错误--java.lang.ExceptionInInitializerError--

    我找不到解决此错误的方法

    【讨论】:

      【解决方案2】:

      我收到此错误:“表示消息寻址属性的必需标头不存在”。在这种情况下要做的事情:将上述部分添加到实现&lt;SOAPHandler&lt;SOAPMessageContext&gt;的类中

      @Override
          public Set<QName> getHeaders() {
              Set<QName> set = new HashSet<QName>();
              set.add(new QName("http://schemas.xmlsoap.org/ws/2004/08/addressing", "Action"));
              return set;
          }
      

      并且(如果你写过)删除标题元素(Action、ReplyTo、To、MessageID)

      SOAPHeaderElement actionElement = header.addHeaderElement(new QName("http://www.w3.org/2005/08/addressing", "Action"));
      actionElement.setMustUnderstand(true);
      String action = (String) messageContext.get("javax.xml.ws.soap.http.soapaction.uri");
      actionElement.addTextNode(action);
      
      SOAPHeaderElement replyToElement = header.addHeaderElement(new QName("http://www.w3.org/2005/08/addressing", "ReplyTo"));
      SOAPElement addressElement = replyToElement.addChildElement(new QName("http://schemas.xmlsoap.org/ws/2004/08/addressing","Address"));
      addressElement.addTextNode("http://www.w3.org/2005/08/addressing/anonymous");
      
      SOAPHeaderElement toElement = header.addHeaderElement(new QName("http://www.w3.org/2005/08/addressing", "To"));
      toElement.setMustUnderstand(true);
      String endpoint = (String) messageContext.get("javax.xml.ws.service.endpoint.address");
      toElement.addTextNode(endpoint);
      
      SOAPHeaderElement messageIdElement = header.addHeaderElement(new QName("http://www.w3.org/2005/08/addressing", "MessageID"));
      messageIdElement.addTextNode("uuid:" +UUID.randomUUID().toString());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-19
        • 2021-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        相关资源
        最近更新 更多