【问题标题】:Restlet: sending xml in an HTTP requestRestlet:在 HTTP 请求中发送 xml
【发布时间】:2011-06-19 18:29:50
【问题描述】:
如何在 HTTP GET 或 HTTP put 请求中发送 xml 文件?我正在使用restlet框架。
我对此很陌生,根据我读过的内容,我应该序列化 xml。
这样做之后,如何在 HTTP 请求中发送它?
【问题讨论】:
标签:
java
xml
http
xml-serialization
restlet
【解决方案1】:
这很简单,即使您不使用组合片段的库(我假设 Restlet 确实提供了一些简化):就像您提到的,您所需要的只是一个 HTTP 连接/请求,以及产生的能力(并且可能, 消费) XML。
因此,除了 Restlet 特定的东西(希望其他人可以解释)之外,这是一种“游击”方法,只使用独立的部分。
要获得 HTTP 连接,您可以只使用 JDK 功能(如果不起作用,apache http 客户端或async-http-client 可以提供更多功能);类似:
URL url = new URL("http://myservice.mycompany.com:8080/path/to/service");
// configure settings here if/as necessary
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// if you need to post stuff, do:
conn.setRequestMethod("POST");
// need to set content type too possibly
conn.setDoOutput(true); // but only if you do POST stuff
OutputStream out = conn.getOutputStream();
// here you would output XML request
//...
out.close();
// and now read response
InputStream in = conn.getInputStream();
// and process it
// ...
in.close();
现在,关于生成/使用 XML,您可以使用所有使用输入/输出流读取/写入 XML 的常用工具。如果您喜欢数据绑定(Java POJO 到/来自 XML),JAXB 是您的最佳选择(javax.xml.bind.*); JDK 1.6 及以上捆绑默认实现。
您也可以简单地使用 Stax (javax.xml.stream.*) 实现,例如 Woodstox,通过简单的调用来读取/写入 XML;要获得奖励积分,请查看StaxMate,它大大简化了这种风格。