在跨系统调用接口时,经常遇到的是WebService的接口,当然,也会遇到Servlet写的接口,现在就总结一下我们调用服务器端是Servlet的接口的客户端的调用方法。
主要使用java的网络编程的两个类java.net.HttpURLConnection和java.net.URL以及IO流的操作。
现在就分享一下我们的示例代码:
public class ZHXBatchTask {
private static Logger log = Logger.getLogger(ZHXBatchTask.class);
ZHXService zHXservice = ZHXService.getInstance();
ZHXBatchPolicyService zHXBathPollicyService = ZHXBatchPolicyService.getInstance();
public ZHXBatchTask() {
}
@SuppressWarnings("deprecation")
public static void main(String[] args) {
new ZHXBatchTask().runTask();
}
/**
* 创建连接,并返回
*/
public HttpURLConnection getConn(){
InsuranceRequest request = new InsuranceRequest();
request.setCompanyCode("SSPI");
request.setPassword("111");
request.setFlag("item");
request.setBeginTime("20110523153000");
request.setEndTime("20110523154000");
String res = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
XStream xx = new XStream(new DomDriver());
xx.alias("InsuranceRequest", InsuranceRequest.class);//别名
xx.alias("PolicySchedule", PolicySchedule.class);
URL url = null;
HttpURLConnection conn = null;
StringBuffer requestParam = new StringBuffer();
requestParam.append("<InsuranceRequest><CompanyCode>").append(request.getCompanyCode()).
append("</CompanyCode><Password>").append(request.getPassword()).append("</Password><Flag>").
append(request.getFlag()).append("</Flag><BeginTime>").append(request.getBeginTime()).
append("</BeginTime><EndTime>").append(request.getEndTime()).append("</EndTime></InsuranceRequest>");
try{
//设置代理
System.setProperty("proxySet", "true");
System.setProperty("http.proxyHost", "10.195.113.100");
System.setProperty("http.proxyPort", "8002");
//调用服务器端
url = new URL("http://localhost:9090/insurancetest/insuranceservice?request="+requestParam);
conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("GET");
//以下是POST方式
// conn.setRequestMethod("POST");
// System.out.println("send:\n"+res + xx.toXML(request));
// conn.getOutputStream().write(
// (res + xx.toXML(request)).getBytes());
// conn.getOutputStream().flush();
// conn.getOutputStream().close();
System.out.println("请求发送成功,等待响应。。。。");
///有的时候需要设置代理 用户名:密码
String authentication = "xxxx:****";
String encodedLogin = new BASE64Encoder().encodeBuffer(authentication.getBytes());
encodedLogin = encodedLogin.replaceAll("\n", "");
conn.setRequestProperty("Proxy-Authorization", "Basic " + encodedLogin);
}catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public void runTask() {
HttpURLConnection conn = null;
try{
//获取连接
conn = this.getConn();
conn.connect();
XStream xx = new XStream();
//获取响应代码
int code = conn.getResponseCode();
if(code == 200){
System.out.println("响应成功。。。。");
InputStream is = conn.getInputStream();
//处理流中的中文,防止出现乱码
Reader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
//要加下面的,否则会报错 com.thoughtworks.xstream.mapper.CannotResolveClassException: InsuranceResponse :InsuranceResponse
//涉及自定义类的情况都需要alias
xx.alias("InsuranceResponse", InsuranceResponse.class);
xx.alias("PolicySchedule", PolicySchedule.class);
//XStream Test
InsuranceResponse ir = (InsuranceResponse) xx.fromXML(reader);
System.out.println(ir);
//第二种方法:使用DOM4j解析XML,并转成JavaBean
// InsuranceResponse ir = new ZHXXml2Bean().xml2beanZHXInsuranceResponse(reader);
// System.out.println(ir);
System.out.println("请求返回结果:\n"+xx.toXML(ir));
reader.close();
is.close();
}
}catch (Exception e) {
log.error("", e);
} finally {
if (conn != null)
conn.disconnect();
}
}
/**
* 返回不同系统的路径标识
*/
public String getPathFlag() {
String pathFlag = System.getProperty("file.separator");
return pathFlag;
}
}