最近做一个项目不能使用webservice,必须使用http+post+xml的方式。具体流程是A项目嗲用B项目的接口,参数和返回值的传送接收。以下代码测试可用。
1.请求端代码
package action;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ClientAction extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//req.setCharacterEncoding("utf-8");
StringBuffer reqXml = new StringBuffer();
/* reqXml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
reqXml.append("<request>");
reqXml.append(" <meta>");
reqXml.append(" <channeltype>001</channeltype> ");
reqXml.append(" <reqserialno>02340385038080</reqserialno>");
reqXml.append(" <trancode>DX001</trancode>");
reqXml.append(" <sourceid>10</sourceid>");
reqXml.append("</meta>");
reqXml.append("<data>");
reqXml.append(" <channeltype>001</channeltype>");
reqXml.append(" <username>gjjxc</username> ");
reqXml.append("<password>gjjxc</password> ");
reqXml.append(" <phone>18662536750</phone>");
reqXml.append("<content>测试</content>");
reqXml.append("</data>");
reqXml.append("</request>");*/
InputStream input = this.getClass().getClassLoader().getResourceAsStream("message.txt");
BufferedReader reqReader = new BufferedReader(new InputStreamReader(input,"utf-8"));
String line2 = null;
while((line2 = reqReader.readLine()) != null){
reqXml.append(line2);
}
reqReader.close();
URL url = new URL("http://localhost:8080/SMSPLANT/testServlet");
HttpURLConnection uc = (HttpURLConnection)url.openConnection();
uc.setConnectTimeout(10000);
uc.setReadTimeout(120000);
uc.setRequestMethod("POST");
// uc.setRequestProperty("Pragma:", "no-cache");
// uc.setRequestProperty("Cache-Control", "no-cache");
// uc.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
uc.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(uc.getOutputStream(),"utf-8");
System.out.println("客户端发送xml:"+reqXml.toString());
out.write(reqXml.toString());
out.flush();
out.close();
int state = uc.getResponseCode();
if(state == 200){
//获取返回数据
BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream(),"utf-8"));
String line = null;
StringBuffer con = new StringBuffer();
while((line = in.readLine()) != null){
//line为返回值,这就可以判断是否成功、
con.append(line);
}
System.out.println("客户端接收xml:"+con.toString());
in.close();
resp.sendRedirect("http://www.baidu.com");
}
}
}
2.服务端代码
package com.szwx.servlet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Writer;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import com.szwx.webservice.CustomerSmsService;
import com.szwx.webservice.impl.CustomerSmsServiceImpl;
/**
* @author fanzhigang
*
*/
public class testAction extends HttpServlet {
private CustomerSmsService customerSmsService;
// private Logger log = Logger.getLogger(this.getClass());
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
InputStream in = req.getInputStream();
BufferedReader read = new BufferedReader(new InputStreamReader(in,"utf-8"));
StringBuffer reqXml = new StringBuffer();
String line = null;
while((line = read.readLine()) != null){
reqXml.append(line);
}
read.close();
in.close();
System.out.println("服务端接收xml:"+reqXml.toString());
customerSmsService = new CustomerSmsServiceImpl();
String res = customerSmsService.sendGjjxc(reqXml.toString());
//返回
resp.setContentType("text/xml;charset=utf-8");
Writer out = resp.getWriter();
System.out.println("服务端返回xml:"+res);
out.write(res);
out.flush();
out.close();
}
}