2013-02-25 64 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