Play Framework:解析服务器的响应,因为Xml返回null文档
问题描述:
我有一个Play网络应用程序向服务器发出HTTP请求。Play Framework:解析服务器的响应,因为Xml返回null文档
请求进行得很顺利:我收到一个200状态码和Content-type =“application/xml”的响应。
如果我打印stdout响应正文,我看到一个格式良好的Xml文档。
但是,如果我尝试使用WSResponse.asXml()从响应 创建org.w3c.dom.XML文档,该方法返回一个空文档。
这是我的代码的相关部分:
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());
打印字符串但是,你在
System.out.println(xmld);
解决方案打印org.w3c.dom.Document中,以转换一个文件到字符串可以在
答
试试这个代码:
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();
能否请您告诉我们您的代码吗?您使用的确切代码。 – Jagrut
是的,我附加了代码。 – Eduard
尝试打印'System.out.println(response.asXml());'。如果打印正确,则可能需要创建DocumentFactory对象并使用该对象来创建Document。 – Jagrut