Java org.jboss.classfilewriter.DuplicateMemberException

Java org.jboss.classfilewriter.DuplicateMemberException,java,deployment,wildfly,cdi,weld,Java,Deployment,Wildfly,Cdi,Weld,在Wildfly上部署应用程序时,出现以下错误: 17:28:25,571 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC000001: Failed to start service jboss.deployment.unit."Restaurant-1.1-SNAPSHOT.war".WeldStartService: org.jboss.msc.service.StartException in service

在Wildfly上部署应用程序时,出现以下错误:

17:28:25,571 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC000001: Failed to start service jboss.deployment.unit."Restaurant-1.1-SNAPSHOT.war".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."Restaurant-1.1-SNAPSHOT.war".WeldStartService: Failed to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.jboss.weld.exceptions.WeldException: WELD-001524: Unable to load proxy class for bean Managed Bean [class com.naigoapps.restaurant.model.dao.RestaurantTableDao] with qualifiers [@Any @Default] with class class com.naigoapps.restaurant.model.dao.RestaurantTableDao using classloader ModuleClassLoader for Module "deployment.Restaurant-1.1-SNAPSHOT.war:main" from Service Module Loader
at org.jboss.weld.bean.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:371)
at org.jboss.weld.injection.producer.SubclassedComponentInstantiator.createEnhancedSubclass(SubclassedComponentInstantiator.java:114)
at org.jboss.weld.injection.producer.SubclassedComponentInstantiator.initEnhancedSubclass(SubclassedComponentInstantiator.java:86)
at org.jboss.weld.injection.producer.SubclassedComponentInstantiator.<init>(SubclassedComponentInstantiator.java:79)
at org.jboss.weld.injection.producer.SubclassedComponentInstantiator.forInterceptedDecoratedBean(SubclassedComponentInstantiator.java:63)
at org.jboss.weld.injection.producer.BeanInjectionTarget.initializeAfterBeanDiscovery(BeanInjectionTarget.java:121)
at org.jboss.weld.injection.producer.InjectionTargetInitializationContext.initialize(InjectionTargetInitializationContext.java:42)
at org.jboss.weld.injection.producer.InjectionTargetService.initialize(InjectionTargetService.java:63)
at org.jboss.weld.bootstrap.WeldStartup.deployBeans(WeldStartup.java:433)
at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:83)
at org.jboss.as.weld.WeldStartService.start(WeldStartService.java:95)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
... 3 more
Caused by: org.jboss.weld.exceptions.WeldException: Method  already exists. Method: getTargetClass Parameters:[] Return Type: Ljava/lang/Class;
at org.jboss.weld.bean.proxy.InterceptedSubclassFactory.addSpecialMethods(InterceptedSubclassFactory.java:386)
at org.jboss.weld.bean.proxy.InterceptedSubclassFactory.addMethods(InterceptedSubclassFactory.java:116)
at org.jboss.weld.bean.proxy.ProxyFactory.createProxyClass(ProxyFactory.java:469)
at org.jboss.weld.bean.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:364)
... 15 more
Caused by: org.jboss.classfilewriter.DuplicateMemberException: Method  already exists. Method: getTargetClass Parameters:[] Return Type: Ljava/lang/Class;
at org.jboss.classfilewriter.ClassFile.addMethod(ClassFile.java:133)
at org.jboss.classfilewriter.ClassFile.addMethod(ClassFile.java:148)
at org.jboss.weld.bean.proxy.InterceptedSubclassFactory.addSpecialMethods(InterceptedSubclassFactory.java:378)
... 18 more
17:28:25571错误[org.jboss.msc.service.fail](msc服务线程1-3)MSC000001:无法启动服务jboss.deployment.unit.“Restaurant-1.1-SNAPSHOT.war”。WeldStartService:org.jboss.msc.service.StartException in service jboss.deployment.unit.“Restaurant-1.1-SNAPSHOT.war”。WeldStartService:无法启动服务
位于org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
运行(Thread.java:748)
原因:org.jboss.weld.exceptions.WeldException:weld-001524:无法为bean管理的bean[class com.naigoapps.restaurant.model.dao.RestaurantTableDao]加载代理类,该bean具有限定符[@Any@Default],类class com.naigoapps.restaurant.model.dao.RestaurantTableDao使用模块的classloader ModuleClassLoader服务模块加载器中的“deployment.Restaurant-1.1-SNAPSHOT.war:main”
位于org.jboss.weld.bean.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:371)
位于org.jboss.weld.injection.producer.SubassedComponentInstator.createEnhancedSubclass(subassedComponentInstator.java:114)
位于org.jboss.weld.injection.producer.subassedComponentInstator.initEnhancedSubclass(subassedComponentInstator.java:86)
位于org.jboss.weld.injection.producer.SubassedComponentInstator。(subassedComponentInstator.java:79)
位于org.jboss.weld.injection.producer.subassedComponentInstator.forInterceptedDecoratedBean(subassedComponentInstator.java:63)
在org.jboss.weld.injection.producer.BeanInjectionTarget.initializeAfterBeanDiscovery(BeanInjectionTarget.java:121)上
位于org.jboss.weld.injection.producer.InjectionTargetInitializationContext.initialize(InjectionTargetInitializationContext.java:42)
位于org.jboss.weld.injection.producer.InjectionTargetService.initialize(InjectionTargetService.java:63)
在org.jboss.weld.bootstrap.WeldStartup.deployBeans上(WeldStartup.java:433)
位于org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:83)
位于org.jboss.as.weld.WeldStartService.start(WeldStartService.java:95)
位于org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
位于org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
…还有3个
原因:org.jboss.weld.exceptions.WeldException:方法已存在。方法:getTargetClass参数:[]返回类型:Ljava/lang/Class;
在org.jboss.weld.bean.proxy.InterceptedSubclassFactory.addSpecialMethods上(InterceptedSubclassFactory.java:386)
在org.jboss.weld.bean.proxy.InterceptedSubclassFactory.addMethods(InterceptedSubclassFactory.java:116)
位于org.jboss.weld.bean.proxy.ProxyFactory.createProxyClass(ProxyFactory.java:469)
位于org.jboss.weld.bean.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:364)
…还有15个
原因:org.jboss.classfilewriter.DuplicateMemberException:方法已存在。方法:getTargetClass参数:[]返回类型:Ljava/lang/Class;
位于org.jboss.classfilewriter.ClassFile.addMethod(ClassFile.java:133)
位于org.jboss.classfilewriter.ClassFile.addMethod(ClassFile.java:148)
在org.jboss.weld.bean.proxy.InterceptedSubclassFactory.addSpecialMethods上(InterceptedSubclassFactory.java:378)
…还有18个
以下是我的源文件:

public interface Dao<E extends BaseEntity> {

    public Class<E> getTargetClass();
    public String getOrderByClause();

}


public abstract class AbstractDao<E extends BaseEntity> implements Dao<E>{

    [...]

    @Override
    public String getOrderByClause() {
        return null;
    }

}


public class RestaurantTableDao extends AbstractDao<RestaurantTable>{

    @Override
    public String getOrderByClause() {
        return "name";
    }

    @Override
    public Class<RestaurantTable> getTargetClass() {
        return RestaurantTable.class;
    }
公共接口Dao{
公共类getTargetClass();
公共字符串getOrderByClause();
}
公共抽象类AbstractDao实现了Dao{
[...]
@凌驾
公共字符串getOrderByClause(){
返回null;
}
}
公共类RestaurantTableDao扩展了AbstractDao{
@凌驾
公共字符串getOrderByClause(){
返回“名称”;
}
@凌驾
公共类getTargetClass(){
返回restaurantable.class;
}
}

抽象类和接口中定义的方法似乎存在一些问题。 在添加两个方法getOrderByClause和getTargetClass之前,问题没有出现

这是巧合(或命运?),Weld的define
getTargetClass()方法也具有相同的签名,考虑到类型擦除

因此,正如例外情况所说:

org.jboss.weld.exceptions.WeldException: 
Method  already exists.
Method: getTargetClass Parameters:[] Return Type: Ljava/lang/Class;
…因为这就是Weld的工作原理,所以最安全、最简单、最快捷的方法就是重命名您的方法

奖金:
如果你想知道什么是该死的代理,下面是Stuart Douglas关于Weld的简短介绍,虽然很老了,但仍然有道理。

我认为问题与继承或类似的东西有关……我只是选择了错误的方法名称,真是巧合!