Domino代理调用远程Web Service(HTTP POST)

直接拿例子说事:
这就是我要调的web service地址:
 
IE 里面打开一下上面的 web service 地址,会列出该 web service 所支持的所有方法。查看一下 GetOrderInformation 方法,看到以下信息:
 
SOAP 1.1
以下是 SOAP 1.2 请求和响应示例。所显示的 占位符 需替换为实际值。
POST /CorpExternalInterface/DomesticFlightService/DomesitFlights.asmx HTTP/1.1
Host: www.corporatetravel.ctrip.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.ctrip.com/webservice/flight/GetOrderInformation"
?
<?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>
    <GetOrderInformation xmlns="http://www.ctrip.com/webservice/flight/">
      <request xmlns="">
        <Authentication>
          <UserID>string</UserID>
          <Password>string</Password>
          <Status>Noramal or Encrypted</Status>
          <EmployeeID>string</EmployeeID>
          <EmployeeUID>string</EmployeeUID>
        </Authentication>
        <OrderID>int</OrderID>
        <Language>Chinese or English</Language>
      </request>
    </GetOrderInformation>
 </soap:Body>
</soap:Envelope>
 
后面要做的事就是把以上XML中的占位符填充后POST出去。
编写以下代码:
 
StringBuffer ret = new StringBuffer("<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//">"); 
ret.append("<soap:Body>");
ret.append("<GetOrderInformation xmlns=/" http://www.ctrip.com/webservice/flight//">");
ret.append("<request xmlns=/"/">");
ret.append("<Authentication>");
ret.append("<UserID>userid</UserID>");
ret.append("<Password>password</Password>");
ret.append("<Status>Noramal</Status>");
ret.append("<EmployeeID></EmployeeID>");
ret.append("<EmployeeUID></EmployeeUID>");
ret.append("</Authentication>");
ret.append("<OrderID>0000001</OrderID>");
ret.append("<Language>Chinese</Language>");
ret.append("</request>");
ret.append("</GetOrderInformation>");
ret.append("</soap:Body>");
ret.append("</soap:Envelope>");
byte[] content = ret.toString().getBytes();
URL url = new URL(" https://www.corporatetravel.ctrip.com/CorpExternalInterface/DomesticFlightService/DomesitFlights.asmx");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Host", " www.corporatetravel.ctrip.com") ;
con.setRequestProperty("Content-Type", "text/xml; charset=utf-8") ;
con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");   
con.setRequestProperty("SOAPAction", "/" http://www.ctrip.com/webservice/flight/GetOrderInformation/"") ;
con.setRequestProperty("Content-Length", content.length +"");
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setAllowUserInteraction(false);
java.io.OutputStream out = con.getOutputStream();
out.write(content);
out.flush();
out.close();
reader = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"));
String line;
while ((line = reader.readLine()) != null) {
 System.out.println(line);
}
 
以上代码只用到这些java类:
java.io.InputStreamReader;
java.io.BufferedReader;
java.io.PrintWriter;
java.lang.StringBuffer ;
java.net.URL;
java.net.HttpURLConnection;
 
从上可见,直接使用http-post机制调用web service是件非常简单方便的事。
最后,推荐个工具来测试web service,名字叫soapui,我目前使用的版本是soapui-2.5-beta2
使用这个工具,只需要输入web service的wsdl地址,就会列出所有支持的方法,并且产生一个request的样例,你只需要改掉XML里面的?号,再按submit按钮就可以演示调用web service,并且把返回的信息在右边显示出来。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值