Apache CXF + JavaFX Aucun initiateur de conduit n’a été trouvé pour l’espace de noms

Je vais exécuter un client JavaFX Rest en utilisant CXF. Un test très simple. Lorsque j’essaie d’obtenir une URL, j’obtiens l’exception org.apache.cxf.BusException: aucun initiateur de conduit n’a été trouvé pour l’espace de noms http://cxf.apache.org/transports/http . J’ai jeté un coup d’oeil à quelques questions connexes ici, mais pas de chance. Toute aide serait appréciée. Ensuite, seule la dépendance Maven que j’ai ajoutée était cxf-rt-rs-client 3.1.0 Le code est:

WebClient client = WebClient.create("http://www.stackoverflow.com"); client.type("text/html").accept("text/html"); System.out.println(client.get());

Trace de la stack:

 Caused by: org.apache.cxf.BusException: No conduit initiator was found for the namespace http://cxf.apache.org/transports/http. at org.apache.cxf.bus.managers.ConduitInitiatorManagerImpl.getConduitInitiator(ConduitInitiatorManagerImpl.java:110) at org.apache.cxf.endpoint.AbstractConduitSelector.getSelectedConduit(AbstractConduitSelector.java:104) at org.apache.cxf.endpoint.UpfrontConduitSelector.selectConduit(UpfrontConduitSelector.java:77) at org.apache.cxf.message.ExchangeImpl.getConduit(ExchangeImpl.java:159) at org.apache.cxf.interceptor.MessageSenderInterceptor.getConduit(MessageSenderInterceptor.java:71) at org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(MessageSenderInterceptor.java:46) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) at org.apache.cxf.jaxrs.client.AbstractClient.doRunInterceptorChain(AbstractClient.java:624) at org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1100) 

L’ombrage remplace le fichier bus-extension.txt. Par programme, vous pouvez le réparer en l’initialisant.

 void initializeCxf() { final Bus defaultBus = BusFactory.getDefaultBus(); final ConduitInitiatorManager extension = defaultBus.getExtension(ConduitInitiatorManager.class); extension.registerConduitInitiator("http://cxf.apache.org/transports/http", new HTTPTransportFactory()); } 

Sur la base du commentaire de @hba, vous pouvez également essayer de suivre si ce qui précède ne fonctionne pas

 extension.registerConduitInitiator("http://cxf.apache.org/transports/http", new HTTPTransportFactory(defaultBus)); 

Vous êtes d’accord avec vos dépendances Maven.

La construction du client est légèrement différente selon les guides CXF 3.x, où JAX-RS 2.0 est pris en charge.

Voir API client AX-RS 2.0 .

Essayez ce code:

  WebTarget target = ClientBuilder.newClient().target("http://stackoverflow.com/"); Response response = target.request().get(); System.out.println(response.getEntity().getClass().getName()); 

En utilisant ce code, vous apprendrez que l’entité de réponse est un stream d’entrée. Une séquence de caractères étant le contenu HTML de la page d’accueil de StackOverflow.

Si vous vous sentez aventureux et que je ne suis pas un charlatan, ajoutez la dépendance suivante à votre POM:

  org.apache.commons commons-io 1.3.2  

puis essayez ceci:

  WebTarget target = ClientBuilder.newClient().target("http://stackoverflow.com/"); System.out.println(IOUtils.toSsortingng((InputStream) target.request().get().getEntity(), "UTF-8")); 

Vous serez récompensé par un rendu textuel (sur la sortie standard) de la page d’accueil de StackOverflow – ce qui équivaut à effectuer une opération de type “vue source” dans votre navigateur.

Je ne sais pas quel est votre but ultime, mais si vous essayez de créer quelque chose d’utile à partir des informations du réseau StackExchange, je vous suggère d’utiliser leurs API documentées ici .

Bonne chance!

J’ai eu la même exception lors de l’utilisation du client Apache CXF REST dans un projet JavaFX. Le code est ci-dessous:

 MyClass rest = (MyClass) JAXRSClientFactory.create(endpoint, MyClass.class, Collections.singletonList(new JacksonJsonProvider())); System.out.println("Service health: " + rest.health()); 

Un test avec un projet Java simple fonctionne bien avec le même code et les mêmes dépendances. Il s’agit apparemment d’un conflit entre JavaFX et Apache CXF. J’essaie de comprendre pourquoi.

Si vous avez déjà résolu ce problème, cela devrait être génial de mettre à jour ce thread, qui est le seul résultat de la recherche Google.

Solution mise à jour: Après un certain temps, j’ai constaté que le projet Maven par défaut n’incluait pas suffisamment de dépendances dans le plug-in “maven-dependency-plugin”. J’ai essayé d’append d’autres paquets dans la liste mais je ne travaille toujours pas. Donc, la solution finale est dans ce thread: Comment empaqueter une application Apache CXF dans un JAR monolithique avec le plugin Maven “nuance” . Shade plugin est bien meilleur et fonctionne.