Can be combined: jersey + berth + spring

I am trying to create a web server that embeds a jetty (rather than Java EE) and will draw my servlets RESTfully using knitwear.
I use spring to inject dependencies and map servlets as beans. However, when I try to do HTTP req for connected servlets, I get an error with a 500 server error, or 404, page not found.
I'm not sure if I am doing this correctly, and I should probably use jetty.xml, not that. (I wonder if there is a shorcut using jetty.xml)

 <bean id="contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"> </bean> <bean id="server" class="org.mortbay.jetty.spring.Server" init-method="start" destroy-method="stop"> <property name="threadPool"> <bean id="ThreadPool" class="org.eclipse.jetty.util.thread.QueuedThreadPool"> <property name="minThreads" value="10" /> <property name="maxThreads" value="50" /> </bean> </property> <property name="connectors"> <list> <bean id="Connector" class="org.eclipse.jetty.server.nio.SelectChannelConnector"> <property name="port" value="8080" /> </bean> </list> </property> <property name="handler"> <bean id="handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"> <property name="handlers"> <list> <ref bean="contexts" /> <bean class="org.eclipse.jetty.server.handler.ResourceHandler"> <property name="directoriesListed" value="true" /> <property name="welcomeFiles"> <list> <value>index.jsp</value> </list> </property> <property name="resourceBase" value="./WebContent" /> </bean> <bean id="myServletHandler" class="org.eclipse.jetty.servlet.ServletHandler"> <property name="servlets"> <list> <bean id="jerseyServletContainer" class="org.eclipse.jetty.servlet.ServletHolder"> <property name="name" value="jersey" /> <property name="servlet"> <bean class="com.sun.jersey.spi.container.servlet.ServletContainer" /> </property> <property name="initParameters"> <map> <entry key="com.sun.jersey.config.property.resourceConfigClass" value="com.sun.jersey.api.core.PackagesResourceConfig" /> <entry key="com.sun.jersey.config.property.packages" value="servlets" /> </map> </property> </bean> </list> </property> <property name="servletMappings"> <list> <bean id="jerseyMapping" class="org.eclipse.jetty.servlet.ServletMapping"> <property name="servletName" value="jersey" /> <property name="pathSpec" value="/*" /> </bean> </list> </property> </bean> </list> </property> </bean> </property> <property name="beans"> <list> <bean id="ContextDeployer" class="org.eclipse.jetty.deploy.ContextDeployer"> <property name="contexts" ref="contexts" /> <property name="directory" value="contexts" /> <property name="scanInterval" value="5" /> </bean> </list> </property> </bean> 

code>

I have one class in the servlet package: DoNothing.java

 package servlets; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @Path("/nothing") public class doNothing { @GET @Produces("text/plain") public String returnNothing() { return ("test"); } } 

What am I doing wrong in the world? or should I ask what in the world am I doing right?

thanks

+6
java spring jersey embedded-jetty
source share
1 answer

I was looking for a way to use Jersey + Spring + Embedded Jetty and found this question. I tried your method and it really works.

If you really want to use Spring beans in your resources, you can use jersey-spring:

 <bean id="server" class="org.mortbay.jetty.Server" destroy-method="stop"> <property name="connectors"> <list> <bean id="Connector" class="org.mortbay.jetty.nio.SelectChannelConnector"> <property name="port" value="8080"/> </bean> </list> </property> <property name="handlers"> <list> <bean class="org.mortbay.jetty.servlet.Context"> <property name="contextPath" value="/"/> <property name="sessionHandler"> <bean class="org.mortbay.jetty.servlet.SessionHandler" /> </property> <property name="servletHandler"> <bean class="org.mortbay.jetty.servlet.ServletHandler"> <property name="servlets"> <list> <bean class="org.mortbay.jetty.servlet.ServletHolder"> <property name="name" value="jersey" /> <property name="servlet"> <bean class="com.sun.jersey.spi.spring.container.servlet.SpringServlet" /> </property> <property name="initParameters"> <map> <entry key="com.sun.jersey.spi.container.ContainerRequestFilters" value="com.sun.jersey.api.container.filter.LoggingFilter" /> <entry key="com.sun.jersey.spi.container.ContainerResponseFilters" value="com.sun.jersey.api.container.filter.LoggingFilter" /> </map> </property> </bean> </list> </property> <property name="servletMappings"> <list> <bean class="org.mortbay.jetty.servlet.ServletMapping"> <property name="servletName" value="jersey"/> <property name="pathSpecs"> <list> <value>/*</value> </list> </property> </bean> </list> </property> </bean> </property> <property name="eventListeners"> <list> <bean id="requestContextListener" class="org.springframework.web.context.request.RequestContextListener"/> <bean id="contextLoaderListener" class="org.springframework.web.context.ContextLoaderListener"/> </list> </property> <property name="initParams"> <map> <entry key="contextConfigLocation" value="classpath:META-INF/AdditionalBeansContext.xml"/> </map> </property> </bean><!-- --></list> </property> </bean> 

In the AdditionalBeansContext.xml file:

Then define your resources using the @Component annotation introduced by beans using @Autowired

+1
source share

All Articles