Библиотека Java для веб-служб, которая хорошо интегрируется с Jetty и Guice?


Я обнаружил, что существует ряд библиотек Java для выполнения веб-служб (либо XML-RPC, либо SOAP), которые, по-видимому, хорошо интегрируются с EJB. Т. е.: контейнер, который обрабатывает генерацию динамического кода, необходимого для обработки сервлета веб-служб, несколько автоматически настраивается контейнером servlet / E.

Теперь мне интересно, знает ли кто-нибудь библиотеку Java, чтобы сделать то же самое с простой старой пристанью и Guice. Я действительно хочу найти хорошую библиотеку, которая требует минимальных строительных лесов для работы. ну, в простом старом контейнере сервлета (возможно, с guice).

2 2

2 ответа:

Вы можете использовать jetty plus guice plus jersey в качестве платформы.

Для этого необходимо создать класс Bootstrap с помощью метода main. В основном методе configure jetty
Server server = new Server(port);
Context root = new Context(server, "/", Context.SESSIONS);
root.addEventListener(new GuiceServletConfig());
root.addFilter(GuiceFilter.class, "/*", 0);

GuiceConfiguration отвечает за конфигурацию jersey

public class GuiceConfiguration extends GuiceServletContextListener {
    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new ServletModule() {
            @Override
            protected void configureServlets() {
                install(new RestServicesModule());    


                bind(MessageBodyReader.class).to(JacksonJsonProvider.class);
                bind(MessageBodyWriter.class).to(JacksonJsonProvider.class);

                serve("*").with(GuiceContainer.class, ImmutableMap.of("com.sun.jersey.config.feature.Trace",
                                "true"));
            }
        });
    }
}

Далее вы должны создать свои службы rest и связать их в RestServicesModule.

Например, вы можете создать HelloWorld сервис:

@Path("/hello")
public class HelloWorld {

    @GET
    @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    @Path("{name}")
    public Person showPerson(@PathParam("name") String name) {
        return new Person(name);
    }

}
А человек-это простое POJO.
@XmlRootElement
public static class Person {
    private String name;

    public Person() {
    }

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Последним шагом является регистрация сервиса в RestServicesModule

class RestServicesModule extends AbstractModule {
    protected void configure() {
       bind(HelloWorld.class);
    }
}

Apache CXF может быть тем, что вы ищете. Он может работать в стандартном веб-контейнере и позволяет создавать как SOAP-стиль, так и службы REST.