簡體   English   中英

Java-Missing WS-Addressing標題:“{http://www.w3.org/2005/08/addressing}Action”

[英]Java-Missing WS-Addressing header: “{http://www.w3.org/2005/08/addressing}Action”

我嘗試在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>

- 網絡服務接口 -

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

我對此動了一下

我收到的第一個錯誤是--Missing WS-Addressing header--

我找到解決這個鏈接: http//informatictips.blogspot.com.tr/2013/09/using-message-handler-to-alter-soap.html

我收到第二個錯誤 - 當一個已經存在時不能添加標題 -

我發現解決了這個鏈接: SEVERE:SAAJ0120:當一個已存在時,無法添加標題

現在我收到了第三個錯誤--java.lang.ExceptionInInitializerError--

我找不到這個錯誤的解決方案

我收到此錯誤:“表示消息尋址屬性的必需標頭不存在”。 在這種情況下要做的事情:將上面的部分添加到實現<SOAPHandler<SOAPMessageContext>

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM