web-dev-qa-db-ja.com

CXF JaxWsServerFactoryBean例外を使用バスから登録されたHttpDestinationFactoryが見つかりません

Apache CXF JaxWsServerFactoryBeanをコンソールモードで使用する場合(Javaコマンドライン)でサーバーを起動してみてください)、次のような例外が発生します。

Caused by: Java.io.IOException: Cannot find any registered HttpDestinationFactory from the Bus.
        at org.Apache.cxf.transport.http.HTTPTransportFactory.getDestination(HTTPTransportFactory.Java:295)
        at org.Apache.cxf.binding.soap.SoapTransportFactory.getDestination(SoapTransportFactory.Java:143)
        at org.Apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.Java:93)
        at org.Apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.Java:72)
        at org.Apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.Java:160)

同じサービス実装がSpring経由でTomcatで使用される場合、機能します。

<jaxws:endpoint id="abc" implementor="com.AbcServicePortTypeImpl" address="/abc">
45
Anderson Mao

Maven pom.xmlにcxf-rt-transports-http-jetty jarを含めると、問題が解決します。

    <dependency>
        <groupId>org.Apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http-jetty</artifactId>
        <version>2.7.6</version>
    </dependency>
78
sendon1982

たとえば、以下の設定があり、アドレスにhttpが追加されて定義されている場合、これは設定されたCXFServletに対する相対URLではありませんが、上記のエラーが発生します。

<jaxrs:server id="helloRestService" address="http://...">
        <jaxrs:serviceBeans>
            <ref bean="helloService" />
        </jaxrs:serviceBeans>
</jaxrs:server>

解決策は、http/httpsをアドレスに追加せずに、単に相対URLに言及することです。

http://grokbase.com/t/camel/users/155f1smn4v/error-cannot-find-any-registered-httpdestinationfactory-from-the-bus

同じ問題がありました。そして、Googleのものはどれも意味がありませんでした。私の場合、Springコンテキストファイルに次のものが欠けていることがわかりました。

   <import resource="classpath:META-INF/cxf/cxf.xml" />
   <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
   <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
3
Ashesh Vidyut

CSV 2.7.15で動作する別のソリューション:Busを作成するときに、拡張機能を登録します。

ServletDestinationFactory destinationFactory = new ServletDestinationFactory();
bus.setExtension(destinationFactory, HttpDestinationFactory.class);
3
Aaron Digulla

次を試してください、それは私のために働いた-

<dependency>
    <groupId>org.Apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http-jetty</artifactId>
    <version>3.2.5</version>
    <exclusions>
        <exclusion>
            <groupId>org.Eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.Eclipse.jetty</groupId>
            <artifactId>jetty-util</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.Eclipse.jetty</groupId>
            <artifactId>jetty-io</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.Eclipse.jetty</groupId>
            <artifactId>jetty-security</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.Eclipse.jetty</groupId>
            <artifactId>jetty-continuation</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.Eclipse.jetty</groupId>
            <artifactId>jetty-http</artifactId>
        </exclusion>
    </exclusions>
</dependency>
2
Prateek Mehta