axis2系列之返回json資料
2:下載DynamicResponseHandler(wso2dynamic-response-1.5.mar)模組,複製到webservice專案中的WEB-INF/modules中,記住要把wso2dynamic-response-1.5.mar加到modules.list中
3:下載Jettison,放入WEB-INF/lib中的模組,以及下載Jettison1.2補丁jettison-1.2-patched.jar,放入WEB-INF/lib中的模組,一定要jettison-1.2-patched.jar,如果有jettison-1.0-RC2.jar或老版本要移除,否則用的是老版本
4:將axis2.xml(定位在WEB-INF/conf)配置檔案中的新增
<moduleref="DynamicResponseHandler"/>
5:在axis2.xml新增JSON訊息格式,一定要是<messageFormatters>標籤裡,原來有這個標籤的則在原來的標籤里加,如果原來沒有這個標籤則才新加:
<messageFormatters>
<messageFormattercontentType="application/json"class="org.apache.axis2.json.JSONMessageFormatter"/>
<messageFormattercontentType="application/json/badgerfish"class="org.apache.axis2.json.JSONBadgerfishMessageFormatter"/>
</messageFormatters>
6:在axis2.xml新增JSON訊息編譯,一定要是<messageBuilders>標籤裡,原來有這個標籤的則在原來的標籤里加,如果原來沒有這個標籤則才新加:
<messageBuilders>
<messageBuildercontentType="application/json"class="org.apache.axis2.json.JSONOMBuilder"/>
<messageBuildercontentType="application/json/badgerfish"class="org.apache.axis2.json.JSONBadgerfishOMBuilder"/>
</messageBuilders>
7:啟動你的服務容器,並且通過url測試,例如:
http://localhost:8080/axis2/services/Version/getVersion?response=application/json
返回的值為:{"return":"Hi - the Axis2version is 1.6.2"}
方案二:傳值為json
通過上面的例子如果是用pojo傳過來的是一個類,那裡面的格式如下:
{"return":{"@type":"ax24:IdentityBean","result":false,"userId":"030"}}
這並不是一個標準的json,所有采取的方法只有在傳的時候直接打成json來傳.
伺服器轉換程式碼:
Useruser
Gson gson = new Gson();
String str = gson.toJson(user);
直接返回的是String個客戶端,客戶端請求資料如下:
<ns:LoginResponse xmlns:ns="http://ws.apache.org/axis2">
<return>
{"userId":"030","result":false,"list":[{"id":0,"name":"John0","email":"Email0","address":"Address0"},{"id":1,"name":"John1","email":"Email1","address":"Address1"},{"id":2,"name":"John2","email":"Email2","address":"Address2"}]}
</return>
</ns:LoginResponse>
可以看出中間的資料都是Json,然後在客戶端再轉一次:
Gson gson = new Gson();
User userInfo = (User) GsonUtils.Decryption(json,User.class);
這樣就能實現json的傳輸,並且還可以在中間採用加密,實現保密傳輸。