Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java中的soap响应创建json_Java_Json_Xml_Web Services_Soap - Fatal编程技术网

从java中的soap响应创建json

从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">

我有一个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: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}