在AXIS进行SOAP Header传输时碰到一个SOAP Body中文乱码的怪问题 (转)
代码
- xml version="1.0" encoding="UTF-8"?>
- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soapenv:Header>
- <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
- <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
- <wsu:Created>2007-08-10T03:14:37.150Zwsu:Created>
- <wsu:Expires>2007-08-10T03:19:37.150Zwsu:Expires>
- wsu:Timestamp>
- <wsse:UsernameToken>
- <wsse:Username>ticketwsse:Username>
- <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">TICKET_d2c0f036-46ef-11dc-b6c1-47b6df6cf8d2wsse:Password>
- wsse:UsernameToken>
- wsse:Security>
- soapenv:Header>
- <soapenv:Body>
- <add xmlns="http://www.xxx.com/ws/">
- <user>
- <ns1:create xmlns:ns1="http://www.xxx.com/ws/test">
- <ns1:id>ABC鏂�-鏌ヨ?璇昁XYZ1186715675572ns1:id>
CallbackHandler实现
代码
- public class AuthenticationCallbackHandler implements CallbackHandler
- {
- /** WS security information */
- private static final String WS_SECURITY_INFO =
- "" +
- " <transport name='http' pivot='java:org.apache.axis.transport.http.HTTPSender'/>" +
- " <globalConfiguration >" +
- " <requestFlow >" +
- " <handler type='java:org.apache.ws.axis.security.WSDoAllSender' >" +
- " <parameter name='action' value='UsernameToken Timestamp'/>" +
- " <parameter name='user' value='ticket'/>" +
- " <parameter name='passwordCallbackClass' value='ws.AuthenticationCallbackHandler'/>" +
- " <parameter name='passwordType' value='PasswordText'/>" +
- " handler>" +
- " requestFlow >" +
- " globalConfiguration>" +
- "deployment>";
- //接口的方法实现
- public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException
- {
- for (int i = 0; i < callbacks.length; i++)
- {
- if (callbacks instanceof WSPasswordCallback)
- {
- WSPasswordCallback pc = (WSPasswordCallback)callbacks;
- pc.setPassword(currentTicket.get());
- }
- else
- {
- throw new UnsupportedCallbackException(callbacks, "Unrecognized Callback");
- }
- }
- }
- }
// 客户端利用AXIS Ant的任务wsdl2java,生成后,
// 获取服务:
代码
- XyzServiceLocator locator = new XyzServiceLocator(AuthenticationCallbackHandler.getEngineConfiguration());
- locator.setXyzServiceEndpointAddress("webservice地址");
- XyzServiceSoapBindingStub xyzService = (XyzServiceSoapBindingStub)locator.getXyzService();
//调用:
代码
- xyzService.create(xxx);//
替换过AXIS 1.3与1.4的包结果都一样,只要不加SOAP Header编码则正常?问题出在哪里?WSS4J上吗?
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12467/viewspace-148275/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12467/viewspace-148275/