【问题标题】:Play Framework: parsing the server's response as Xml returns null documentPlay Framework:将服务器的响应解析为 Xml 返回 null 文档
【发布时间】:2016-03-27 18:17:08
【问题描述】:

我有一个向服务器发出 HTTP 请求的 Play 网络应用。

请求进行得很顺利:我收到一个带有 200 状态代码和 Content-type = "application/xml" 的响应。

如果我将响应正文打印到标准输出,我会看到一个格式良好的 Xml 文档。

但是,如果我尝试从响应中创建 org.w3c.dom.XML 文档 使用 WSResponse.asXml(),该方法返回一个空文档。

这些是我的代码的相关部分:

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.asXml());。如果打印正确,您可能必须创建 DocumentFactory 对象并使用它来创建 Document。

标签: java xml playframework-2.0


【解决方案1】:

试试这个代码:

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();

【讨论】:

    【解决方案2】:

    据我所知,您正在打印一个字符串

    System.out.println(response.getBody());

    但是,您正在打印 org.w3c.dom.Document

     System.out.println(xmld);
    

    将文档转换为字符串的解决方案可以在

    找到

    How do I convert a org.w3c.dom.Document object to a String?

    【讨论】:

      猜你喜欢
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 2018-10-04
      • 1970-01-01
      • 2013-08-15
      • 2021-04-06
      相关资源
      最近更新 更多