我有一个非常简单的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工作正常,所以我错过了什么?
答案 0 :(得分:2)
tldr;将@Message放在一个包中。
所以,正如你可能猜到的那样,这是一个测试内容的玩具示例,我把它全部放在默认包中。
Hibernate验证器不会处理默认包中的注释,因为它假定会有一个包。