从@Named转移到自定义限定符会导致NPE

时间:2016-06-11 22:50:36

标签: java-ee jax-rs cdi

我有一个非常简单的JAX-RS服务:

@Path("/test")
public class Service {

    @Inject
    @Message
    String thingie;

    @GET
    public String test(){
        return thingie;
    }
}

该字符串来自@Produces注释方法:

public class Producer {
    @Produces
    @Message
    public String thingie(){
        return "thingie";
    }
}

@Message限定符如下所示:

@Qualifier
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface Message {
}

为了完整起见,我的其他代码是JAX-RS Activator类:

@ApplicationPath("/rest")
public class JAXRSActivator extends Application {
}

还有一个空的beans.xml。我使用的应用服务器是Wildfly 10.0.10。

当我对/ rest / test进行GET时,我得到500的响应,其内容类型为plain / text,文本为" java.lang.NullPointerException"。但是日志或消息中没有进一步的信息(特别是NPE来自的位置)。

我的生产者方法被调用,但Service类中的test()方法没有。

使用@Named(" message")而不是@Message工作正常,所以我错过了什么?

1 个答案:

答案 0 :(得分:2)

tldr;将@Message放在一个包中。

所以,正如你可能猜到的那样,这是一个测试内容的玩具示例,我把它全部放在默认包中。

Hibernate验证器不会处理默认包中的注释,因为它假定会有一个包。