Подтвердить что ты не робот

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

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

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

Я также обнаружил, что самая близкая конфигурация, которая мне помогает, - это пример файла 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>

В этой конфигурации содержатся рекомендации по настройке транспорта factory и привязка его к 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 только для клиента, было бы гораздо лучше.

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

Ответ 4

Недавно я обновил 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).

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

Ответ 5

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

Ответ 6

Я тоже столкнулся с той же проблемой. Через 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>

Ответ 7

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

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