2012-11-29 12 views
38

Quando l'uso di Apache CXF JaxWsServerFactoryBean in modalità console (tenta di avviare il server da riga di comando java) andranno eccezione come di seguito:Usa CXF JaxWsServerFactoryBean eccezione non è stata trovata nessuna registrati HttpDestinationFactory dal Bus

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) 

Quando stesso servizio impl usato in Tomcat via Spring, funziona.

<jaxws:endpoint id="abc" implementor="com.AbcServicePortTypeImpl" address="/abc"> 
+9

risolto da add molo vasetti di dipendenza: (da apache-cxf-2.7.0.zip) CXF-RT-trasporti-http-molo-2.7.0.jar, geronimo-servlet_3.0_spec -1.0.jar, jetty - *. Jar, ---- Nota: geronimo-servlet_3.0_spec-1.0.jar è richiesto altrimenti otterrà l'eccezione "connessione rifiutata" nel client. –

+1

Avrei svalutato questo come una risposta! Grazie – ThanksForAllTheFish

risposta

3

Ho avuto lo stesso problema. E nessuna delle cose di google aveva senso. Ho scoperto nel mio caso che mi mancava il seguente nel file di contesto primavera:

<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" /> 
66

Includere CXF-RT-trasporti-http-molo vaso nel pom.xml maven risolverà il problema.

<dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-transports-http-jetty</artifactId> 
     <version>2.7.6</version> 
    </dependency> 
+3

Considerare l'aggiunta di un test se è necessario eseguire solo i test dei componenti, quando normalmente si eseguirà l'app sotto il contenitore servlet. – ievgen

+0

Grazie per i suggerimenti – sendon1982

3

Un'altra soluzione che funziona con CSV 2.7.15: quando si crea il Bus, registrare un'estensione:

ServletDestinationFactory destinationFactory = new ServletDestinationFactory(); 
bus.setExtension(destinationFactory, HttpDestinationFactory.class); 
4

Per esempio, se avete seguito la configurazione e l'indirizzo viene definito con http aggiunto ad esso, che non è un url relativo al CXFServlet configurato, verrà visualizzato l'errore di cui sopra.

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

La soluzione è semplicemente menzionare l'url relativo senza http/https aggiunto all'indirizzo.

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