Ответ 1
Как и рекомендовано старыми сообщениями, это можно решить, добавив в микс cxf-rt-transports-http-jetty.
У меня есть клиент службы, созданный из 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 только для клиента, было бы гораздо лучше.
Как и рекомендовано старыми сообщениями, это можно решить, добавив в микс cxf-rt-transports-http-jetty.
Эта ошибка может быть вызвана неверным URL-адресом на клиенте. Например, если вы используете транспорт HTTP, вы должны определить URL-адрес "http://localhost: 8080/services/{smth}". И если вы определяете "localhost: 8080/services/{smth}" без префикса http, вы получаете такую ошибку.
Вы поместили cxf-rt-binding-soap-2.4.x.jar в свой путь к классу?
Недавно я обновил 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-транспорты-клиент
Это не относится конкретно к указанным URL-адресу оригинального плаката, но мы получили эту ошибку, когда URL-адрес был неправильным. Я., у нас была некоторая строка в URL-адресе, указанном дважды, а не один раз.
Я тоже столкнулся с той же проблемой. Через 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>
Удаление этой зависимости из моего ПОМ Исправлена ошибка для меня
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.1</version>
</dependency>