当前位置: 首页 > 知识库问答 >
问题:

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

荣俊杰
2023-03-14

我有一个向服务器发出HTTP请求的Play Web应用程序

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

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

然而,如果我试图创建一个组织。w3c。多姆。使用WSResponse从响应中提取XML文档。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个答案

郑佐
2023-03-14

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

系统。出来println(response.getBody())

然而,你是在印刷。w3c。多姆。文件位于

 System.out.println(xmld);

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

如何转换组织。w3c。多姆。文档对象到字符串?

有凯泽
2023-03-14

请尝试以下代码:

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();
 类似资料:
  • 绑定到端口8080的Node.js express服务器 我希望通信量通过路由到服务到部署中的一个pods/副本。我做错了什么?

  • 我得到错误:com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法通过使用安全套接字层(SSL)加密建立到SQL服务器的安全连接。错误:“SQL服务器没有返回响应。连接已关闭。” Hibernate配置: application.properties: pom.xml: SQLServerException: openssl客户端连接服务器:1

  • 问题内容: 我正在使用Java访问HTTPS站点,该站点以XML格式返回显示内容。我在URL本身中传递了登录凭据。这是代码片段: 我正在程序中创建一个不验证签名/未签名证书的信任管理器。但是,在运行上面的程序时,出现错误服务器返回HTTP响应代码:401表示URL:https:// Administrator:Password @ localhost:8443 / abcd 我可以在浏览器中使用相

  • 问题内容: 我正在尝试从URL获取InputStream。可以从Firefox打开URL。它返回一个json,并且我已经安装了一个插件以在Firefox中查看json,因此我可以在其中查看它。 所以我尝试通过以下方式从Java获取它: 但是它在urlConnection.getInputStream()中抛出IOException。 我也尝试过: 但是没有运气。 任何信息都是可观的。提前致谢。 问

  • 我使用两个解析服务器,一个用于主数据库,一个用于liveQuery。我还通过AWS ElastiCache设置了redis。问题是当我在客户端(iOS)中使用实时查询时,没有显示任何事件。代码对任何更改都没有响应。这里会有什么问题? 一个问题:来自AWS Elasticache的redisURL是这样的:(这会导致服务器启动错误)appname.jajj2i.0001.use1.cache.ama

  • 我正在测试一个由JAX-WS编写的Rest服务。我执行我的服务,服务返回一个实体,我将该实体设置为响应状态ok,最后服务返回状态ok,代码200,但响应体为空。我调试了我的代码,下面这一行没有问题。原因是什么? 我的实体类是简单的Pojo: