Java-Missing WS-Addressing header: "{http://www.w3.org/2005/08/addressing}动作"
Java-Missing WS-Addressing header: "{http://www.w3.org/2005/08/addressing}Action"
我尝试在 java 7 中将客户端连接到 Web 服务。我明白了:
警告:表示消息寻址 属性 的必需 header 不存在,问题 header:{http://www.w3.org/2005/08/addressing}操作
com.sun.xml.internal.ws.addressing.model.MissingAddressingHeaderException:缺少 WS-Addressing header:“{http://www.w3.org/2005/08/addressing}操作”
如何解决这个错误?
非常感谢。
--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;
--java Web 服务客户端代码--
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--
我找到了解决这个问题的方法link:http://informatictips.blogspot.com.tr/2013/09/using-message-handler-to-alter-soap.html
我收到的第二个错误是——无法添加 header,而 header 已存在——
我找到解决这个问题的方法 link:SEVERE: SAAJ0120: Can't add a header when one is already present
现在我收到了第三个错误 --java.lang.ExceptionInInitializerError--
我找不到这个错误的解决方案
我收到此错误:"A required header representing a Message Addressing Property is not present"。在这种情况下要做的事情:将以上部分添加到实现 <SOAPHandler<SOAPMessageContext>
的 class
@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;
}
并(如果您已经写入)删除 header 个元素(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());
我尝试在 java 7 中将客户端连接到 Web 服务。我明白了:
警告:表示消息寻址 属性 的必需 header 不存在,问题 header:{http://www.w3.org/2005/08/addressing}操作 com.sun.xml.internal.ws.addressing.model.MissingAddressingHeaderException:缺少 WS-Addressing header:“{http://www.w3.org/2005/08/addressing}操作”
如何解决这个错误?
非常感谢。
--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;
--java Web 服务客户端代码--
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--
我找到了解决这个问题的方法link:http://informatictips.blogspot.com.tr/2013/09/using-message-handler-to-alter-soap.html
我收到的第二个错误是——无法添加 header,而 header 已存在——
我找到解决这个问题的方法 link:SEVERE: SAAJ0120: Can't add a header when one is already present
现在我收到了第三个错误 --java.lang.ExceptionInInitializerError--
我找不到这个错误的解决方案
我收到此错误:"A required header representing a Message Addressing Property is not present"。在这种情况下要做的事情:将以上部分添加到实现 <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;
}
并(如果您已经写入)删除 header 个元素(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());