java - 将 XML 转换为 JSON 和 Vice Versa,以及如何在发出 XML 请求时识别 REST 端点?
问题描述
在发布这个问题之前我做了很多研究,但是我没有得到适当的指导。我的公司通过Proxy/Gateway
. 大约 1000 名客户注册到代理/网关并向基于 SOAP 的系统发出 XML 请求(部署在WebSphere App Server (WAS) V7.5上)。现在,我们开发了仅支持 JSON 的新系统,并希望指向部署在 PCF(Pivotal Cloud Foundry)上的新开发系统。
在这里我们不想要求消费者做任何改变。
现在,我们正在尝试开发Adapter (Spring Boot Project)
将 XML 请求转换为 JSON 向新系统发出请求并以 JSON 格式获取响应并再次Adapter (Spring Boot Project)
将 JSON 转换为 XML 的开发。在这里,JSON 响应和 XML 响应有时可能不同。
现在,我真的无法决定调用哪个端点
String xml_data = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:ahc.com:dms:wsdls:organization\">\n" +
" <soapenv:Header/>\n" +
" <soapenv:Body>\n" +
" <urn:getRoles>\n" +
" <getRolesRequest>\n" +
" <Type>ABC</Type>\n" +
" </getRolesRequest>\n" +
" </urn:getRoles>\n" +
" </soapenv:Body>\n" +
"</soapenv:Envelope>";
JSONObject obj = XML.toJSONObject(xml_data);
System.out.println(obj);
它给了我以下回应。
{"soapenv:Envelope":{"soapenv:Body":{"urn:getRoles":{"getRolesRequest":{"Type":"AYU"}}},"xmlns:soapenv":"http://schemas.xmlsoap.org/soap/envelope/","xmlns:urn":"urn:ahc.com:dms:wsdls:organization","soapenv:Header":""}}
有什么指导吗?
注意:我想<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\
从 JSON 对象中删除。此外,在将 JSON 转换为 XML 时,我想添加<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\
解决方案
您可以使用underscore-java库。它具有读取 xml 和生成 json 的静态方法。
String xmlData = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\""
+ " xmlns:urn=\"urn:ahc.com:dms:wsdls:organization\">\n"
+ " <soapenv:Header/>\n"
+ " <soapenv:Body>\n"
+ " <urn:getRoles>\n"
+ " <getRolesRequest>\n"
+ " <Type>ABC</Type>\n"
+ " </getRolesRequest>\n"
+ " </urn:getRoles>\n"
+ " </soapenv:Body>\n"
+ "</soapenv:Envelope>";
Map<String, Object> jsonData = U.<Map<String, Object>>get(
U.<Map<String, Object>>fromXmlWithoutNamespaces(xmlData), "Envelope.Body.getRoles");
System.out.println(U.toJson(jsonData));
输出:
{
"getRolesRequest": {
"Type": "ABC"
}
}
推荐阅读
- jquery - bootstrap-input-spinner-Angular:如何在下面的代码中添加 24 格式
- node.js - 创建 Webpack 插件时如何设置入口点和对应的输出文件路径?
- flutter - Flutter v2 中 Textfeild 的键盘隐藏底页
- github - GitHub Action: 为 push 和 pull_request 事件设置常见的忽略路径集
- bash - 检查子字符串是否包含在字符串中并且至少包含前 4 个字符
- python - 如果我有它的RGB,如何获取像素的坐标?
- javascript - jquery将多个元素附加到一个div
- directory - 如何在没有“T”的情况下创建目录
- java - 如何根据java中的Enum字段对一组对象进行排序
- javascript - 如何通过 React 中的 Table 道具映射