web-dev-qa-db-fra.com

CXF 2.4.2: no initiateur de conduite a été trouvé pour l'espace-noms http://schemas.xmlsoap.org/soap/http

J'ai un client de service généré à partir de WSDL. J'essaie d'appeler le service distant et je reçois l'erreur de l'initiateur de conduit vue ci-dessous. J'ai essayé de nombreuses solutions sans succès. 

J'ai trouvé des solutions (anciens posts) qui recommandent d'utiliser les extensions http-jetty . Je ne crois pas que cela ait du sens pour moi car le serveur ne tourne pas localement. 

J'ai également trouvé que la configuration la plus proche qui m'aide est un exemple cxf.xml fichier qui contient:

<bean class="org.Apache.cxf.transport.local.LocalTransportFactory"
    lazy-init="false">
    <property name="transportIds">
        <list>
            <value>http://cxf.Apache.org/transports/local</value>
            <value>http://cxf.Apache.org/transports/http</value>
            <value>http://schemas.xmlsoap.org/soap/http</value>
            <value>http://schemas.xmlsoap.org/wsdl/soap/http</value>
        </list>
    </property>
</bean>

Cette configuration indique comment configurer une fabrique de transport et la lier à http://schemas.xmlsoap.org/soap/http . Lorsque j'essaie cela avec HTTPTransportFactory , je reçois une exception selon laquelle il ne peut pas être initialisé (aucune erreur de méthode de ce type).

Caused by: org.Apache.cxf.BusException: No conduit initiator was found for the namespace http://schemas.xmlsoap.org/soap/http.
    at org.Apache.cxf.transport.ConduitInitiatorManagerImpl.getConduitInitiator(ConduitInitiatorManagerImpl.Java:112)
    at org.Apache.cxf.endpoint.AbstractConduitSelector.getSelectedConduit(AbstractConduitSelector.Java:73)
    at org.Apache.cxf.endpoint.UpfrontConduitSelector.prepare(UpfrontConduitSelector.Java:61)
    at org.Apache.cxf.endpoint.ClientImpl.prepareConduitSelector(ClientImpl.Java:708)
    at org.Apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.Java:476)
    at org.Apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.Java:309)
    at org.Apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.Java:261)
    at org.Apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.Java:73)
    at org.Apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.Java:127)

précaution: À ce stade, je vais arrêter de tenter de mettre à niveau mon client CXF vers la version 2.4.2 et de revenir à la version la plus ancienne qui fonctionne (série 2.2). Ce n'est pas idéal. 

Je voudrais avancer avec la mise à niveau. Toutes les suggestions concernant la configuration de CXF 2.4.X de sorte que les câbles de configuration HTTP SOAP réservé au client soient correctement pris en compte.

19
Dan Barber

Comme recommandé par les anciens messages, cela est résolu en ajoutant cxf-rt-transports-http-jetty au mélange.

23

Cette erreur peut être générée par un format d’URL non valide sur le client. Par exemple, si vous utilisez le transport http, vous devez définir l'URL "http: // localhost: 8080/services/{smth}". Et si vous définissez "localhost: 8080/services/{smth}" sans le préfixe http, vous recevez une telle erreur.

14

Avez-vous mis le cxf-rt-binding-soap-2.4.x.jar dans votre chemin de classe?

4
Willem Jiang

Récemment, j'ai mis à niveau cxf-rt-ws-security vers la version 3.0.0. A partir de là, j'ai commencé à obtenir org.Apache.cxf.BusException: aucun initiateur de conduit n'a été trouvé pour l'espace de noms http://schemas.xmlsoap.org/soap/http . Dans org.Apache.cxf. .bus.managers.ConduitInitiatorManagerImpl.getConduitInitiator (ConduitInitiatorManagerImpl.Java:110).

Ce problème a été résolu après la mise à niveau des fichiers jars ci-dessous vers la version 3.0.0 dans mon pom.xml Cxf-rt-frontend-jaxws Cxf-rt-ws-policy Cxf- rt-transports-http

2
Sudarshan

Cela ne s'applique pas spécifiquement aux exemples d'URL de l'affiche originale répertoriés, mais nous avons obtenu cette erreur lorsque l'URL était incorrecte. C'est-à-dire que nous avions une certaine chaîne dans le chemin de l'URL répertorié deux fois au lieu d'une fois.

1
icfantv

Je faisais également face au même problème. Grâce à IntelliJ, tout fonctionnait bien, mais Maven Surefire produisait une erreur. Et enfin trouvé la réponse. C'est ici:

En gros, les bibliothèques cxf fournissent chacune un fichier META-INF/cxf/bus-extensions.txt et le comportement par défaut du conditionneur consiste à remplacer ce fichier, qui est donc incomplet. En configurant le shader pour ajouter au lieu de remplacer le cxf va se comporter correctement.

Ajoutez ceci à votre section de construction de votre pom dans la section des plugins:

  <plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>1.4</version>
    <configuration>
      <createDependencyReducedPom>true</createDependencyReducedPom>
    </configuration>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <transformers>
            <transformer implementation="org.Apache.maven.plugins.shade.resource.AppendingTransformer">
              <resource>META-INF/cxf/bus-extensions.txt</resource>
            </transformer>
          </transformers>
          <filters>
            <filter>
              <artifact>*:*</artifact>
              <excludes>
                <exclude>META-INF/*.SF</exclude>
                <exclude>META-INF/*.DSA</exclude>
                <exclude>META-INF/*.RSA</exclude>
              </excludes>
            </filter>
          </filters>
        </configuration>
      </execution>
    </executions>
  </plugin>

J'ai eu une situation similaire avec cette erreur et pour ce problème semble venir avec les anciennes versions des bocaux suivants

cxf-core-2.x.jar
cxf-rt-frontend-jaxrs-2.x.jar
cxf-rt-rs-client-2.x.jar
cxf-rt-transports-http-2.x.jar

Lorsque je suis passé aux dernières versions de ces fichiers jar (3.2.1, au moment de la rédaction), l’erreur a été résolue.

0
N00b Pr0grammer

Supprimer cette dépendance de mon POM a corrigé l'erreur pour moi

   <dependency>
        <groupId>org.Apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>3.1.1</version>
    </dependency>
0
Abhishek Galoda