Axis2 JSon支持(Jettison)糟糕的xml转换

时间:2018-02-02 16:56:14

标签: json axis2 jettison

我正在使用Axis2 1.6.4实现REST Json WebServices(https://axis.apache.org/axis2/java/core/docs/json_support.html),当Jettison将Json对象转换为XML(如果它没有“root”元素)时,我遇到了一个问题。详细说明:

如果请求是:

{"name":"John","age":30}

然后服务器端的XML OMElement是:

<name>John</name

因此错过了年龄元素

相反,如果请求是:

{person:{"name":"John","age":30}}

然后服务器端的XML OMElement是:

<person><name>John</name><age>30</age></person>

感谢您的帮助, 塞马蒂

1 个答案:

答案 0 :(得分:0)

我已经找到解决此JSON-> XML转换问题的方法。多亏了这篇文章:How to use Axis2 JSON,我意识到我能够在将输入json转换为XML之前对其进行访问,并能够从json字符串创建OMElement。因此,当输入是json请求时,我用json“ root”元素包装它,然后将其转换为XML而不会丢失数据。 如果对某人有用,则下面是获取输入json字符串的源代码和将json字符串转换为OMElement的源代码

获取输入的json字符串并包装成根

    OMSourcedElement source=(OMSourcedElement )msg;
    AbstractJSONDataSource jsonSoucre=(AbstractJSONDataSource)source.getDataSource();

    MessageContext msgCtxt= MessageContext.getCurrentMessageContext();

    JSONDataSource jsonRequestEnvDS= new JSONDataSource(new StringReader("{\"JSONEnvelope\": " + jsonSoucre.getObject() + " }"), msgCtxt);
    OMFactory factory = OMAbstractFactory.getOMFactory();
    OMSourcedElement omRequest =  factory.createOMElement(jsonRequestEnvDS,null,null);

从json字符串创建OMElement

    String jsonString="{...}";
    JSONDataSource jsonDS= new JSONDataSource(new StringReader(jsonString),msgCtxt);
    factory = OMAbstractFactory.getOMFactory();
    OMSourcedElement resonseJson =  factory.createOMElement(jsonDS,null,null);

    return  resonseJson;