gpt4 book ai didi

java - 在 Java 中验证来自 RESTful 服务的 XML 响应的好方法是什么?

转载 作者:行者123 更新时间:2023-12-01 10:40:40 26 4
gpt4 key购买 nike

我正在 Java 中执行简单的 RESTFUL 服务 API 验证。

处理 JSON 格式的响应非常方便。使用org.json库,可以轻松地将RESTFUL响应中的JSON字符串转换为JSON对象,并将其与预期的JSON字符串进行比较。

JSONObject response = new JSONObject(json_response_str);
JSONObject expected = new JSONObject(json_expected_str);
JSONAssert.assertEquals(expected, response, JSONCompareMode.LENIENT);

如果需要比较的是 JSON 响应的某些元素,也很容易,因为使用以下 API 可以轻松从 JSONObject 中提取子元素:

JSONObject element_in_response = response.get("..."); or
JSONObject element_in_response = response.getJSONObject("...");

但是,要处理 XML 格式的响应,事情就比较困难了。将整个 XML 响应与预期的 XML 进行比较还不错,我可以使用 XMLUnit 来做到这一点:

String xml_response_str = ...
String xml_expected_str = ...
assertXMLEquals(xml_response_str, xml_expected_str);

但是,JSON 中没有像 xmlOject 这样的东西。

如果想要将 XML 响应的某些元素与预期进行比较,我该怎么办?

我搜索过论坛,有时会提到 JAXB。我查了一下,它是关于将 XML 解析为 Java 对象。那么我是否应该解析响应 XML 字符串和预期 XML 字符串,然后将 元素 提取为 Java 对象,然后比较它们?这看起来很复杂,更不用说我需要 XML 模式来开始。

执行此操作的有效方法是什么?有没有像 JSON 一样方便的方法?

谢谢

最佳答案

您可以尝试使用XPATH。

有一个简短的例子。这是 XML 字符串:

<?xml version="1.0" encoding="UTF-8"?>
<resp>
<status>good</status>
<msg>hi</msg>
</resp>

以下代码将获取状态和消息:

String xml = "<resp><status>good</status><msg>hi</msg></resp>";
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
InputSource source = new InputSource(new StringReader(xml));
Document doc = (Document) xpath.evaluate("/", source, XPathConstants.NODE);
String status = xpath.evaluate("/resp/status", doc);
String msg = xpath.evaluate("/resp/msg", doc);
System.out.println("status=" + status);
System.out.println("Message=" + msg);

以下是有关如何使用 XPATH 的更多示例: http://viralpatel.net/blogs/java-xml-xpath-tutorial-parse-xml/

关于java - 在 Java 中验证来自 RESTful 服务的 XML 响应的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34432343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com