我正在使用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>
感谢您的帮助, 塞马蒂
答案 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;