Play Framework:将服务器的响应解析为 Xml returns 空文档
Play Framework: parsing the server's response as Xml returns null document
我有一个向服务器发出 HTTP 请求的 Play 网络应用程序。
请求进展顺利:我收到状态代码为 200 且 Content-type = "application/xml" 的响应。
如果我将响应主体打印到标准输出,我会看到一个格式正确的 Xml 文档。
但是,如果我尝试从响应中创建一个 org.w3c.dom.XML 文档
使用 WSResponse.asXml(),方法 returns 一个空文档。
这些是我的代码的相关部分:
private WSResponse sendPostRequest(String url, String body) {
WSRequest request = WS.url(url);
request.setHeader("Content-type", "application/x-www-form-urlencoded");
return request.post(body).get(5000L);
}
并且:
public Result requestDefaultImport() {
String url = "some_url";
String body = "some_body";
WSResponse response = sendPostRequest(url, body);
System.out.println(response.getBody()); //prints well-formed Xml
Document xmld = response.asXml();
System.out.println(xmld); //prints: #[null document]
return ok();
}
我做错了什么?
据我所知,您正在
处打印一个字符串
System.out.println(response.getBody());
但是,您正在打印 org.w3c.dom.Document at
System.out.println(xmld);
可以在
找到将 Document 转换为字符串的解决方案
How do I convert a org.w3c.dom.Document object to a String?
试试这个代码:
Document doc = request().body().asXml();
Source source = new DOMSource(doc);
StringWriter stringWriter = new StringWriter();
StreamResult result = new StreamResult(stringWriter);
TransformerFactory factory = TransformerFactory.newInstance();
javax.xml.transform.Transformer transformer = factory.newTransformer();
transformer.transform(source, result);
String xmlStr = stringWriter.getBuffer().toString();
System.out.println(xmlStr);
或者如果从 SOAP 消费的话:
Document doc = soapBody.extractContentAsDocument();
Source source = new DOMSource(doc);
StringWriter stringWriter = new StringWriter();
Result result = new StreamResult(stringWriter);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.transform(source, result);
strSoapBody = stringWriter.getBuffer().toString();
我有一个向服务器发出 HTTP 请求的 Play 网络应用程序。
请求进展顺利:我收到状态代码为 200 且 Content-type = "application/xml" 的响应。
如果我将响应主体打印到标准输出,我会看到一个格式正确的 Xml 文档。
但是,如果我尝试从响应中创建一个 org.w3c.dom.XML 文档 使用 WSResponse.asXml(),方法 returns 一个空文档。
这些是我的代码的相关部分:
private WSResponse sendPostRequest(String url, String body) {
WSRequest request = WS.url(url);
request.setHeader("Content-type", "application/x-www-form-urlencoded");
return request.post(body).get(5000L);
}
并且:
public Result requestDefaultImport() {
String url = "some_url";
String body = "some_body";
WSResponse response = sendPostRequest(url, body);
System.out.println(response.getBody()); //prints well-formed Xml
Document xmld = response.asXml();
System.out.println(xmld); //prints: #[null document]
return ok();
}
我做错了什么?
据我所知,您正在
处打印一个字符串System.out.println(response.getBody());
但是,您正在打印 org.w3c.dom.Document at
System.out.println(xmld);
可以在
找到将 Document 转换为字符串的解决方案How do I convert a org.w3c.dom.Document object to a String?
试试这个代码:
Document doc = request().body().asXml();
Source source = new DOMSource(doc);
StringWriter stringWriter = new StringWriter();
StreamResult result = new StreamResult(stringWriter);
TransformerFactory factory = TransformerFactory.newInstance();
javax.xml.transform.Transformer transformer = factory.newTransformer();
transformer.transform(source, result);
String xmlStr = stringWriter.getBuffer().toString();
System.out.println(xmlStr);
或者如果从 SOAP 消费的话:
Document doc = soapBody.extractContentAsDocument();
Source source = new DOMSource(doc);
StringWriter stringWriter = new StringWriter();
Result result = new StreamResult(stringWriter);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.transform(source, result);
strSoapBody = stringWriter.getBuffer().toString();