很多人都对此错误寻求帮助:
javax.naming.NamingException: Failed to create remoting connection [Root exception is java.lang.NoSuchMethodError: org.jboss.remoting3.Remoting.createEndpoint(Ljava/lang/String;Lorg/xnio/OptionMap;)Lorg/jboss/remoting3/Endpoint;]
at
org.jboss.naming.remote.client.ClientUtil.namingException(ClientUtil.java:51)
at
org.jboss.naming.remote.client.InitialContextFactory.getInitialContext(InitialContextFactory.java:152)
at
javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
...
但我找不到的任何请求都能提供一个确凿的答案。只是建议修补罐子。
我认为这是因为Jboss接口的结构存在不一致。任何人都可以确认或纠正吗?
这是我的代码抛出上述错误:
final private Properties env = new Properties() {
{put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
put(Context.PROVIDER_URL, "http-remoting://localhost:9990");
put(Context.SECURITY_PRINCIPAL, "myID");
put(Context.SECURITY_CREDENTIALS, "myPassword");
put("jboss.naming.client.ejb.context", true);
}
};
/****************************************************
* myID & myPassword open the Admin GUI for wildfly *
* on localhost:9990 *
****************************************************/
Context ctx = new InitialContext(this.env);
为了确定所需的罐子,我从Build路径中删除了所有罐子。 然后我运行我的程序直到所有ClassNotFoundException都消失了。
第一次错误
java.lang.ClassNotFoundException:
org.jboss.naming.remote.client.InitialContextFactory]
将jboss-remote-naming-1.0.7.final.jar添加到类路径
第二次错误
java.lang.NoClassDefFoundError:
org/jboss/logging/Logger
添加了jboss-logging.jar
第三次错误
java.lang.NoClassDefFoundError:
org/xnio/Options
添加了xnio-api-3.0.7.ga.jar
第四次错误
java.lang.NoClassDefFoundError:
org/jboss/remoting3/spi/ConnectionProviderFactory
添加了jboss-remoting-3.jar
第五次错误
java.lang.NoClassDefFoundError:
org/jboss/ejb/client/EJBClientContextIdentifier
添加了jboss-ejb-client-1.0.19.final.jar
最终和致命错误 (注意:所有NoClassDefFoundError都已清除)
java.lang.NoSuchMethodError: org.jboss.remoting3.Remoting.createEndpoint(Ljava/lang/String;Lorg/xnio/OptionMap;)Lorg/jboss/remoting3/Endpoint;]
使用Eclipse的Project Explorer我验证了:
一个。 jboss-remoting3.jar有org.jboss.remoting3.Remoting类。
湾Remoting Class有这个方法:
public Endpoint createEndpoint(String,Executor,OptionMap)
注意它需要3个参数。
但是上面的最终致命错误要求
public Endpoint createEndpoint(String,OptionMap)
注意:它需要2个参数。因此NoSuchMethodError。
我想,看看堆栈跟踪中的顶行 org.jboss.naming.remote.client.InitialContextFactory.getInitialContext()尝试使用2个参数调用org.jboss.remoting3.Remoting.createEndpoint(),但org.jboss.remoting3.Remoting仅定义了带有3的createEndpoint() -paramater签名。
这应该是可能的吗? 一个jar说它有org.jboss.remoting3包,其Remoting类有一个带有3参数签名的createEndpoint()方法,另一个jar说它有org.jboss.remoting3包,其Remoting类有另一个createEndpoint ()方法带有2参数签名?
HELP!
我的意思是我是否需要查看每个org.jboss.remoting3包以找到其Remoting类具有2参数createEnpoint()方法的包?
或者我错过了重要的事情。
我的意思是这确实解释了关于此错误发布的问题:
javax.naming.NamingException: Failed to create remoting connection [Root exception is java.lang.NoSuchMethodError: org.jboss.remoting3.Remoting.createEndpoint(Ljava/lang/String;Lorg/xnio/OptionMap;)Lorg/jboss/remoting3/Endpoint;]
并解释为什么除了摆弄罐子和构建路径之外,从来没有一个确凿的解释或解决方案。
我的意思是从WildFly获取一个InitialContext在同一台PC上运行,因为Java程序应该是一个简单的过程。但事实并非如此。也许这是因为API的不一致。
答案 0 :(得分:0)
感谢ChristophBöhme:
jboss-logging-3.1.4.GA.jar 有一个带有Remoting类的org.jboss.remeoting包,该类具有带有0,2和3参数签名的createEndpoint()。
用上面的jar替换 jboss-remoting-4.0.7.Final.jar 是清除NoSuchMethodError所需的全部内容。
希望能帮助他人。