Google Guice and Jersey - JAXB не может обрабатывать интерфейсы Ошибка - PullRequest
1 голос
/ 07 октября 2011

Я использую Google Guice с Джерси (jax-rs).Следующий метод генерирует исключение JAXB (JAXB не может обрабатывать интерфейсы), если я его вызываю:

@POST
public void addUser(UserTO user){
}

UserTO - это интерфейс, но в Guice я связал его с реализацией:

bind(UserTO.class).to(DefaultUserTO.class);

Я думал, что Guice должен справиться с этим.Но, может быть, что-то в моем запуске сервера не так:

    Injector injector =
      Guice.createInjector(new GuiceServerModule(),
                           new JerseyServletModule() {
              @Override
              protected void configureServlets() { 
                  // Route all requests through GuiceContainer
                  serve("/*").with(GuiceContainer.class);
              }
      });

    // Create the server.
    Server server = new Server(12345);

    // Create a servlet context and add the jersey servlet.
    ServletContextHandler sch = new ServletContextHandler(server, "/");

    // Add our Guice listener that includes our bindings 
    sch.addEventListener(new GuiceServletConfig(injector));

    // Then add GuiceFilter and configure the server to 
    // reroute all requests through this filter. 
    sch.addFilter(GuiceFilter.class, "/*", null);

    // Must add DefaultServlet for embedded Jetty. 
    // Failing to do this will cause 404 errors.
    // This is not needed if web.xml is used instead.
     sch.addServlet(DefaultServlet.class, "/");

    // Start the server
    server.start();

   // Wait until server shut down
   server.join();

Или мне нужно использовать только реализацию?

1 Ответ

2 голосов
/ 24 января 2012

Вам нужно использовать конкретный класс.Guice здесь нет в игре.Пользовательский экземпляр создан Джерси с использованием JAXB.Guice (или любая другая структура DI) ничего не может сделать.Вы также должны удалить привязку для UserTO.В общем, я бы сказал, что не очень хорошая идея иметь инфраструктуру DI для управления объектами, представляющими данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...