2010-03-11 3 views
6

У меня есть этот интерфейс:не смог найти 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; 
} 

Я реализован метод, чтобы вернуть MultipartOutput. Я отправляю xml-запрос от Fiddler, и я получаю результат без каких-либо проблем.

НО я сделал тест интеграции на тот же интерфейс, я посылаю те же объекты и я поставил ответ вроде:

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

Но здесь, так что от интеграционных тестов, я получаю странное сообщение об ошибке:

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

У любого человека есть идеи, почему только в тестах интеграции я получаю эту ошибку?

PS: Некоторые из вас скажут, что я не отправляю приложение/xml в качестве ContentType, но multipart, что, конечно, неверно, потому что объекты аннотируются с помощью требуемого @XmlRootElement и так далее, иначе ни POST из Fiddler не будет работать.

ответ

-1

Попробуйте добавить этот метод в свой тестовый класс. Это позволит зарегистрировать встроенные поставщики по умолчанию, которые уже зарегистрированы на вашем сервере.

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

Еще не работает ... –

+0

'RegisterBuiltin.register (providerFactory)' будет вызываться по умолчанию во время 'ResteasyProviderFactory.getInstance()' invoсation –

0

Включаются ли в classpath соответствующие дополнения для многопроходного кодирования? (Esteasy-многочастному-провайдер).

+0

Привет. Да, они. –

+0

В клиенте classpath тоже? Я считаю, что ошибка связана с тем, что у прокси-сервера restuasy клиента нет зарегистрированного MessageBodyReader, который может обрабатывать multipart/mixed. Если вы используете resteasy 1.2 или superior, то достаточно включить в путь клиента classpath предыдущую упомянутую банку, в случае версии resteasy <1.2, тогда вы должны сделать, как Chandru пишет в коде клиента. Для ваших интеграционных тестов вы используете две отдельные виртуальные машины, или вы запускаете клиент и сервер в одном и том же? –

1

Вы можете попробовать это:

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