Brilliant! Thanks Jakub, that did it!
On Thu, Jul 7, 2011 at 9:58 AM, Jakub Podlesak
<jakub.podlesak_at_oracle.com> wrote:
> Hi Sean,
>
> I think the docs are pretty vague in this regard and talk about
> server side providers only.
>
> Try to add the following method to the builder bellow:
>
> .clientConfig(new DefaultClientConfig(CookieInfoReaderWriter.class))
>
> Does it help?
>
> ~Jakub
>
> On 07/07/2011 05:16 PM, Sean Landis wrote:
>>
>> Hi Jakub,
>> Thanks for the reply. Here is my test case class constructor:
>>
>> public CustomerLoginWebServiceTest() throws Exception {
>> super(new
>> WebAppDescriptor.Builder("com.foo.customerlogin.jersey.webapp")
>> .servletClass(JerseyServletContainer.class)
>> .initParam("javax.ws.rs.Application",
>> CustomerLoginApplication.class.getName())
>> .addFilter(ProcessingScopeFilter.class, "Processing Scope Filter")
>> .addFilter(ServiceUsageTrackingFilter.class, "Service Usage
>> Tracking Filter")
>> .build());
>> service = new ServiceRequester(resource());
>> }Builder
>>
>> According to the Javadoc, the WebAppDescriptor.Builder() constructor
>> ought find my providers but it is not. Does anything pop out as being
>> incorrect?
>>
>> Thanks,
>> Sean
>>
>> On Thu, Jul 7, 2011 at 3:33 AM, Jakub Podlesak
>> <jakub.podlesak_at_oracle.com> wrote:
>>>
>>> Hi Sean,
>>>
>>> You need to register the provider on the client side.
>>> I do not know how you initialize the Client, but one way of doing it
>>> could be as follows:
>>>
>>> public class CookieTest extends JerseyTest {
>>>
>>> public CookieTest() throws Exception {
>>> super(CookieInfoReaderWriter.class.getPackage().getName());
>>> }
>>>
>>> ...
>>> }
>>>
>>> The provider class could also be added to your client config.
>>>
>>> Should you need more details, please provide your test class
>>> constructors, so that i could suggest the simplest way how to register
>>> your provider there.
>>>
>>> ~Jakub
>>>
>>>
>>> On 07/06/2011 04:00 PM, Sean Landis wrote:
>>>>
>>>> It has been a few days and I haven't heard anything. Is this expected
>>>> behavior that the message body reader cannot be used by the client? Or
>>>> is there something I am missing to get it to work?
>>>>
>>>> On Sun, Jul 3, 2011 at 2:51 PM,<sean.landis_at_gmail.com> wrote:
>>>>>
>>>>> I cannot get JerseyTest to find my MessageBodyReader.
>>>>> I've defined the following message body reader/writer:
>>>>>
>>>>>
>>>>> @Consumes(MediaType.TEXT_PLAIN)
>>>>> @Produces(MediaType.TEXT_PLAIN)
>>>>> @Provider
>>>>> public class CookieInfoReaderWriter implements
>>>>> MessageBodyWriter<CookieInfo>,
>>>>> MessageBodyReader<CookieInfo> {
>>>>>
>>>>> @Override
>>>>> public boolean isReadable(Class<?> type, Type genericType,
>>>>> Annotation[] annotations,
>>>>> MediaType mediaType) {
>>>>> return type.equals(CookieInfo.class);
>>>>> }
>>>>>
>>>>> @Override
>>>>> public CookieInfo readFrom(Class<CookieInfo> type, Type
>>>>> genericType,
>>>>> Annotation[] annotations,
>>>>> MediaType mediaType, MultivaluedMap<String, String>
>>>>> httpHeaders,
>>>>> InputStream entityStream)
>>>>> throws IOException, WebApplicationException {
>>>>> return new CookieInfo(entityStream);
>>>>> }
>>>>>
>>>>> @Override
>>>>> public long getSize(CookieInfo t, Class<?> type, Type genericType,
>>>>> Annotation[] annotations,
>>>>> MediaType mediaType) {
>>>>> return -1;
>>>>> }
>>>>>
>>>>> @Override
>>>>> public boolean isWriteable(Class<?> type, Type genericType,
>>>>> Annotation[] annotations,
>>>>> MediaType mediaType) {
>>>>> return CookieInfo.class.isAssignableFrom(type);
>>>>> }
>>>>>
>>>>> @Override
>>>>> public void writeTo(CookieInfo t, Class<?> type, Type genericType,
>>>>> Annotation[] annotations,
>>>>> MediaType mediaType, MultivaluedMap<String, Object>
>>>>> httpHeaders,
>>>>> OutputStream entityStream)
>>>>> throws IOException, WebApplicationException {
>>>>> t.write(entityStream);
>>>>> }
>>>>> }
>>>>>
>>>>> The writer works great on the server. I'd like to be able to use the
>>>>> reader in the JerseyTest like such:
>>>>>
>>>>> CookieInfo ci =
>>>>> webResource.path("/newCookies").type(MediaType.TEXT_PLAIN).get(CookieIn
>>>>> fo.class);
>>>>>
>>>>> But I get an exception:
>>>>>
>>>>> SEVERE: A message body reader for Java class com.foo.dto.CookieInfo,
>>>>> and Java type class com.foo.dto.CookieInfo, and MIME media type
>>>>> text/plain was not found
>>>>> Jul 3, 2011 2:46:03 PM com.sun.jersey.api.client.ClientResponse
>>>>> getEntity
>>>>> SEVERE: The registered message body readers compatible with the MIME
>>>>> media type are:
>>>>> text/plain ->
>>>>> com.sun.jersey.core.impl.provider.entity.StringProvider
>>>>> com.sun.jersey.core.impl.provider.entity.ReaderProvider
>>>>> */* ->
>>>>> com.sun.jersey.core.impl.provider.entity.FormProvider
>>>>> com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider
>>>>> com.sun.jersey.core.impl.provider.entity.StringProvider
>>>>> com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
>>>>> com.sun.jersey.core.impl.provider.entity.FileProvider
>>>>> com.sun.jersey.core.impl.provider.entity.InputStreamProvider
>>>>> com.sun.jersey.core.impl.provider.entity.DataSourceProvider
>>>>>
>>>>> com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
>>>>> com.sun.jersey.core.impl.provider.entity.ReaderProvider
>>>>> com.sun.jersey.core.impl.provider.entity.DocumentProvider
>>>>>
>>>>> com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceRea
>>>>> der
>>>>>
>>>>> com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
>>>>>
>>>>> com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
>>>>>
>>>>> com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
>>>>>
>>>>> com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
>>>>>
>>>>> com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
>>>>> com.sun.jersey.core.impl.provider.entity.EntityHolderReader
>>>>>
>>>>> Clearly my provider isn't found. This despite the following:
>>>>>
>>>>> public WebServiceTest() throws Exception {
>>>>> super(new WebAppDescriptor.Builder("com.foo.jersey.webapp")
>>>>> .build());
>>>>>
>>>>> What I do instead...and I got the idea from the entityprovider sample
>>>>> code...is:
>>>>>
>>>>> String stringCookies =
>>>>> createRequest("/newCookies").get(String.class);
>>>>> CookieInfo ci = new CookieInfo(new
>>>>> ByteArrayInputStream(stringCookies.getBytes()));
>>>>>
>>>>> Which works, but is very unappealing compared to the way that doesn't
>>>>> work.
>>>>>
>>>>> What am I missing to get JerseyTest to use my message reader?
>>>>>
>>>>> Sean
>>>>>
>>>
>
>