Glen's email put me back on the right track. Now I just have to track down mysterious closed streams between a service writing to a StreamingOutput and a client waiting for the response.
On Thu, Jan 27, 2011 at 5:00 AM, Sergey Beryozkin <[email protected]> wrote: > Hi > > SomeClass bean = webClient.get(SomeClass.class) > > will return a ServiceClass instance provided a provider understanding how to > read the response stream is available. > If the error status code is returned than the above call will throw the > ServerWebApplicationException. The underlying Response can still be > retrieved, webClient.getResponse(). > > In 2.3.3-SNAPSHOT I've done a minor fix to ensure this works provided a > ResponseReader provider is registered : > > Response r = webClient.get(); > SomeClass bean = (SomeClass)r.get(); > > ResponseReader is mainly needed for cases where proxies are dealing with > explicit Responses returned from methods. But I agree it can be handy for > web clients as well, just so that the status can be checked first, etc. > > ResponseReader is a MessageBodyReader which uses an injected JAX-RS > Providers context instance to find a more specific reader, such as > org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider. > > The reason I'm reluctant to introduce a ClientResponse class which would let > users avoid registering ResponseReader is because Response has all the > information the ClientResponse would have and having ClientResponse would > not fix the issue of helping proxies to cast Response.getEntity as JAX-RS > Response is going to stay I believe. I'd prefer JAX-RS 2.0 to improve just a > little bit the Response interface rather than introducing a ClientResponse > duplicate > > thanks, Sergey > > > On Thu, Jan 27, 2011 at 3:40 AM, Glen Mazza <[email protected]> wrote: > >> I don't think you ever need ResponseReader with WebClient; Sergey put it in >> 2.3.2 for client proxies only, and then added it to upcoming 2.3.3 for >> WebClient. >> >> I *think* you want something like: >> String jsonString = >> client.accept("application/json").path("/definedPredicates").get(String.class); >> >> Failing that, adding a custom MessageBodyReader as a Provider to handle the >> InputStream -> JSON conversion. But Sergey would know more. >> >> Glen >> >> >> >> On 26.01.2011 22:05, Benson Margulies wrote: >> >>> Given the following, I expected the provider to produce the entity in >>> the response. Instead, I just get the stream. The doc mentions a >>> ResponseReader, but doesn't show use with WebClient. What's the >>> provider for, in any case, if a ResponseReader is needed? >>> >>> List<Object> providers = new ArrayList<Object>(); >>> providers.add(new >>> org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider()); >>> WebClient client = WebClient.create(endpointAddress, providers); >>> Response r = >>> client.accept("application/json").path("/definedPredicates").get(); >>> Object o = r.getEntity(); >>> assertEquals(Status.OK.getStatusCode(), r.getStatus()); >>> >> >> >> -- >> Glen Mazza >> Software Engineer, Talend (http://www.talend.com) >> blog: http://www.jroller.com/gmazza >> >> >> >
