`
IT民工%
  • 浏览: 45737 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

c语言通过http请求javaee项目

    博客分类:
  • java
 
阅读更多

问题一

c通过http调用java提供的方法,传送xml。遇到一个奇怪的问题。肉眼看到传输过来的xml是没有问题的。

传过来的xml,如下:

<?xml version="1.0" encoding="UTF-8"?><SmsReq>        <Tel_No>13800009999</Tel_No>        <Login_Tm>2013-03-21 12:00:00</Login_Tm>    </SmsReq>

这段xml我放到jmeter里面请求我的java服务和我自己用java程序模拟http请求直接将这段字符串发过来,也都是可以解析的。

唯独通过c过来后。DocumentHelper.parseText(rsXml); 报如下错误。

org.dom4j.DocumentException: Error on line 1 of document  : Content is not allowed in trailing section. Nested exception: Content is not allowed in trailing section.

 

最后怀疑xml中有什么不显示的非法字符导致无法解析。随加replaceAll("[^\\x20-\\x7e]", "");解析正常。

 

具体哪些字符是非法的,刚才我想着通过[\\x20-\\x7e]这个正则取出xml里面到底是哪些字符非法。写了如下方法:

private static void getStrings(String str) {
        Pattern p = Pattern.compile("[^\\x20-\\x7e]");
        Matcher m = p.matcher(str);
        ArrayList<String> strs = new ArrayList<String>();
        while (m.find()) {
            strs.add(m.group(0));           
        }
        for (String s : strs){
            System.out.println(s+"==");
        }       
    }

输出的结果像一个空格。但是是不显示的。推测应该是从c传到java的过程中多了某个不可显示的字符在此也不必深究了,以后注意。

 

问题二

由于java项目是springMvc。所以控制层都交给spring管理。但是c过来的http。在spring管理的控制层中无法获取request.getInputStream()。最后无奈改成servlet。二者方法里面的代码完全一致。servlet正常获取。

 

原因至今不明。感谢这位仁兄给出的思路。解决了问题。

http://www.bitscn.com/pdb/java/200806/143983.html 

客户端需要加如下代码:

java:httpURLConnection.setRequestProperty("content-type", "text/html");

c:ghttp_set_header(request, http_hdr_Content_Type, "text/html;charset=UTF-8");

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics