<dependencies>
<!-- Java EE API -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
</dependency>
<!-- Jersey CDI support -->
<dependency>
<groupId>org.glassfish.jersey.ext.cdi</groupId>
<artifactId>jersey-cdi1x</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext.cdi</groupId>
<artifactId>jersey-cdi1x-ban-custom-hk2-binding</artifactId>
</dependency>
<!-- Logging dependencies -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
</dependencies>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>Backend</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!-- Disable Moxy JSON -->
<init-param>
<param-name>jersey.config.disableMoxyJson</param-name>
<param-value>true</param-value>
</init-param>
<!-- Register resource classes -->
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.test.Service</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Backend</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="all">
</beans>
service.java:
@Path("/")
@RequestScoped
public class Service {
@Inject
private DataProvider dataProvider;
@Path("test")
@GET
@Produces({MediaType.APPLICATION_JSON})
public Response test(){
return Response.ok(dataProvider.getArticles()).build();
}
}
sqlDataProvider.java:
@Default
@ApplicationScoped
@Singleton
@Path("singleton-bean")
public class SQLDataProvider implements DataProvider {
@Resource(name = "jdbc/db_1")
private DataSource dataSource;
private SQLQueryFactory factory;
@Override
public List<Article> getArticles() {
if(factory == null){
factory = new SQLQueryFactory(new Configuration(new MySQLTemplates()), dataSource);
}
QArtikel artikel = QArtikel.artikel;
List<String> names = factory.select(artikel.artikeltyp).from(artikel).fetch();
return names.stream().map(Article::new).collect(Collectors.toList());
}
}
如果在Glassfish服务器中部署此servlet并执行请求,将引发以下异常:
javax.servlet.ServletException: A MultiException has 3 exceptions. They are:
1. org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=DataProvider,parent=SkiBazaarService,qualifiers={},position=-1,optional=false,self=false,unqualified=null,158365417)
2. java.lang.IllegalArgumentException: While attempting to resolve the dependencies of org.skiclub.service.SkiBazaarService errors were found
3. java.lang.IllegalStateException: Unable to perform operation: resolve on org.skiclub.service.SkiBazaarService
private DataProvider dataProvider = new SQLDataProvider();
亲切地问候帕斯卡
请看这个问题:
在glassfish 4中,Recource注入不起作用,而查找起作用
尝试查找资源
的其他属性,如上述问题所建议的MappedName
。
@Resource(mappedName = "jdbc/db_1")
private DataSource dataSource;
我做了一个使用JAX-RS(RESTfull服务)的简单项目 我有一个JAX-RS(RESTfull service)webservice项目,它部署到JBoss6.1中。默认情况下,JBoss6.1提供了与JSON集成的resteasy。我想更改默认JSON资源的日期格式。 null 没有被调用,我仍然得到默认的JSON日期格式。 即使在pom.xml下添加以下依赖项也没有帮助: 有人知道为什么
问题内容: 我一直在尝试使用NetBeans Ide创建一个简单的Restful WebService。 我的Java EE版本是:Java EE 7 Web。 我创建了一个新的Java Web应用程序,设置此ContexPath: 。 现在,运行我的应用程序,浏览器在以下位置显示我的页面: 因此,一切正常。 然后,我尝试使用RESTful Web服务向导创建一个简单的Restful资源。 因此,
本章呈现 JAX-RS 核心概念-资源和子资源的概述。 JAX-RS 2.0 的 JavaDoc 文档 可以在这里 找到。 JAX-RS 2.0 规范草案可以在这里 找到。
前面的章节中已经给出注释类型的例子,主要用标注方法参数,也可以通过对类的域进行注解将值注入到这些类型。 本节介绍了在注释类型上注入值的规则。注入可以用在属性,构造函数参数,资源/子资源/子资源定位方法的参数和 bean setter方法。以下介绍的这些注入的情况下: Example 3.23. 注入 @Path("{id:\d+}") public class InjectedResource {
报表子资源 我使用Java EE7和Glassfish和WAS Liberty配置文件的经验是,没有注入ReportService rs实例,使rs为空并导致NPE。 我的假设是,因为resource类正在执行“new ReportsResource()”,所以CDI对ReportsResource实例没有可见性,因此ReportsResource不是容器管理的。这似乎与这个问题相同,当通过Res
资源方法中,带有基于参数注解的参数可以从请求中获取信息。前面的一个例子就是在匹配了 @Path 之后,通过 @PathParam 来获取 URL 请求中的路径参数。 @QueryParam 用于从请求 URL 的查询组件中提取查询参数。下面的例子: Example 3.8. 查询参数 @Path("smooth") @GET public Response smooth( @Default