我有一个从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>
此配置提供有关如何配置传输工厂并将其绑定到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配置正确连接将非常适合。
答案 0 :(得分:23)
与旧帖子推荐的一样,这可以通过在混合中添加cxf-rt-transports-http-jetty来解决。
答案 1 :(得分:15)
客户端上的无效网址格式可能会产生此错误。例如,如果使用http传输,则应定义“http:// localhost:8080 / services / {smth}”url。如果你定义没有http前缀的“localhost:8080 / services / {smth}” - 你会收到这样的错误。
答案 2 :(得分:4)
您是否将cxf-rt-binding-soap-2.4.x.jar放入了类路径?
答案 3 :(得分:2)
最近我将cxf-rt-ws-security升级到3.0.0。从那时起,我开始获取org.apache.cxf.BusException:找不到命名空间http://schemas.xmlsoap.org/soap/http的管道启动器。 at org.apache.cxf.bus.managers.ConduitInitiatorManagerImpl.getConduitInitiator(ConduitInitiatorManagerImpl.java:110)。
在我的pom.xml中将以下jar升级到3.0.0后,此问题得以解决 CXF-RT-前端,JAXWS CXF-RT-的WS-Policy CXF-RT-传输-HTTP
答案 4 :(得分:1)
这不适用于列出的原始海报的示例网址,但是当网址不正确时我们收到此错误。即,我们在URL路径中列出了两次而不是一次的特定字符串。
答案 5 :(得分:1)
我也面临同样的问题。通过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>
答案 6 :(得分:0)
从我的POM中删除此依赖项修复了我的错误
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.1</version>
</dependency>
答案 7 :(得分:0)
我遇到了类似的错误,因为这个问题似乎与以下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
当我切换到这些罐子的最新版本时(3.2.1,在撰写本文时)已解决错误。