发布和调用Webservice很简单,但小问题依然不断,特总结如下:
一、Java调用.net的webService产生“服务器未能识别 HTTP 标头 SOAPAction 的值”错误。
解决方案:
调用webservice时,没有指定SoapAction,没有指定RequestNameSpace,所以请求时总是出现“服务器未能识别 HTTP 标头 SOAPAction 的值。
- public static void main(String[] args) throws Exception {
- //不带?wsdl后缀
- String endpoint = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx";
- // 创建一个服务(service)调用(call)
- Service service = new Service();
- //通过service创建call对象
- Call call = (Call) service.createCall();
- // 设置service所在URL
- call.setTargetEndpointAddress(new java.net.URL(endpoint));
- //qqCheckOnline 是net 那边的方法 "http://WebXml.com.cn/" 这个也要注意Namespace 的地址,不带也会报错
- call.setoperationName(new QName("http://WebXml.com.cn/","qqCheckOnline"));
- //qqCode也是.NET那边方法的参数名,即qqCheckOnline的参数名
- call.addParameter("qqCode"),
- org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
- //避免Java调用.net的webService产生“服务器未能识别 HTTP 标头 SOAPAction 的值”错误
- call.setUseSOAPAction(true);
- call.setReturnType(org.apache.axis.encoding.XMLType.soAP_STRING); //返回参数的类型
- call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); //这个也要注意 就是要加上要调用的方法Add,不然也会报错
- // Object 数组封装了参数
- String ret = (String) call.invoke(new Object[] {"aaaaa"});
- System.out.println("--------"+ret);
- }
注意注释部分。
- http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl为公共webservice