CXF 2.4.2: не найден инициатор канала для пространства имен http://schemas.xmlsoap.org/soap/http - PullRequest
20 голосов
/ 30 сентября 2011

У меня есть сервисный клиент, сгенерированный из wsdl. Я пытаюсь вызвать удаленный сервис и получаю сообщение об ошибке инициатора канала, показанное ниже. Я пробовал многочисленные решения без успеха.

Я нашел решения (старые сообщения), которые рекомендуют использовать http-jetty extensions . Я не верю, что это имеет смысл для меня, потому что сервер не работает локально.

Я также обнаружил, что наиболее близкой конфигурацией, которая мне помогает, является пример cxf.xml файла, который содержит:

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

Эта конфигурация содержит руководство по настройке фабрики транспорта и привязке ее к http://schemas.xmlsoap.org/soap/http. Когда я пытаюсь сделать это с HTTPTransportFactory , я получаю исключение, что он не может быть инициализирован (нет такой ошибки метода).

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)

Предосторожность: На этом этапе я остановлю свою попытку обновить мой клиент CXF до 2.4.2 и вернусь к самой старой версии, которая работает (серия 2.2). Это не идеально.

Я хотел бы перейти к обновлению. Любые предложения о том, как настроить CXF 2.4.X так, чтобы мои проводки конфигурации HTTP SOAP только для клиента были бы очень ценными.

Ответы [ 8 ]

23 голосов
/ 08 апреля 2013

Как и рекомендовано в старых статьях, это решается добавлением в смесь cxf-rt-transports-http-jetty.

16 голосов
/ 06 ноября 2012

Эта ошибка может быть вызвана неверным форматом URL на клиенте. Например, если вы используете транспорт http, вы должны определить «http://localhost:8080/services/{smth}" url. А если вы определите« localhost: 8080 / services / {smth} »без префикса http - вы получите такую ​​ошибку.

4 голосов
/ 09 октября 2011

Вы поместили cxf-rt-binding-soap-2.4.x.jar в свой путь к классу?

2 голосов
/ 22 апреля 2015

Недавно я обновил cxf-rt-ws-security до 3.0.0. С тех пор я начал получать org.apache.cxf.BusException: не было найдено инициатора канала для пространства имен http://schemas.xmlsoap.org/soap/http. в org.apache.cxf.bus.managers.ConduitInitiatorManagerImpl.getConduitInitiator (ConduitInitiatorManagerImpl.java:110).

Эта проблема была решена после того, как я обновил ниже jar до 3.0.0 в моем pom.xml CXF-RT-Frontend-JAXWS CxF-RT-WS-Policy CxF-RT-транспорты-клиент

1 голос
/ 07 марта 2017

Я тоже столкнулся с той же проблемой.Через IntelliJ все работало нормально, но maven surefire выдавал ошибку.И наконец нашел ответ.Вот оно:

В основном каждая из библиотек cxf предоставляет файл META-INF / cxf / bus-extensions.txt, и поведение упаковщика по умолчанию заключается в замене этого файла, в результате чего он является неполным.Сконфигурировав шейдер для добавления вместо замены, материал cxf будет вести себя правильно.

Добавьте это в раздел сборки вашего pom в разделе плагинов:

  <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>
1 голос
/ 27 февраля 2014

Это не относится конкретно к приведенным в качестве примера URL-адресам исходного плаката, но мы получили эту ошибку, когда URL-адрес был неверным.То есть у нас была определенная строка в пути URL, указанная дважды, а не один раз.

0 голосов
/ 02 февраля 2018

У меня была похожая ситуация с этой ошибкой, и эта проблема, похоже, идет со старыми версиями следующих jar

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

Когда я переключился на последние версии этих jar (3.2.1, на момент написания) исправил ошибку.

0 голосов
/ 24 марта 2017

Удаление этой зависимости из моего POM Исправлена ​​ошибка для меня

   <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>3.1.1</version>
    </dependency>
...