【问题标题】:WSO2 Data Services JSON issueWSO2 数据服务 JSON 问题
【发布时间】:2017-09-21 22:58:36
【问题描述】:

我希望您能帮助我完成 JSON REST WSO2 数据服务的工作。 我使用 v 3.0.1 和示例数据服务。我怀疑我做错了... 我创建了一个绑定到 productsSQL 查询的资源“产品”。 XML REST 请求可以完美运行,但 JSON 不行:

  1. curl --request 获取 http://myserver.com:9763/services/samples/RDBMSSample.HTTPEndpoint/products -H Content-Type:"application/json"

返回

> "Fault":{"faultcode":"","faultstring":"No JSON message received
> through HTTP GET or POST","detail":""}}
  1. 从源代码看起来它期望在请求 url 中有一些请求正文(这很奇怪),所以下一个查询是

    curl --request 获取 http://myserver.com:9763/services/samples/RDBMSSample.HTTPEndpoint/products?q=emptyquery -H Content-Type:"application/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)
  1. 但是,以下查询有效:

    curl --data '{"employeesbynumber":{"employeenumber":{"$":"1002"}}}' http://myserver.com:9763/services/samples/RDBMSSample/ --header 内容类型:“应用程序/json”--header SOAPAction:"urn:employeesByNumber"

【问题讨论】:

    标签: json wso2 wso2dss


    【解决方案1】:

    所以在调试 WSO2 DSS 和 Axis2 代码几个小时后,有一个修复:

    原因:WSO2 仍然在 Axis 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...

    【讨论】:

      【解决方案2】:

      我认为你从 curl 调用 REST cal 的方式是错误的,如果你想玩 curl,你可以使用参考 [1]。 正确的消息是

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

      还有一个很好的 Google chrome 插件“高级 REST 客户端”,您可以简单地使用它来调用 REST 服务。

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

      【讨论】:

      • 我认为查询没有任何问题,因为它相当于 curl -X GET htt p://localhost:9763/services/samples/RDBMSSample.HTTPEndpoint/products -H "Content-Type:application /json"
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多