Exception
rg.dom4j.DocumentException: Error on line -1 of document : Premature end of file. Nested exception: Premature end of file.
一、必须严格区分POST和GET
如果先执行request.getParameter("str");再解析POST过来的xml,则取POST的内容为空,dom4j解析xml会抛出如上异常。所以,应该把类HttpProcessor.java(如下)放在Servlet的doPost中调用,并且调用之前一定不能执行request.getParameter("str");
java服务器发送HTTP POST XML:
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class WeiBoClient {
String url;
public WeiBoClient(String url){
this.url = url;
}
public static void main(String[] args) {
String url = "http://localhost:9080/agent/agent";
WeiBoClient t = new WeiBoClient(url);
String visitorWeChatId = "o5L0Fjzr9J1o5_2X7a4NPfgZp17g";
String weixinXmlHead = "<xml><ToUserName>zhangsan</ToUserName><FromUserName>";
String weixinXmlEnd = "</FromUserName> <CreateTime>1348831860</CreateTime><MsgType>mestypecontent</MsgType><Content>12345</Content><MsgId>1234567890123456</MsgId></xml>";
t.sendMessage(weixinXmlHead + visitorWeChatId + weixinXmlEnd);
}
public void sendMessage(String urlparams) {
String returnStr = "";
HttpURLConnection httpConn = null;
InputStream fis = null;
try {
URL httpurl = new URL(url);
httpConn = (HttpURLConnection) httpurl.openConnection();
httpConn.setDoOutput(true);
httpConn.setRequestProperty("User-agent", "MSIE8.0"); //设置代理为IE8
httpConn.setRequestMethod("POST");
httpConn.setConnectTimeout(600000);
httpConn.setReadTimeout(600000);
OutputStream op = httpConn.getOutputStream();
op.write(urlparams.getBytes());
op.flush();
op.close();
if(httpConn.getResponseCode() == 200){
fis = httpConn.getInputStream();
returnStr = Stream2String(fis,"utf-8");
}
System.out.println(returnStr);
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
try {
if(fis!=null){
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
httpConn.disconnect();
}
}
private static String Stream2String(InputStream in, String encoding) {
if (in == null) {
return null;
}
StringBuffer out = new StringBuffer();
try {
char[] b = new char[1024];
InputStreamReader inread = new InputStreamReader(in, encoding);
for (int n; (n = inread.read(b)) != -1;) {
String line = new String(b, 0, n);
out.append(line);
}
} catch (Exception e) {
e.printStackTrace();
}
return out.toString();
}
}
java服务器接收解析HTTP POST 过来的 xml:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dom4j.Document;
import org.dom4j.io.SAXReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 此类负责发送和解析:HTTP(POST) xml数据
*/
public class HttpProcessor {
protected static Logger log = LoggerFactory.getLogger(HttpProcessor.class.getName());
// private String weixinXml = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[this is a test]]></Content><MsgId>1234567890123456</MsgId></xml>";
/**
* 解析HttpServletRequest中POST过来的xml流
* @param request
* @param response
* @return a XML Document from the http
*/
public static Document getDocument(HttpServletRequest request, HttpServletResponse response) {
SAXReader saxReader = null;
Document doc = null;
try {
saxReader = new SAXReader();
doc = saxReader.read(request.getInputStream());
String xmlStr = doc.asXML();
log.warn("xml content: " + xmlStr);
} catch (Exception e) {
log.warn("Exception :" + e.toString());
StackTraceElement[] er = e.getStackTrace();
for (int i = 0; i < er.length; i++) {
log.info(er[i].toString());
}
}
return doc;
}
}
分享到:
相关推荐
在IT领域,尤其是在Java开发中,通过HTTP协议发送XML报文是一种常见的数据交换方式,尤其在与Web服务交互时。本文将深入解析如何利用Java语言实现HTTP请求,并发送XML格式的数据,同时也会涵盖相关的概念、代码解读...
在给定的代码片段中,主要展示了如何使用Java中的Apache HttpClient库发送一个包含XML数据的POST请求,并接收响应。下面是对关键部分的详细分析: 1. **导入必要的库**:代码首先导入了处理网络请求、输入输出流...
具体来说,可以使用 URL 和 URLConnection 类来建立到服务端的连接,然后使用 DataOutputStream 和 DataInputStream 类来发送和接收 XML 数据。 例如,以下是使用 Java 实现 HTTP Post XML 的示例代码: ```java ...
本文将深入探讨 `dxServlet.java` 文件中涉及的核心概念和技术细节,帮助开发者更好地理解如何在 Java Servlet 中处理 HTTP POST 请求携带的 XML 数据。 #### 核心知识点 1. **Servlet 的基本概念与功能** 2. **...
首先,HTTPClient是Apache提供的一款强大的Java HTTP客户端API,它允许开发者发送HTTP请求并接收响应,支持各种HTTP方法,如GET、POST等。在本场景中,我们关注的是POST方法,它是HTTP协议中用于传输大量数据的一种...
总结起来,使用JDOM解析XML文件可以帮助你更便捷地操作XML文档,而通过HttpURLConnection发送POST请求可以让你的Java应用与PHP服务器进行数据交换,实现远程资源的获取和发送。在实际开发中,你需要根据具体需求调整...
9. **RESTful API**:虽然不是XML特有的,但在Java中,XML常用于构建RESTful Web服务的数据交换格式,如通过HTTP的GET、POST请求发送和接收XML数据。 “XML Programming in Java.pdf”很可能详细介绍了这些概念和...
HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。
通过设置HTTP请求方法(GET或POST),URL,以及请求体(如果需要发送数据,如XML),然后监听其onreadystatechange事件,当服务器响应时,根据readyState和status判断请求状态,读取响应数据,最后利用这些数据更新...
- **VB.NET与Java**: 分别代表了Microsoft .NET框架下的Visual Basic语言和跨平台的Java编程语言,它们都能支持通过SOAP协议与WebService进行交互。 #### 二、搭建环境与准备工作 1. **选择一个WebService**: 在本...
对于Servlet端,你需要确保已经正确配置了接收POST请求和解析XML的代码。在Servlet中,可以使用`HttpServletRequest`对象的`getInputStream()`方法来获取XML数据,然后用Java的DOM或SAX解析器进行解析。 总结一下,...
- 发送SOAP请求:Servlet可以使用`java.net.URLConnection`或Apache的 HttpClient库来构造和发送HTTP POST请求,其中请求体包含SOAP消息。 - 处理SOAP响应:接收到响应后,Servlet可以使用XML解析器解析响应体,...
在Java编程中,发送HTTP请求并接收响应是常见的网络通信操作,尤其在Web服务的开发和测试中。本文将详细介绍如何使用Java发送HTTP请求并处理响应内容。 首先,我们需要创建一个名为`HttpRequester`的类,它将作为...
- Java提供了多种API来处理XML,包括DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)。DOM将整个XML文档加载到内存中,适合小规模的XML处理;SAX是事件驱动的解析器,...
ASP发送和接收XML数据流涉及到以下几个关键知识点: 1. **XML解析**:ASP中可以使用Microsoft的XML DOM(Document Object Model)对象来解析XML文档。XML DOM提供了一种结构化的表示XML文档的方式,并允许通过...
在Java编程中,发送HTTP POST请求是常见的网络通信任务,特别是在与远程服务器或API接口进行交互时。Apache HttpClient库提供了一种强大且灵活的方式来实现这一功能。本文将详细讲解如何利用HttpClient工具类发送带...
本文将深入探讨如何使用POST方式在.NET中调用.NET和Java编写的Web服务,并以XML作为请求数据格式。以下是对这个主题的详细阐述: 1. **什么是Web服务**: Web服务是一种基于互联网的软件应用,允许不同系统间的...
Post方法需要两个参数:URL(Web服务的地址)和Data(SOAP XML字符串)。示例代码如下: ```delphi uses IdHTTP, IdGlobal; var HTTP: TIdHTTP; Response: string; begin HTTP := TIdHTTP.Create(nil); try ...
以上就是使用Java HttpClient发送HTTP请求和接收响应的基本操作。在实际开发中,可能还需要处理更多细节,比如重试机制、超时设置、Cookie管理等。HttpClient提供了丰富的API和配置选项,可以根据项目需求进行定制。
5. **HTTP传输**:XML-RPC请求通常通过HTTP POST方法发送,这意味着它能利用HTTP的缓存机制和代理服务器,提高网络效率。 6. **扩展性**:Apache XML-RPC库允许开发者自定义序列化和反序列化过程,以处理非标准的...