用axis调用webservice接口,webservice接口设置了用户名,密码验证。
webservice接口的研发人员提供的报文:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webserviceinterface.chinautrust.com.cn">
<soapenv:Header>
<AuthenticationToken>
<Username>user1</Username>
<Password>pass1</Password>
</AuthenticationToken>
</soapenv:Header>
<soapenv:Body>
<web:registerAppUser>
<web:in0>face</web:in0>
<web:in1>[{"IDCard":"sss","loginName":"sss","passWord":"sss","sysFlag":"face"},{"IDCard":"bbbb","loginName":"sss","passWord":"sss","sysFlag":"face"}]</web:in1>
</web:registerAppUser>
</soapenv:Body>
</soapenv:Envelope>
注意:认证的时候,SOAPHeaderElement header = new SOAPHeaderElement("", "AuthenticationToken");
AuthenticationToken与报文中<AuthenticationToken>一致。
所需的jar包
String goal_url = "http://12.56.7.66:8080/idm/services/IAppAccount";
Service service = new Service();
Call call = (Call) service.createCall();
// call.setTargetEndpointAddress(goal_url);
//设置第三方webservice接口地址。
call.setTargetEndpointAddress(new java.net.URL(goal_url));
//设置需要访问的第三方webservice接口中的方法名称。
call.setOperationName(new QName("registerAppUser"));
//向第三方webservice接口中的方法传参,in0为webservice接口中的方法参数名,就是形参,XMLType.XSD_STRING为 参数的数据类型。
call.addParameter("in0", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("in1", XMLType.XSD_STRING, ParameterMode.IN);
// call.getMessageContext().setUsername("user1");
// call.getMessageContext().setPassword("pass1");
//webservice接口访问需要认证,认证操作。
SOAPHeaderElement header = new SOAPHeaderElement("", "AuthenticationToken");
header.setPrefix("");
header.addChildElement("Username").addTextNode("user1");
header.addChildElement("Password").addTextNode("pass1");
call.addHeader(header);
String data = JSONArray.fromObject(list).toString();
//设置webservice接口返回值类型。
call.setReturnType(XMLType.XSD_BOOLEAN);
//执行访问webservice接口的操作。
boolean result = (boolean) call.invoke(new Object[] { sysFlag, data });