2010-03-11 11 views
6

mam ten interfejs:stanie znaleźć 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; 
} 

I wprowadziły metodę, która zwróci MultipartOutput. Publikuję zapytanie xml od Fiddlera i otrzymuję wynik bez żadnego problemu.

ale mam zrobić test integracyjny dla tego samego interfejsu, i wysłać te same obiekty i umieścić odpowiedź w stylu:

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

ale tutaj, więc z testów integracyjnych i odbierać dziwny błąd:

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

Ktoś ma idee, dlaczego tylko w testach integracyjnych otrzymuję ten błąd?

PS: Niektórzy z was powiedzą, że nie wysyłam application/xml jako ContentType, ale wieloczęściowe, co oczywiście jest fałszywe, ponieważ obiekty są opatrzone adnotacjami o wymaganych elementach @XmlRootElement itd., W przeciwnym razie nie działałby POST od Skrzypka.

Odpowiedz

-1

Spróbuj dodać tę metodę do swojej klasy testowej. To zarejestruje domyślnych wbudowanych dostawców, którzy są już zarejestrowani na twoim serwerze.

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

Nadal nie działa ... –

+0

'RegisterBuiltin.register (providerFactory)' zostanie wywołany domyślnie podczas 'ResteasyProviderFactory.getInstance()' invoсation –

0

Czy uwzględnienie w ścieżce klas odpowiadającego dodatku resteasy do kodowania wieloczęściowego? (dostawca multita-multipart).

+0

Cześć. Tak, oni są. –

+0

Również w ścieżce klas klienta? Uważam, że ten błąd wynika z faktu, że klientowy serwer proxy nie ma zarejestrowanego MessageBodyReader, który może obsłużyć multipart/mixed. Jeśli używasz resteasy 1.2 lub wyższej, wystarczy umieścić w ścieżce klasy klienta poprzedni wspomniany słoik, w przypadku wersji wypoczętej <1.2, to musisz zrobić, jak Chandru pisze w kodzie klienta. Do testów integracyjnych używasz dwóch oddzielnych maszyn wirtualnych lub uruchamiasz klienta i serwer w tym samym? –

1

Można spróbować to:

ResteasyProviderFactory providerFactory = ResteasyProviderFactory.getInstance(); 
providerFactory.registerProvider(org.jboss.resteasy.plugins.providers.multipart.MimeMultipartProvider.class); 
Powiązane problemy