[jira] [Created] (NUTCH-2471) Returning a bare string meant to be application/json doesn't properly quote the string

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[jira] [Created] (NUTCH-2471) Returning a bare string meant to be application/json doesn't properly quote the string

JIRA jira@apache.org
Ninaad Joshi created NUTCH-2471:
-----------------------------------

             Summary: Returning a bare string meant to be application/json doesn't properly quote the string
                 Key: NUTCH-2471
                 URL: https://issues.apache.org/jira/browse/NUTCH-2471
             Project: Nutch
          Issue Type: Bug
          Components: nutch server
    Affects Versions: 2.3.1
            Reporter: Ninaad Joshi
            Priority: Blocker


Nutch Server resources are JAX-RS resources and that they proclaims to produce JSON even for a resource method that returns a String......

{code:java}
@Produces({ MediaType.APPLICATION_JSON })
public abstract class AbstractResource {
.....
}

@Path("/config")
public class ConfigResource extends AbstractResource {
...
@GET
  @Path("/{configId}/{propertyId}")
  public String getProperty(@PathParam("configId") String configId,
      @PathParam("propertyId") String propertyId) {
    return configManager.getAsMap(configId).get(propertyId);
  }
}
{code}

the HTTP response indicates it is an application/json response, however the string returned is not properly quoted for JSON. We also get de-serialization errors on the client side.

{noformat}
server: Restlet-Framework/2.2.3
date: Wed, 06 Dec 2017 10:30:13 GMT
content-type: application/json; charset=UTF-8
content-length: 21
accept-ranges: bytes

There was an error parsing JSON data
Unexpected token B in JSON at position 0
{noformat}

The JAX-RS resources are configured to use JacksonJsonProvider for writing the JSON message body. JacksonJsonProvider.isWriteable() is indicating that it cannot write the value because _untouchables includes String.class. It appears String.class was put back into the _untouchables list as a result of this [link bug|https://github.com/FasterXML/jackson-jaxrs-json-provider/issues/12]
That bug, however, appears to have been targeted at dealing with an XML issue, not a JSON issue.

It should have been ideally taken care by the Jackson providers. However, it's not and hence proposing this fix.
* Create our own custom NutchJsonProvider based on JacksonJsonProvider and remove the String.class from the _untouchables
* Register this NutchJsonProvider with NutchServer to be used while writing JSON message body

I have attached the patch along with this issue

The other option is to JsonEscape the string and pad it with double quotes before returning. This has to be done at all places wherever string is returned as Json response and also is prone to errors in future if anybody misses this escaping and padding.




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)