Update.

Looking at CXF internals I discovered that StringTextProvider is used to
return the string object.

StringTextProvider implements MessageBodyReader<String> and
MessageBodyWriter<String>;

This is the readFrom implementation (called for MessageBodyReader):

    public String readFrom(Class<String> type, Type genType, Annotation[]
anns, MediaType mt,
                      MultivaluedMap<String, String> headers, InputStream
is) throws IOException {

        return IOUtils.toString(is, HttpUtils.getEncoding(mt, "UTF-8"));

    }

As you can see all the parameter are useless, input stream is returned as
is.

How can I specify a different provider for strings?


On Wed, Dec 30, 2015 at 12:45 AM, Vincenzo D'Amore <v.dam...@gmail.com>
wrote:

> Thanks Sergey,
>
> but in the meanwhile I tried fruitless different options which include
> escapeForwardSlashesAlways(false).
> I have also tried to change entirely the implementation, but even Jersey
> have the same behaviour.
> This is pretty strange to me.
>
> On Tue, Dec 29, 2015 at 7:10 PM, Sergey Beryozkin <sberyoz...@gmail.com>
> wrote:
>
>> Hi
>>
>> This is to do with a default CXF JSONProvider which is Jettison based.
>>
>> Jettison, historically, escapes forward slashes, I don't know why, it was
>> there when I started maintaining it.
>> What you can do is to configure CXF JSONProvider not to do it, set its
>> 'escapeForwardSlashesAlways' to false.
>>
>> Or use a Jackson provider instead (if you do - Make sure Jettison is on
>> on the classpath)
>>
>> HTH, Sergey
>>
>>
>>
>>
>> On 29/12/15 14:40, Vincenzo D'Amore wrote:
>>
>>> Hi All,
>>>
>>> I don't understand why when I receive a json encoded string this is not
>>> decoded automatically.
>>> I wrote this code:
>>>
>>>      Client client =
>>> ClientBuilder.newClient().register(JSONProvider.class);
>>>
>>>      WebTarget target = client.target("http://example.org/rest/service1
>>> ");
>>>      target = target.queryParam("method", "method1");
>>>
>>>      Entity<EndpointRequest> entity = Entity.entity(new
>>> EndpointRequest("0000"),
>>>                             MediaType.APPLICATION_JSON);
>>>      Response response = builder.post(entity);
>>>
>>>         System.out.println( response.getStatus() );
>>>
>>>         if (response.getStatus() == 200) {
>>>
>>> // The problem comes here
>>>
>>>         String basePath = response.readEntity(String.class);
>>>         System.out.println( basePath );
>>>         }
>>>
>>> The request is successfully executed but basePath contains
>>> "\/opt\/local\/application\/rest\/"  (backslash and double quotes
>>> included)
>>>
>>> basePath should instead contain this:  /opt/local/application/rest/
>>>
>>> It seems to me, the json deserialization hasn't be triggered when it
>>> should.
>>>
>>> Thanks in advance for your help,
>>> Vincenzo
>>>
>>>
>>
>> --
>> Sergey Beryozkin
>>
>> Talend Community Coders
>> http://coders.talend.com/
>>
>
>
>
> --
> Vincenzo D'Amore
> email: v.dam...@gmail.com
> skype: free.dev
> mobile: +39 349 8513251
>



-- 
Vincenzo D'Amore
email: v.dam...@gmail.com
skype: free.dev
mobile: +39 349 8513251

Reply via email to