JAXRS 包括抽象方法作为请求的候选方法



在我的使用tomee,openejb和jackson的web项目中(在下面列出了一些其他的东西,如hibernate,最重要的依赖项(我遇到了一个我无法解决的问题。

具有如下结构:

public abstract class AbstractCrud<E extends AbstractEntity>{
[...]
public abstract ResultWrapper<E> create (E entity);
[...]
}
@Path("/path")
@Consumes("application/json")
@Produces("application/json")
public class ImplementingClass extends AbstractCrud<ImplementingEntity>{
@PUT
@Override
public ResultWrapper<ImplementingEntity> create(final ImplementingEntity entity){
//Some Code
}
}

我收到此警告:Both package.ImplementingClass#create and package.ImplementingClass#create are equal candidates for handling the current request which can lead to unpredictable results

后跟此异常:

Cannot construct instance of `package.AbstractEntity` (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
at [...]


我最好的猜测是注释扫描器不会过滤桥接方法,因此使用抽象类的方法(当然(无法实例化。我已经搜索了如何从扫描程序(或完成类(中排除方法,但没有找到任何内容。
所以我的问题是:我可以从扫描程序中排除类或方法吗,如果没有,我还能做些什么来防止这种情况发生?


依赖关系(使用 Java 8(:

  • Jackson-Jaxrs-JSON-provider:2.9.0
  • 休眠核心:5.2.10.最终版
  • javaee-api: 7.0
  • CDI-API:2.0
  • Openejb-core: 7.0.3
  • Openejb-CXF-RS: 7.0.3
  • CXF-RT-frontend-JAXRS: 3.1.12
  • 多米:7.0.3
  • ASM5 阴影(通过第三方引用(
  • 大约 20 多个...

所有这些都应该是最新版本。

在这种情况下,问题是该方法是泛型的,java编译器生成一个合成方法,因此当cxf在你的类上调用getMethod时,它会看到两个"create"方法,一个是合成的,但无论如何,该资源方法将被注册两次。

这是 CXF 中的一个错误。CXF-7670

最新更新