axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Marti Pamies Sola (JIRA)" <j...@apache.org>
Subject [jira] [Created] (AXIS2-5929) REST Services URL GET json request not working
Date Fri, 10 Aug 2018 06:46:00 GMT
Marti Pamies Sola created AXIS2-5929:
----------------------------------------

             Summary: REST Services URL GET json request not working
                 Key: AXIS2-5929
                 URL: https://issues.apache.org/jira/browse/AXIS2-5929
             Project: Axis2
          Issue Type: Improvement
          Components: json
    Affects Versions: 1.7.8
            Reporter: Marti Pamies Sola
         Attachments: AbstractJSONOMBuilder.java, AbstractJSONOMBuilder.java.patch

At a REST services, I do not receive HTTP GET requests when content-type is json, and parameters
are at request URL path (not as Query string). Let me explain in detail:

I am implementing a REST services according to [HL7 FHIR|[http://www.hl7.org/fhir/],] that
must be able to return content both on xml and json (depending on http header content-type),
once an HTTP GET request is received. Keys for the information to be returned can be provided
both directly at the request URL path or as a Query String:
 * Keys at URL path: {color:#505050}[http://localhost:8080/opencdefhirserver/services/FHIR/Binary/4295642378]{color}
 * Keys as Query string: {color:#505050}[http://localhost:8080/opencdefhirserver/services/FHIR/Binary?id4295642378|http://localhost:8080/opencdefhirserver/services/FHIR/Binary/4295642378]{color}

Where, FHIR is my service; Binary is the axis2 operation to be executed (mapping to a FHIR
resource); and {color:#505050}4295642378{color} the resource id.

Providing keys as Query String work properly with xml and json, but providing key at URL path
just work with xml, on json I get the following exception:

"_No JSON message received through HTTP GET or POST"_

I've been reviewing source code and I guess the issue comes form this fragment of code at
AbstractJSONOMBuilder.java line 85:

 
{code:java}
//            if ((index = requestURL.indexOf("=")) > 0) {
                jsonString = requestURL.substring(index + 1);
                reader = new StringReader(jsonString);
            } else {
                throw new AxisFault("No JSON message received through HTTP
GET or POST");
            }
{code}
As it only accepts parameters as Query String, and when not provided it raise an exception.

I propose the following modification, where if not Query String is provided, it considers
full request URL as input json.
{code:java}
//             if ((index = requestURL.indexOf("=")) > 0) {
                jsonString = requestURL.substring(index + 1);
                reader = new StringReader(jsonString);
            } else {
                /*
                 * MARTI PAMIES SOLA
                 * Get JSON message from request URI if not present as parameter.
                 * To be able to response to full URL requests
                 */
                HttpServletRequest httpServeltRqst =(HttpServletRequest)messageContext.getProperty("transport.http.servletRequest");
                String requestParam=httpServeltRqst.getRequestURI();
                if (!(requestParam.equals(""))) {
                    jsonString = requestParam;
                    reader = new StringReader(jsonString);
                }else {
                    throw new AxisFault("No JSON message received through
HTTP GET or POST");
                }
            }
{code}
I've test locally and it work for me, so I propose to include modification at next release.
Attached is the new AbstractJSONOMBuilder.java file and also the svn patch.

Hope useful.

Thanks,

Martí

 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org


Mime
View raw message