json wso2 wso2dss

WSO2 Data Services problema de JSON



wso2dss (2)

Espero que me ayuden a obtener el servicio JSON REST WSO2 Data Service. Uso v 3.0.1 y servicio de datos de muestra. Sospecho que hago algo malo ... Creé un recurso ''productos'' que está ligado a los productos consulta SQL. La solicitud XML REST funciona perfectamente, pero no JSON:

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

devoluciones

> "Fault":{"faultcode":"","faultstring":"No JSON message received > through HTTP GET or POST","detail":""}}

  1. Desde el código fuente parece que espera tener algún cuerpo de solicitud en url de solicitud (lo cual es extraño), por lo que la siguiente consulta es

    curl --request GET http://myserver.com:9763/services/samples/RDBMSSample.HTTPEndpoint/products?q=emptyquery -H Content-Type: "application / json"

Este se cuelga y en el servidor después de varios minutos recibo la siguiente excepción:

> 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. La siguiente consulta funciona, sin embargo:

    curl --data ''{"employeesbynumber": {"employeenumber": {"$": "1002"}}}} http://myserver.com:9763/services/samples/RDBMSSample/ --header Content-Type: "application / json" - header SOAPAction: "urn: employeesByNumber"


Así que después de varias horas depurando WSO2 DSS y el código Axis2 hay una solución:

Motivo : WSO2 aún se ejecuta en Axis 1.6.1 que tenía algunos errores críticos en JSONOMBuilder y JSONDataSource (que parecen haberse solucionado en 1.6.2). Específicamente, requería que todas las solicitudes GET tuvieran un parámetro de entrada y también un elemento raíz + algunos otros problemas. El hecho es que, en el interior, AXIS2 asigna la carga útil de JSON al cuerpo de SOAP, por lo que necesita tener un elemento raíz ...

Solución Más de una solución temporal: para las solicitudes GET, pase el cuerpo de la solicitud con parámetros envueltos en un elemento raíz (y, por supuesto, codificado en la URL). Incluso si no tiene parámetros, páselos de todos modos. Por lo tanto, las siguientes consultas funcionan:

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"

Y este para la consulta sin parámetro pero pasando el maniquí de todos modos:

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"

Espero que los chicos de WSO2 actualicen al último Axis2 pronto ...


Creo que la forma en que llamas a REST cal desde curl es incorrecta si quieres jugar con curl puedes usar la referencia [1]. el mensaje correcto sería

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

De lo contrario, hay un buen complemento de Google Chrome "Advanced REST client", simplemente puede usarlo para invocar servicios REST.

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