项目当中需要调用对方的发布的的一个webservice,需求比较简单,只是调用对方一个发布好的webservice
Service service = new Service();
Call call=(Call)service.createCall();
call.setTargetEndpointAddress("http://192.168.0.35:8080/webservice-model/services/BookService"));
//经过测试是否加QName这个结果都一样,不知道具体有什么用
//call.setOperationName(new javax.xml.namespace.QName("http://risesoft.test","getBook21"));
//远程调用的方法
all.setOperationName("echoString");
// call.addParameter(certificateString, XMLType.XSD_STRING, ParameterMode.IN);
// call.addParameter(appid, XMLType.XSD_STRING, ParameterMode.IN);
String result=(String)call.invoke(new Object[]{certificateString,appid});
第一次请求url加上了"?wsdl"http://192.168.0.35:8080/webservice-model/services/BookService?wsdl
结果报错org.xml.sax.SAXException: Bad envelope tag: definitions
后来google了一下去掉"?wsdl"就ok了,不知道具体原因,一个同事说可能是weblogic不需要吧!
至此第一次的webservice调用圆满成功!
续:
后来去客户现场调试,对方是asp系统,又碰到不少问题,最后搞定,代码如下
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL("http://172.24.15.217/PMSServicejn/RightService.asmx"));
call.setSOAPActionURI("http://www.bjld.gov.cn/GetUserRelyIDByCertificate");
call.setOperationName(new QName("http://www.bjld.gov.cn/", "GetUserRelyIDByCertificate"));
//传两个参数,好像asp的系统必须指定namespace,所以就这么写了
call.addParameter(new QName("http://www.bjld.gov.cn/", "CertificateString"),XMLType.XSD_STRING,Class.forName("java.lang.String"),ParameterMode.IN);
call.addParameter(new QName("http://www.bjld.gov.cn/","appid"),XMLType.XSD_STRING,Class.forName("java.lang.String"),ParameterMode.IN);
call.setReturnType(XMLType.XSD_STRING);
caid = (String) call.invoke(new Object[]{certificateString, Config.getString("appid")});
原来上次不明白的那个qname是指定命名空间的,好像.net的系统必须指定命名空间呢,而且SOAPAction也是必须的,所以传参数那里显着比开始复杂多了,另外对方要的soap如下
POST /PMSServicejn/RightService.asmx HTTP/1.1 Host: 172.24.15.217 Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://www.bjld.gov.cn/GetUserRelyIDByCertificate" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetUserRelyIDByCertificate xmlns="http://www.bjld.gov.cn/"> <CertificateString>string</CertificateString> <appid>string</appid> </GetUserRelyIDByCertificate> </soap:Body> </soap:Envelope>
至此webservice调用圆满结束