从java中的soap响应创建json
我有一个RESTWebService,它反过来调用Soap请求。我想将soap响应转换为json,以便将其作为输出返回给REST服务。实现这一目标最有效的方法是什么 为了回答这个问题,假设我得到如下所示的Soap xml响应从java中的soap响应创建json,java,json,xml,web-services,soap,Java,Json,Xml,Web Services,Soap,我有一个RESTWebService,它反过来调用Soap请求。我想将soap响应转换为json,以便将其作为输出返回给REST服务。实现这一目标最有效的方法是什么 为了回答这个问题,假设我得到如下所示的Soap xml响应 <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPriceResponse>
<m:Price>344.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>
我希望json是这样的
{价格:344.5}
我在org.json中尝试了XMLtoJSONObject方法。但是它没有提供我期望的输出。您是否尝试过:
public String XMLtoJSON(String xml) {
JSONObject jsonObj = XML.toJSONObject(xml);
String json = jsonObj.toString();
return json;
}
如果您使用的是Java 8或更高版本,您应该查看我的开源库:。unXml基本上从XPath映射到Json属性
可以在网上买到
范例
不会有一个库为您提供预期的输出。您需要自己编写一个基于XML解析器的过滤器,手动将每个必需的值映射到它的键。因此,如果您有一个表示XML实体的POJO,那么您将被排序。但是JSON字符串输出可能不是您期望的结果,我尝试转换的原始响应非常大,包含大量数据。因此,在编写自己的过滤器时,我关注性能。有没有标准的方法可以做到这一点?是的。但它不会像我提到的输出那样是一个纯json。它还将soap标记转换为jsonDoes转换
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.nerdforge.unxml.factory.ParsingFactory;
import com.nerdforge.unxml.parsers.Parser;
import org.w3c.dom.Document;
public class Parser {
public ObjectNode parseXml(String xml){
Parsing parsing = ParsingFactory.getInstance(namespaces()).create();
Document document = parsing.xml().document(xml);
Parser<ObjectNode> parser = parsing.obj("//m:GetStockPriceResponse")
.attribute("price", "m:Price", parsing.number())
.build();
ObjectNode result = parser.apply(document);
return result;
}
private Map<String, String> namespaces(){
return new HashMap<String, String>(){{
put("m", "http://www.example.org/stock");
}};
}
}
{"price":344.5}