在我的webproject中使用tomee,openejb和jackson(在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):
所有这些应该是最新版本。
答案 0 :(得分:1)
在这种情况下的问题是该方法是通用的,java编译器生成一个合成方法,所以当cxf在你的类上调用getMethod时,它会看到两个'create'方法,一个是合成的,但无论如何,资源方法将被注册两次。
这是CXF中的一个错误。 CXF-7670