cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Chris Marshall (JIRA)" <j...@apache.org>
Subject [jira] [Created] (CXF-6179) Jackson JSON parsing Incompatible with the Transform Feature
Date Sun, 28 Dec 2014 18:23:13 GMT
Chris Marshall created CXF-6179:
-----------------------------------

             Summary: Jackson JSON parsing Incompatible with the Transform Feature
                 Key: CXF-6179
                 URL: https://issues.apache.org/jira/browse/CXF-6179
             Project: CXF
          Issue Type: Bug
          Components: JAX-RS
    Affects Versions: 3.0.3
         Environment: CXF 3.0.3 and Jackson 2.4.4
            Reporter: Chris Marshall


Short version of the problem:
     Jackson (2.4.4) when used to parse inbound JSON messages is incompatible with the transform
feature (CXF 3.0.3).  The transform feature (org.apache.cxf.feature.StaxTransformFeature)
consumes the InputStream that jackson expects to read with the JSON content.

Longer version of the problem:
     I am currently building a service that is to be used by parterners that will be using
various different tools, for example PHP and Windows .NET.  As a consequence I would like
to create a service that support SOAP, Rest/XML and Rest/JSON.  The Rest versions should support
messages both with and without namespaces.  At this point I have working SOAP, Rest/JSON and
Rest/XML with namespaces.  In order to get Rest/XML without namespaces to work I added the
use of the transform feature and it behaves as desired with XML.  However as soon as the transform
feature is enabled the JSON parsing quits working.  Digging into what is going on, the point
at which Jackson tries to read the InputStream there are 0 available bytes when the transform
feature is enabled.
     In order to diagnose the issue I overrode the readFrom method in com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider
as follows:
package com.a100sys.affiliateportal.impl;

import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;

import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider;

import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;

@Provider
@Consumes(MediaType.WILDCARD) // NOTE: required to support "non-standard" JSON variants
@Produces(MediaType.WILDCARD)
public class JsonTestProvider extends JacksonJaxbJsonProvider {

	@Override
	public Object readFrom(Class<Object> arg0, Type arg1, Annotation[] arg2,
			MediaType arg3, MultivaluedMap<String, String> arg4,
			InputStream arg5) throws IOException {
		int availableBytes = arg5.available();
		System.out.println("Available bytes " + availableBytes);
		Object readObject = super.readFrom(arg0, arg1, arg2, arg3, arg4, arg5);
		return readObject;
	}
	
}

In my test case without the transform feature enabled there are a nice healthy 731 bytes available
and when the transform feature is enable there are 0 available bytes.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message