有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Play Framework:将服务器的响应解析为Xml返回空文档

我有一个Play web应用程序,可以向服务器发出HTTP请求

请求进行得很顺利:我得到了一个200状态码和Content type=“application/xml”的响应

如果我打印到stdout响应体,我会看到一个格式良好的Xml文档

然而,如果我试图创建一个组织。w3c。多姆。来自响应的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();
}

我做错了什么


共 (2) 个答案

  1. # 1 楼答案

    据我所知,你正在打印字符串

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

    但是,您正在打印一个组织。w3c。多姆。文件位于

     System.out.println(xmld);
    

    有关将文档转换为字符串的解决方案,请访问

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

  2. # 2 楼答案

    请尝试以下代码:

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

    或者,如果从肥皂中消费:

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