我有一个来自oracle的非.net webservice要访问,我需要添加soap头。如何在java中添加soap头?
Authenticator.setDefault(new ProxyAuthenticator("username", "password"));
System.getProperties().put("proxySet", "true");
System.setProperty("http.proxyHost", "IP");
System.setProperty("http.proxyPort", "port");
proxy = new RegPresMed_Service(new URL("webservice")).getRegPresMed();
((BindingProvider) proxy).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "realwebservice");
((BindingProvider) proxy).getRequestContext().put("com.sun.xml.ws.request.timeout", new Integer(60000));
((BindingProvider) proxy).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "webserviceUsername");
((BindingProvider) proxy).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "webservicePassword");这有必要吗?
((BindingProvider) proxy).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "webserviceUsername");
((BindingProvider) proxy).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "webservicePassword");我的soap头是这样的:
<wsse:Security soapenv:mustUnderstand="1"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-6"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>username</wsse:Username>
<wsse:Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
<wsse:Nonce
EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">randomnaumber==</wsse:Nonce>
<wsu:Created>dateCreated</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>发布于 2011-05-12 21:38:02
我做到了,只需遵循本教程即可。帮助很大
是javadb的副本(因为已关闭)
http://informatictips.blogspot.pt/2013/09/using-message-handler-to-alter-soap.html
或
http://www.javadb.com/using-a-message-handler-to-alter-the-soap-header-in-a-web-service-client
发布于 2016-04-26 20:12:22
我费了好大劲才让它工作起来。这就是为什么我要在这里添加一个完整的解决方案:
我的目标是将此标头添加到SOAP信封:
<soapenv:Header>
<urn:OTAuthentication>
<urn:AuthenticationToken>TOKEN</urn:AuthenticationToken>
</urn:OTAuthentication>
</soapenv:Header>SOAPHeaderHandler类。导入java.util.Set;导入java.util.TreeSet;导入javax.xml.namespace.QName;导入javax.xml.soap.SOAPElement;导入javax.xml.soap.SOAPEnvelope;导入javax.xml.soap.SOAPFactory;导入javax.xml.soap.SOAPHeader;导入javax.xml.ws.handler.MessageContext;导入javax.xml.ws.handler.soap.SOAPHandler;导入javax.xml.ws.handler.soap.SOAPMessageContext;公共类SOAPHeaderHandler实现SOAPHandler {私有最终字符串authenticatedToken;context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);(String SOAPHeaderHandler){ this.authenticatedToken = authenticatedToken;} public boolean handleMessage(SOAPMessageContext context) { Boolean outboundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);if (outboundProperty()){outboundProperty.booleanValue{ SOAPEnvelope SOAPFactory = SOAPFactory.newInstance();String prefix = "urn";String uri = "urn:api.ecm.opentext.com";SOAPElement securityElem = factory.createElement("OTAuthentication",prefix,uri);SOAPElement tokenElem = factory.createElement("AuthenticationToken",prefix,uri);tokenElem.addTextNode(authenticatedToken);securityElem.addChildElement(tokenElem);SOAPHeader header = envelope.addHeader();header.addChildElement(securityElem);} catch (Exception e) { e.printStackTrace();}} else { // inbound }返回true;} public Set getHeaders() { return new TreeSet();} public boolean handleFault(SOAPMessageContext context) { return false;} public void close(MessageContext context) { // } }
1. Add the handler to the proxy. Note that according javax.xml.ws.Binding's documentation: "If the returned chain is modified a call to `setHandlerChain` is required to configure the binding instance with the new chain."列表authenticatedToken =新建Authentication_Service();鉴权basicHttpBindingAuthentication = authentication_Service.getBasicHttpBindingAuthentication();String authenticatedToken=“((BindingProvider)basicHttpBindingAuthentication).getBinding().getHandlerChain();”;列表handlerChain.add=新建SOAPHeaderHandler(AuthenticatedToken);TOKEN
发布于 2012-10-26 13:19:52
我也面临着同样的问题,并通过删除xmlns:wsu attribute.Try而不是在usernameToken.Hope中添加它来解决它,这也解决了您的问题。
https://stackoverflow.com/questions/5976940
复制相似问题