CXF 2.4.2:未找到命名空间的管道启动器 http://schemas.xmlsoap.org/soap/http

2022-09-02 00:20:45

我有一个从 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 配置线正确提供的任何建议都将得到很多认可。


答案 1

就像旧帖子推荐的那样,这是通过将cxf-rt-transports-http-jetty添加到组合中来解决的。


答案 2

客户端上的 URL 格式无效可能会产生此错误。例如,如果您使用 http 传输,则应定义“http://localhost:8080/services/{smth}” url。如果您定义“localhost:8080/services/{smth}”而不使用 http 前缀 - 您将收到这样的错误。


推荐