[
https://issues.apache.org/jira/browse/CXF-6179?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sergey Beryozkin resolved CXF-6179.
-----------------------------------
Resolution: Won't Fix
Assignee: Sergey Beryozkin
Using TransformFeature implies that message body readers can work with custom
XMLStreamReader
> 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
> Assignee: Sergey Beryozkin
>
> 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)