2017-07-30 4 views
0

Beaucoup de gens ont demandé de l'aide avec cette erreur:Quelles sont les causes d'insaisissabilité: NoSuchMethodError: org.jboss.remoting3.Remoting.createEndpoint()?

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) 

... 

Mais aucune demande je peux trouver fournit jamais une réponse concluante. Juste des suggestions pour bricoler avec des pots. Je crois que c'est parce qu'il y a une incohérence dans la structure des interfaces JBoss. Quelqu'un peut-il confirmer ou corriger cela?

Voici mon code qui jette l'erreur ci-dessus:

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); 

Pour déterminer les pots nécessaires j'ai enlevé tous les pots de la voie de construction. Puis j'ai couru mon programme jusqu'à ce que toutes les ClassNotFoundException aient disparu.

Première erreur

java.lang.ClassNotFoundException: 
org.jboss.naming.remote.client.InitialContextFactory] 

Ajouté jboss-distance-nommage-1.0.7.final.jar pour chemin de classe

Deuxième erreur

java.lang.NoClassDefFoundError: 
org/jboss/logging/Logger 

Ajouté jboss-logging.jar

Troisième erreur

java.lang.NoClassDefFoundError: 
org/xnio/Options 

Ajouté xnio-api-3.0.7.ga.jar

Erreur Quatrième

java.lang.NoClassDefFoundError: 
org/jboss/remoting3/spi/ConnectionProviderFactory 

Ajouté jboss-Remoting-3.jar

Cinquième erreur

java.lang.NoClassDefFoundError: 
org/jboss/ejb/client/EJBClientContextIdentifier 

Ajouté jboss-ejb-client-1.0.19.final.jar

ERREUR FINAL ET MORTELLE (Note: Tous les NoClassDefFoundError ont été défrichées)

java.lang.NoSuchMethodError: org.jboss.remoting3.Remoting.createEndpoint(Ljava/lang/String;Lorg/xnio/OptionMap;)Lorg/jboss/remoting3/Endpoint;] 

Utilisation de l'Explorateur de projet Eclipse J'ai vérifié:

a. jboss-remoting3.jar a la classe org.jboss.remoting3.Remoting.

b. Cette classe Remoting a cette méthode:

publique Endpoint createEndpoint (String, Exécuteur, OptionMap)

Notez qu'il appelle à 3 paramètres.

mais l'erreur FINAL FATAL ci-dessus appelle à

publique Endpoint createEndpoint (String, OptionMap)

Note: il appelle à 2 paramètres. D'où le NoSuchMethodError.

En regardant les lignes supérieures dans la trace de pile, je pense org.jboss.naming.remote.client.InitialContextFactory.getInitialContext() tente d'appeler org.jboss.remoting3.Remoting.createEndpoint() en utilisant 2 paramètres , mais org.jboss.remoting3.Remoting ne définit que createEndpoint() avec une signature à 3 paramètres.

Est-ce que c'est même supposé être possible? Un jar qui indique qu'il a le paquet org.jboss.remoting3 dont la classe Remoting a une seule méthode createEndpoint() avec une signature à 3 paramètres, et un autre jar qui dit qu'il a le paquet org.jboss.remoting3 dont la classe Remoting a une autre Méthode createEndpoint() avec une signature à 2 paramètres?

AIDE!

Est-ce que j'ai besoin de regarder à travers chaque paquetage org.jboss.remoting3 pour en trouver un dont la classe Remoting a une méthode createEnpoint() à 2 paramètres?

Ou est-ce qu'il me manque quelque chose d'important?

Je veux dire cela n'explique le nombre de questions ont été écrit sur cette erreur:

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;] 

et expliquer pourquoi il n'y a jamais une explication concluante ou autre solution que de jongler avec des pots et construire chemin.

Je veux dire que l'obtention d'un InitialContext à partir de WildFly s'exécutant sur le même PC que le programme Java devrait être un processus trivial. Mais ça n'a pas été le cas. Peut-être que c'est à cause d'incohérences dans l'API.

+1

Habituellement ce genre de chose est causé par un problème de version. Vous appelez une méthode en version 1 mais en la compilant avec la version 2 de la bibliothèque. Ou dans ce cas, vous appelez le code dans jboss-ejb-client-1.0.19.final.jar qui attend une version 2010 de jboss-remoting-3.jar et vous utilisez une version 2017 de jboss-remoting -3.jar (ou quelque chose). Habituellement, il est préférable d'utiliser une nomenclature fournie par JBoss ou similaire, pour éviter ce genre de problème. [Voici quelques nomenclatures] (https://github.com/jboss-developer/jboss-eap-boms), peut-être conviendra-t-il à vos besoins? –

Répondre

0

Merci à Christoph Böhme:

jboss-logging-3.1.4.GA.jar a un paquet de org.jboss.remeoting à une classe d'accès à distance qui a createEndpoint() avec un 0, 2 et 3 signature de paramètre.

Remplacement jboss-remoting-4.0.7.Final.jar avec le fichier ci-dessus était tout ce qu'il fallait pour effacer le NoSuchMethodError.

Espérons que cela aide les autres.