web-dev-qa-db-fra.com

Utiliser l'exception CXF JaxWsServerFactoryBean Impossible de trouver une HttpDestinationFactory enregistrée à partir du bus

Lorsque vous utilisez Apache CXF JaxWsServerFactoryBean en mode console (essayez de démarrer le serveur par Java) Obtiendra l'exception comme ci-dessous:

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)

Lorsque le même service implémenté dans Tomcat via Spring, cela fonctionne.

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

Inclure cxf-rt-transports-http-jetty jar dans le maven pom.xml résoudra le problème.

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

Par exemple, si vous avez une configuration ci-dessous et que l'adresse est définie avec http annexé, qui n'est pas une URL relative au CXFServlet configuré, l'erreur ci-dessus se produira.

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

La solution consiste à simplement mentionner l'URL relative sans http/https ajouté à l'adresse.

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

J'ai eu le même problème. Et aucun des éléments de Google n'avait de sens. J'ai découvert dans mon cas que je manquais ce qui suit dans le fichier contextuel du printemps:

   <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

Une autre solution qui fonctionne avec CSV 2.7.15: lorsque vous créez le Bus, enregistrez une extension:

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

Essayez ce qui suit, cela a fonctionné pour moi -

<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