一个用于Web服务的Java库,它与Jetty和Guice很好地集成在一起?

ben*_*rre 2 java soap servlets guice

我发现有许多用于执行Web服务(XML-RPC或SOAP)的Java库似乎可以很好地与EJB集成.IE:处理Web服务servlet所需的动态代码生成的容器在某种程度上由servlet/e容器自动设置.

现在我想知道是否有人知道Java库与普通的旧Jetty和Guice一样.我真的想找到一个好的库,需要最少的脚手架才能在普通的旧servlet容器中运行(可能带有guice).

Mai*_*kov 5

您可以使用jettyplus guiceplus jersey作为您的平台.

要做到这一点,你必须Bootstrapmain方法创建一个类.在main方法configure中jetty

Server server = new Server(port);
Context root = new Context(server, "/", Context.SESSIONS);
root.addEventListener(new GuiceServletConfig());
root.addFilter(GuiceFilter.class, "/*", 0);
Run Code Online (Sandbox Code Playgroud)

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"));
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

接下来,您必须创建您的休息服务并将其绑定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);
    }

}
Run Code Online (Sandbox Code Playgroud)

一个人是一个简单的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

最后一步是注册服务 RestServicesModule

class RestServicesModule extends AbstractModule {
    protected void configure() {
       bind(HelloWorld.class);
    }
}
Run Code Online (Sandbox Code Playgroud)