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