2013-02-25 63 views
2

我希望你能幫助我獲得JSON REST WSO2數據服務工作。 我使用v 3.0.1和示例數據服務。我懷疑我做錯了... 我創建了一個綁定到productsSQL查詢的資源「產品」。 XML REST請求工作完美,但不是JSON:WSO2數據服務JSON問題

  1. 捲曲--request GET http://myserver.com:9763/services/samples/RDBMSSample.HTTPEndpoint/products -H的Content-Type: 「應用/ JSON」

回報

> "Fault":{"faultcode":"","faultstring":"No JSON message received 
> through HTTP GET or POST","detail":""}} 
  1. 從源代碼看起來像它預期在請求的URL部分請求體(這是奇怪的),所以接下來的查詢

    捲曲--request GET http://myserver.com:9763/services/samples/RDBMSSample.HTTPEndpoint/products?q=emptyquery -H的Content-Type: 「應用/ JSON」

幾分鐘我得到下面的異常後,這一次掛起和服務器:

> Feb 24, 2013 8:08:13 PM 
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor run SEVERE: 
> java.lang.ThreadDeath  at java.lang.Thread.stop(Thread.java:776) at 
> org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.handleStuckThread(CarbonStuckThreadDetectionValve.java:121) 
> at 
> org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.backgroundProcess(CarbonStuckThreadDetectionValve.java:175) 
> at 
> org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1387) 
> at 
> org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1566) 
> at 
> org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1576) 
> at 
> org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1555) 
> at java.lang.Thread.run(Thread.java:680) 
  • 以下查詢作品,但是:

    捲曲--data「{ 「employeesbynumber」:{ 「employeenumber」:{ 「$」: 「1002」} }}」 http://myserver.com:9763/services/samples/RDBMSSample/ --header 的Content-Type: 「應用/ JSON」 --header 的SOAPAction: 「甕:employeesByNumber」

  • 回答

    1

    幾個小時的調試WSO2 DSS和Axis2代碼後,所以有一個修復程序:

    原因:WSO2仍然運行在軸1.6.1,其曾在JSONOMBuilder和JSONDataSource(一些嚴重的安全漏洞,這似乎有已在1.6.2中修復)。具體來說,它要求所有的GET請求都有輸入參數,並且還包含在根元素中+其他一些問題。事實是,AXIS2裏面的JSON有效載荷映射到SOAP體,所以需要有根元素..

    解決方案更多的解決方法:對GET請求傳遞請求主體,參數包含在根元素中(當然還有url編碼)。即使你沒有參數 - 無論如何都要通過它們。 所以下面的查詢工作:

    curl --request GET http://192.168.1.10:9763/services/samples/RDBMSSample.HTTPEndpoint/employees?q=%7B%22request%22%3A%7B%22employeeNumber%22%3A%221%22%7D%7D%20 -H Content-Type:"application/json" 
    

    而這一次查詢沒有參數,但無論如何傳遞一個假人:

    curl --request GET http://192.168.1.10:9763/ervices/samples/RDBMSSample.HTTPEndpoint/products?q=%7B%22request%22%3A%7B%22employeeNumber%22%3A%221%22%7D%7D%20 -H Content-Type:"application/json" 
    

    希望WSO2傢伙會更新到最新不久的Axis2 ...

    0

    我想你REST調用的方式從捲曲CAL是錯誤的如果你想玩捲毛你可以使用參考文獻[1]。 正確的消息是

    curl -i -H "Accept: application/json" http://myserver.com:9763/services/samples/RDBMSSample.HTTPEndpoint/products 
    

    否則有一個很好的谷歌瀏覽器插件「高級REST客戶端」你可以簡單地用它來調用REST服務。

    [1]。 http://blogs.plexibus.com/2009/01/15/rest-esting-with-curl/

    +0

    我查看沒有錯,因爲它等價於curl -X GET htt p:// localhost:9763/services/samples/RDBMSSample.HTTPEndpoint/products -H「Content-Type:application/json」 – adnecs 2013-02-25 16:50:25