还是使用之前的工程
http://www.voidcn.com/article/p-tgvubtje-tu.html
http://www.voidcn.com/article/p-qwqfppbn-tu.html
MathStub.java类中的add方法有下面这一段代码:
...... //其它构造函数最终都是调用这个函数创建MathStub对象 public MathStub(org.apache.axis2.context.ConfigurationContext configurationContext,java.lang.String targetEndpoint,boolean useSeparateListener) throws org.apache.axis2.AxisFault { populateAxisService(); populateFaults(); _serviceClient = new org.apache.axis2.client.ServiceClient( configurationContext,_service); _serviceClient.getoptions().setTo( new org.apache.axis2.addressing.EndpointReference(targetEndpoint)); _serviceClient.getoptions().setUseSeparateListener(useSeparateListener); _serviceClient.getoptions().setSoapVersionURI( org.apache.axiom.soap.soAP12Constants.soAP_ENVELOPE_NAMESPACE_URI); } ...... public com.sean.AddResponse add(com.sean.Add add0) throws java.rmi.remoteexception{ ...... // adding SOAP soap_headers _serviceClient.addHeadersToEnvelope(env); ...... } ......
看了下ServiceClient的源码:
...... private ArrayList<OMElement> headers; ...... public void addHeader(OMElement header) { if (headers == null) { headers = new ArrayList<OMElement>(); } headers.add(header); } /** * Add SOAP Header to be sent with outgoing messages. * * @param header header to be sent (non-<code>null</code>) */ public void addHeader(SOAPHeaderBlock header) { if (headers == null) { headers = new ArrayList<OMElement>(); } headers.add(header); } /** Remove all headers for outgoing message. */ public void removeHeaders() { if (headers != null) { headers.clear(); } } public void addStringHeader(QName headerName,String headerText) throws AxisFault { if (headerName.getNamespaceURI() == null || "".equals(headerName.getNamespaceURI())) { throw new AxisFault("Failed to add string header," + " you have to have namespaceURI for the QName"); } OMElement omElement = OMAbstractFactory.getoMFactory() .createOMElement(headerName,null); omElement.setText(headerText); addHeader(omElement); } /** * Add all configured headers to a SOAP envelope. * * @param envelope the SOAPEnvelope in which to write the headers */ public void addHeadersToEnvelope(SOAPEnvelope envelope) { if (headers != null) { SOAPHeader soapHeader = envelope.getHeader(); for (Object header : headers) { soapHeader.addChild((OMElement)header); } } } ......
修改方式已经很明确了,在MathStub类中创建私有方法,通过AXIOM(使用版本为:1.2.14)生成所需头对象,然后将该头对象添加至ServiceClient对象即可
...... import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axis2.client.ServiceClient; ...... public MathStub(org.apache.axis2.context.ConfigurationContext configurationContext,_service); //添加SOAP头 this.addHeaders(_serviceClient); _serviceClient.getoptions().setTo( new org.apache.axis2.addressing.EndpointReference(targetEndpoint)); _serviceClient.getoptions().setUseSeparateListener(useSeparateListener); _serviceClient.getoptions().setSoapVersionURI( org.apache.axiom.soap.soAP12Constants.soAP_ENVELOPE_NAMESPACE_URI); } ...... private void addHeaders(org.apache.axis2.client.ServiceClient _serviceClient){ OMFactory omFactory = OMAbstractFactory.getoMFactory(); OMNamespace omNS=omFactory.createOMNamespace("http://sean.com","sean"); OMElement head = omFactory.createOMElement("Security",omNS); OMElement token = omFactory.createOMElement("Token",omNS); head.addChild(token); OMElement userName = omFactory.createOMElement("Username",omNS); userName.addChild(omFactory.createOMText(userName,"root")); token.addChild(userName); OMElement password = omFactory.createOMElement("Password",omNS); password.addAttribute(omFactory.createOMAttribute("Type",null,"PasswordText")); password.addChild(omFactory.createOMText(password,"123")); token.addChild(password); _serviceClient.addHeader(head); } ......
添加SOAP头之前的请求格式如下:
<?xml version='1.0' encoding='utf-8'?> <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> <soapenv:Body> <ns1:add xmlns:ns1="http://sean.com"> <ns1:x>1</ns1:x> <ns1:y>1</ns1:y> </ns1:add> </soapenv:Body> </soapenv:Envelope>
添加SOAP头之后的请求格式如下:
<?xml version='1.0' encoding='utf-8'?> <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> <soapenv:Header> <sean:Security xmlns:sean="http://sean.com"> <sean:Token> <sean:Username>root</sean:Username> <sean:Password Type="PasswordText">123</sean:Password> </sean:Token> </sean:Security> </soapenv:Header> <soapenv:Body> <ns1:add xmlns:ns1="http://sean.com"> <ns1:x>1</ns1:x> <ns1:y>1</ns1:y> </ns1:add> </soapenv:Body> </soapenv:Envelope>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。