问题描述
为长篇文章道歉。不知道什么时候太多了。问题是在 Jersey REST servlet 上没有发生依赖注入。根据产品设计师的要求使用嵌入式 Jetty 和 REST。 这是我拥有的一些代码:
AppServer.java
Configuration.ClassList classList = Configuration.ClassList.setServerDefault(server);
classList.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration","org.eclipse.jetty.plus.webapp.EnvConfiguration","org.eclipse.jetty.plus.webapp.PlusConfiguration");
classList.addBefore("org.eclipse.jetty.webapp.JettyWebXmlConfiguration","org.eclipse.jetty.annotations.AnnotationConfiguration");
ServletContextHandler servletCtx = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletCtx.setcontextpath("/rest/v1");
ServletHolder jerseyServlet = servletCtx.addServlet(
org.glassfish.jersey.servlet.ServletContainer.class,"/*");
jerseyServlet.setinitOrder(0);
jerseyServlet.setinitParameter(
"jersey.config.server.provider.classnames",MbiResource.class.getCanonicalName());
WebAppContext webAppCtx = new WebAppContext();
webAppCtx.setResourceBase("webapp");
webAppCtx.setcontextpath("/");
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[]{servletCtx,webAppCtx,new DefaultHandler()});
server.setHandler(handlers);
RestResource.java
import org.apache.tomcat.jdbc.pool.DataSource;
import javax.annotation.Resource;
import javax.json.JsonObject;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("mbi")
@Consumes({MediaType.TEXT_PLAIN,MediaType.APPLICATION_JSON})
@Produces({MediaType.TEXT_PLAIN,MediaType.APPLICATION_JSON})
public class MbiResource {
**//this does not work**
@Resource(mappedname = "jdbc/warehouse-datasource")
DataSource dataSource;
@GET
public String get(){
**//this does work**
try{
InitialContext ic = new InitialContext();
dataSource = (DataSource) ic.lookup("jdbc/warehouse-datasource");
return dataSource.toString();
}catch (Exception ex){
return ex.getMessage();
}
}
}
POM(所有依赖的原因是强制同一个版本)
<jetty.version>9.4.35.v20201120</jetty.version>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-annotations</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-http</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jndi</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jsp</artifactId>
<version>9.2.30.v20200428</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-plus</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>9.0</version>
</dependency>
这些是我用来研究这个问题的一些参考资料。
https://www.eclipse.org/jetty/documentation/jetty-9/index.html#advanced-embedding
How to embed Jetty and Jersey into my Java application
Embedded Jetty does not find Annotated Servlet
Jersey jdbc @resource not working
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)