我有一个REST Web服务,它反过来调用一个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: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.XML.toJSONObject()方法,但是它没有给予我所期望的输出。
3条答案
按热度按时间5lwkijsr1#
您是否尝试过:
kb5ga3dv2#
如果您使用的是Java 8或更高版本,您应该查看我的开源库:unXml基本上从XPathMap到JSON属性。
可在Maven Central上找到。
它将返回一个Jackson
ObjectNode
,其中包含以下json:ymzxtsji3#
我假设您已经使用了Jakarta XML Web Services和Jakarta XML Binding。带
jakarta.ws.WebService
注解的类将Java对象隐式地转换为XML,并将其转换为带jakarta.ws.WebMethod
注解的方法,并返回Java bean的示例。您只需将这些示例传递给Jakarta JSON Binding即可:请注意,我的答案只使用标准的Jakarta EE(〉= 9)API,没有第三方依赖项。
另一个解决方案是使用Java Stax(用于XML处理的Java API)读取SOAP信封、SOAP主体、SOAP响应、SOAP返回,然后只将接收到的XML的这一部分转换为JSON。要么将XML转换为Java Bean并使用上面的解决方案转换为JSON,要么不使用Java Bean将XML转换为JSON。依我的拙见,如果不想在JSON中返回SOAP内容,可以使用Stax只获取SOAP返回,并将其传递给
org.json.XML.toJSONObject(final String xml)
或任何其他能够将XML转换为JSON的工具。