【问题标题】:Unsatisfied dependencies for type Set<Service> with qualifiers带有限定符的 Set<Service> 类型的不满足依赖关系
【发布时间】:2017-01-17 11:39:54
【问题描述】:

我是创建 Web 服务(Restful api)的新手。遵循用于 Restful Web 服务的 Java Brains 的简单教程。 我收到类似“带有限定符@Default 的类型 Set 的依赖项不满足”的错误

我在这里搜索了不同的问题,尝试了以下事情:

  1. 下载新服务器并将其连接到我的项目并删除旧服务器。
  2. 更新了 guava 依赖项并将其 jar 添加到我的项目中。

仍然面临错误。

以下是服务器错误日志。

严重:加载应用程序时出现异常:CDI 部署 失败:WELD-001408:Set 类型的依赖关系不满足 在注入点使用限定符 @Default [BackedAnnotatedParameter] [BackedAnnotatedConstructor]的参数1 @Inject com.google.common.util.concurrent.ServiceManager(Set) 在 com.google.common.util.concurrent.ServiceManager.(ServiceManager.java:0) org.jboss.weld.exceptions.DeploymentException:WELD-001408: 带有限定符的类型 Set 的不满足依赖关系 @Default at injection point [BackedAnnotatedParameter] 参数 1 [BackedAnnotatedConstructor] @Inject com.google.common.util.concurrent.ServiceManager(Set) 在 com.google.common.util.concurrent.ServiceManager.(ServiceManager.java:0)

这是提供数据的学生服务类。

public class StudentService {
    public List<Student> getAllData() {
        Student s1 = new Student(1, "Sagar", 20);
        Student s2 = new Student(2, "Puneet", 23);
        List<Student> list = new ArrayList<>();
        list.add(s1);
        list.add(s2);
        return list;
    }
}

下面是我的api类

@Path("/myfirstapi")
public class MyFirstAPI {
StudentService ss=new StudentService();
@GET
@Produces(MediaType.APPLICATION_XML)
public List<Student> gettext() {
    return ss.getAllData();
    }
}

【问题讨论】:

  • 没有更多信息,例如代码,很难给出任何建议。
  • @hotzst 代码已添加,如果您需要其他任何内容,请告诉我。我正在尝试创建一个基本的 api 示例,其中我使用 get 方法从 studentservice 类中获取数据。

标签: java rest netbeans dependency-injection


【解决方案1】:

此错误的原因通常是 Guava 版本错误。你可能有一个版本小于 16 的 Guava。你应该检查你的类路径。

我可以看到 2 个解决方案:

  • 如果您使用的是 CDI(您似乎没有使用),请将 Guava 版本更新为 >= 16。
  • 否则禁用 CDI(删除 beans.xml,如果存在于类路径中并禁用应用服务器中的隐式扫描)。

【讨论】:

  • 这对我有帮助。将我的 Guava 版本更新为 16。&lt;dependency&gt; &lt;groupId&gt;com.google.guava&lt;/groupId&gt; &lt;artifactId&gt;guava&lt;/artifactId&gt; &lt;version&gt;16.0&lt;/version&gt; &lt;/dependency&gt;
【解决方案2】:

可能您的网络服务器已经包含 guava 库并且没有任何问题。所以你需要的是防止你的番石榴库进入战争文件。有人说(Using Jersey 2.1 with CDI),那个

只需在 maven 中将 guava 依赖项设置为提供(或测试)即可解决问题。

我使用 gradle,所以我将依赖项放入 compileOnly 集合中:

compileOnly 'org.glassfish.jersey.core:jersey-client:2.0.1'

首先我跑gradle dependencies 来找出是什么在拉番石榴。最后我检查了我的战争以确认番石榴不再存在。

【讨论】:

  • 当然,这只有在您的本地部署服务器也已经包含依赖项的情况下才有效。否则它将在环境中工作,但在本地不起作用。
猜你喜欢
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 1970-01-01
  • 2017-08-28
相关资源
最近更新 更多