首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java中添加soap头

如何在java中添加soap头
EN

Stack Overflow用户
提问于 2011-05-12 18:55:19
回答 4查看 122K关注 0票数 15

我有一个来自oracle的非.net webservice要访问,我需要添加soap头。如何在java中添加soap头?

代码语言:javascript
复制
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");

这有必要吗?

代码语言:javascript
复制
 ((BindingProvider) proxy).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "webserviceUsername");
                    ((BindingProvider) proxy).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "webservicePassword");

我的soap头是这样的:

代码语言:javascript
复制
<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>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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

票数 25
EN

Stack Overflow用户

发布于 2016-04-26 20:12:22

我费了好大劲才让它工作起来。这就是为什么我要在这里添加一个完整的解决方案:

我的目标是将此标头添加到SOAP信封:

代码语言:javascript
复制
   <soapenv:Header>
      <urn:OTAuthentication>
         <urn:AuthenticationToken>TOKEN</urn:AuthenticationToken>
      </urn:OTAuthentication>
   </soapenv:Header>

  1. 首先创建一个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) { // } }

代码语言:javascript
复制
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

票数 4
EN

Stack Overflow用户

发布于 2012-10-26 13:19:52

我也面临着同样的问题,并通过删除xmlns:wsu attribute.Try而不是在usernameToken.Hope中添加它来解决它,这也解决了您的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5976940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档