当前位置: 首页 > 知识库问答 >
问题:

@Inject无法初始化对象

曾皓
2023-03-14

我正在使用tomee服务器运行我的javaEE应用程序。我写了一个过滤器,它注入一个对象。但是,该对象似乎没有被实例化:

以下是我的代码:

Filter.java

@Priority(value = 2)
@Provider
@Singleton
public class Filter implements ContainerRequestFilter {


     @Inject
     private Faculty faculty;


     public void filter(ContainerRequestContext requestContext) {
         System.out.println("faculty name is :"+faculty.getFacultyName());
     }
}

Faculty.java

import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;

public class Faculty {

    private List<String> facultyMembers;
    private String facultyName;

    @PostConstruct
    public void initialize() {
        this.facultyMembers = new ArrayList<String>();
        facultyMembers.add("Ian Schultz");
        facultyMembers.add("Diane Reyes");
        facultyName = "Computer Science";
    }

    public List<String> getFacultyMembers() {
        return facultyMembers;
    }

    public String getFacultyName() {
        return facultyName;
    }
}

我得到了一个NPE。以下是堆栈跟踪:

java.lang.NullPointerException
at com.xyz.commerceapp.filters.Filter.filter(TransactionStartFilter.java:45)
at org.apache.cxf.jaxrs.utils.JAXRSUtils.runContainerRequestFilters(JAXRSUtils.java:1645)
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:201)
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:77)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)

下面是正在使用的工件的版本:

<openejb.version>5.0.0-SNAPSHOT</openejb.version>
<tomee.version>2.0.0-SNAPSHOT</tomee.version>

我已经尝试在META-INF和WEB-INF中包含beans.xml,但我仍然看到NPE.Can有人让我知道我做错了什么?

共有3个答案

甄德寿
2023-03-14

确保您的存档(jar、war等)有一个bean。xml文件已定义

bean.xml文件称为bean归档描述符。您可以在下面找到最简单的示例,其中包含根bean xml元素:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
      http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>

此文件应放在META-INF/beans.xml或WEB-INF/beans.xml中。如果您不将此文件包含在模块档案中,CDI注入将不会对该档案起作用,因为容器不会扫描该档案。

规范以这种方式完成的原因有几个:

> < li>

性能:容器只需扫描添加了beans.xml的模块

豆。xml还允许您定义在注入发生时必须执行的拦截器和装饰器。

礼貌:解决@Inject NullPointerException

宰子琪
2023-03-14

请查看您的导入,它不应从任何其他库导入优先级。正确的方法是:导入javax.annotation.Priority;

姬念
2023-03-14

一旦我将@Singleton更改为@Application Scoped,注入就起作用了。

 类似资料:
  • 我有一个使用MIP SDK的Azure函数,当调用< code>MIP时,我得到以下错误。CreateMipContext(...): 令人惊讶的是,该错误仅在 Azure 上运行时发生。在本地运行时,一切都很好。 我正在使用MIP SDK v1.8.86和.NET Core 3.1。 知道OneDS是什么或者是什么导致了错误吗?

  • 新CONF:我做了一些改变来配合你所说的。现在我删除了hibernate-cfg.xml并在spring-servlet.xml中做了所有的conf: 它可能来自我的java文件吗? 错误是: Bean 类 [org.springframework.orm.hibernate4.LocalSessionFactoryBean] 的属性 'transaction' 无效:Bean 属性 'trans

  • 初始化动画类型的对象时,会收到以下警告。 (警告添加为注释) 这是一张照片 以下是代码摘要: 这是我尝试编译后的日志猫 这里是我使用错误代码的地方 列表视图1。setOnItemClickListener(新的AdapterView.OnItemClickListener(){ 我找不到错误。 我创建了正确的文件夹和文件。在这里。 这是我得到我正在使用的动画代码的地方。 试图创建一个文件夹。收到这

  • 当我在iReport 5.1.0中预览JasperReports的报告时,它执行得很好。它包含一个饼图,当我需要从jsp文件运行它时,问题就来了。 烧烤-1.5-beta1.jar commons-beanutils-1.8.2.jar Commons-Collections-3.2.1.jar commons-digester-2.1.jar commons-javaflow-20060411.

  • 我用Xcode开发了一个“Hello iOS”应用程序,可以在iOS模拟器上用Appium进行测试。然而,当我试图在真正的iPhone/iPad设备上测试同一个应用程序时,我收到了以下错误消息。 这是我的环境。 我尝试了这个命令“brew安装--HEAD ideviceInster”,但得到了另一条错误消息。 有什么解决办法吗?谢谢

  • 问题内容: 是我自己的一类。该类与主类位于同一JAR文件中。因此,这不应该是因为classpath中缺少任何JAR。 当我通过查阅JAR文件时,可以看到其中列出的内容。 顺便说一句:代码在我的本地计算机上运行良好。但是当我将其与某些脚本一起部署到Linux服务器上时无法工作。所以我认为这不是代码的问题。但是出于某种原因。部署过程很难跟踪。 可能是什么问题呢? 问题答案: 我最好的选择是这里有一个问