2010-03-11 12 views
6

tengo esta interfaz:incapaz de encontrar un MessageBodyReader

@Path("inbox") 
public interface InboxQueryResourceTest { 

    @POST 
    @Path("{membershipExternalId}/query") 
    @Consumes(MediaType.APPLICATION_XML) 
    @Produces("multipart/mixed") 
    public MultipartOutput query(@PathParam("membershipExternalId") final String membershipExternalId, 
          @QueryParam("page") @DefaultValue("0") final int page, 
          @QueryParam("pageSize") @DefaultValue("10") final int pageSize, 
          @QueryParam("sortProperty") final List<String> sortPropertyList, 
          @QueryParam("sortReversed") final List<Boolean> sortReversed, 
          @QueryParam("sortType") final List<String> sortTypeString, 
          final InstanceQuery instanceQuery) throws IOException; 
} 

He implementado el método para devolver un MultipartOutput. Estoy publicando una consulta xml de Fiddler y recibo el resultado sin ningún problema.

pero he hecho una prueba de integración para la misma interfaz, i enviar los mismos objetos y puse la respuesta como:

final MultipartOutput multiPartOutput = getClient().query(getUserRestAuth(), 0, 25, null, null, null, instanceQuery); 

Pero aquí, por lo que a partir de pruebas de integración, recibo un error extraño:

Unable to find a MessageBodyReader of content-type multipart/mixed;boundary="74c5b6b4-e820-452d-abea-4c56ffb514bb" and type class org.jboss.resteasy.plugins.providers.multipart.MultipartOutput

Cualquiera tiene alguna idea de por qué solo en las pruebas de integración recibo este error?

PD: Algunos de ustedes dirán que no envío application/xml como ContentType pero es multiparte, lo que por supuesto es falso porque los objetos están anotados con el @XmlRootElement requerido etc., sin embargo, tampoco funcionaría el POST de Fiddler.

Respuesta

-1

Intente agregar este método a su clase de prueba. Esto registraría los proveedores incorporados predeterminados que ya están registrados en su servidor.

@BeforeClass 
public static void registerProviders() { 
    ResteasyProviderFactory providerFactory = ResteasyProviderFactory.getInstance(); 
    RegisterBuiltin.register(providerFactory); 
} 
+0

todavía no funciona ... –

+0

'RegisterBuiltin.register (providerFactory)' será invocado por defecto durante la 'ResteasyProviderFactory.getInstance()' invoсation –

0

¿Están incluyendo en classpath el correspondiente complemento resteasy para la codificación multiparte? (esteasy-multipart-proveedor).

+0

Hola. Sí lo son. –

+0

¿En classpath de cliente también? Creo que el error se debe a que el proxy resteasy del cliente no tiene un MessageBodyReader registrado que pueda manejar multipart/mixed. Si está utilizando resteasy 1.2 o superior, entonces es suficiente incluir en el classpath del cliente el jar mencionado anteriormente, en el caso de una versión resteasy <1.2, entonces tiene que hacer lo que Chandru escribe en el código del cliente. Para sus pruebas de integración ¿está utilizando dos máquinas virtuales separadas o ejecuta clientes y servidores de la misma manera? –

1

Puede probar esto:

ResteasyProviderFactory providerFactory = ResteasyProviderFactory.getInstance(); 
providerFactory.registerProvider(org.jboss.resteasy.plugins.providers.multipart.MimeMultipartProvider.class); 
Cuestiones relacionadas