【问题标题】:create a json from a soap response in java从java中的soap响应创建一个json
【发布时间】:2017-05-18 16:20:02
【问题描述】:

我有一个 REST 网络服务,它反过来调用一个 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 中的 XMLtoJSONObject 方法。但它没有给出我期望的输出。

【问题讨论】:

  • 不会有一个库可以为您提供预期的输出。您需要自己编写一个基于 XML 解析器的过滤器,您可以在其中手动将每个所需的值映射到它的键。
  • Lookup Jersey,它可以将 Java POJO 转换为 JSON,反之亦然。因此,如果您有一个表示 XML 实体的 POJO,那么您将被排序。但是 JSON 字符串输出可能与您的预期不同。
  • 我试图转换的原始响应非常大并且包含大量数据。所以我在编写自己的过滤器时担心性能。有没有标准的方法来做到这一点?

标签: java json xml web-services soap


【解决方案1】:

你试过了吗:

public String XMLtoJSON(String xml) {
    JSONObject jsonObj = XML.toJSONObject(xml);
    String json = jsonObj.toString();
    return json;
}

【讨论】:

  • 是的。但它不会像我提到的输出那样是纯 json。它也会将soap标签转换为json
  • 是否仍然进行转换
【解决方案2】:

如果您使用的是 Java 8 或更高版本,您应该查看我的开源库:unXml。 unXml 基本上是从 Xpath 映射到 Json 属性。

Maven Central 上可用。

例子

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");
    }};
  }
}

它将返回一个JacksonObjectNode,带有以下json:

{"price":344.5}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2015-12-04
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多