论坛首页 Java企业应用论坛

第一次的webservice调用

浏览 6524 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-24   最后修改:2009-07-24

项目当中需要调用对方的发布的的一个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调用圆满结束

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics