近期,公司要通过一台中间服务器,把内网的ERP数据导入到外网中来,由于内外网物理隔断,外网无法直接访问内网的数据,而且站在安全的角度上没有一个公司会这么做。老大把这个任务交给了我,正好前一阶段刚刚学习了Cxf WebService,决定采用cxf发布rustful方式现来实它。老大提出了几点需求:1、采用动态数据源,也就是说,我有5个数据源,根据需要访问;2、外网服务器通过中间服务器获取内网ERP的数据,要使用xml格式;3、采用验证令牌;牵扯到公司机密问题,我就不传源代码了,如果有相同的情况要找我讨论,请加我QQ:361202421,不过很少时间上,或者写在评论上,我们一起讨论!
我在使用客户端读取数据时,有部分汉字显示乱码,而且不一定是哪个汉字,我是这么写的main方法
public static void main(String[] args) throws Exception {
URLConnection conn = new URL("http://服务器IP:8080/WebServTKServer/ws/v1/fhmlist").openConnection();
/**
* 这里做一个说明
* http://服务器IP:8080/WebServTKServer/ws/v1/fhmlist
* WebServTKServer-工程名
* v1-版本
* 在applicationContext.xml中定义的<jaxrs:server id="restService" address="/v1">
* PersonService.java中public Person getPerson方法中的@Path("/fhmlist")路径
*/
HttpURLConnection htconn = (HttpURLConnection)conn;
htconn.setRequestMethod("GET");
htconn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
htconn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
htconn.setRequestProperty("begintime", "2015-06-02 00:00:01");//参数begintime
htconn.setRequestProperty("endtime", "2015-06-04 23:59:59");//参数endtime
htconn.setRequestProperty("condition", "1");//参数condition
htconn.setRequestProperty("dsName", "dsSHERP");//数据源参数dsName
htconn.setRequestProperty("token", "xx56Rdeeerrwoo9O/P6R98m");//加密令牌
// 建立实际的连接
htconn.connect();
// 获取所有响应头字段
//Map<String, List<String>> map = htconn.getHeaderFields();
// 遍历所有的响应头字段
/**
for (String key : map.keySet()) {
System.out.println(key + "--->" + map.get(key));
}*/
int code = htconn.getResponseCode();
//System.out.println("code=="+code);
if (code == 200) {
InputStream is = htconn.getInputStream();
int len = 0;
byte[] b = new byte[1024];
StringBuffer sb = new StringBuffer();
while ((len = is.read(b)) != -1) {
String s = new String(b,0,len,"UTF-8");
sb.append(s);
}
//System.out.println("aaa=="+sb.toString());
System.out.println("数据发送成功!");
br.close();
} else {
System.out.println("数据发送失败!");
}
htconn.disconnect();
}
导出的汉字有时候会显示??,我将红色的部分改成下面的就行了
BufferedReader br = new BufferedReader(new InputStreamReader(htconn.getInputStream(),"UTF-8"));
String line = "";
StringBuffer sb = new StringBuffer();
while (null != (line = br.readLine())) {
sb.append(line);
}
参考文档:http://blog.csdn.net/sulanyan29/article/details/7355960