2012-11-29 10 views
38

Kiedy użycie Apache CXF JaxWsServerFactoryBean w trybie konsoli (spróbuj uruchomić serwer po linii poleceń Java) dostanie wyjątek jak poniżej:Zastosowanie CXF JaxWsServerFactoryBean wyjątek nie można znaleźć żadnych zarejestrowany HttpDestinationFactory z 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) 

Kiedy sama usługa impl używany w Tomcat przez Spring, działa.

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

rozwiązane przez dodatek molo słoików zależność: (od apache-cxf-2.7.0.zip) CXF-RT-transportuje HTTP-pomost-2.7.0.jar, geronimo-servlet_3.0_spec -1.0.jar, pomost - *. Jar, ---- Uwaga: geronimo-servlet_3.0_spec-1.0.jar jest wymagane, w przeciwnym razie wystąpi wyjątek "odmowa połączenia" w kliencie. –

+1

Uznalbym to za odpowiedź! Dziękujemy – ThanksForAllTheFish

Odpowiedz

3

Miałem ten sam problem. I żadne z tych rzeczy nie miało sensu. I okazało się, że w moim przypadku brakowało mi następujące w pliku kontekstowego wiosna:

<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

Dołącz CXF-RT-transportuje-http-molo słoik w pom.xml maven rozwiąże ten problem.

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

Rozważ dodanie testu , jeśli potrzebujesz tylko testów składników, gdy normalnie uruchomisz swoją aplikację pod kontenerem serwletu. – ievgen

+0

Dzięki za wskazówki – sendon1982

3

Innym rozwiązaniem, które współpracuje z CSV 2.7.15: podczas tworzenia Bus, zarejestruj rozszerzenie:

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

Na przykład, jeśli masz poniżej konfiguracji i adres jest zdefiniowany z http dołączany do niego, który nie jest względnym adresem URL do skonfigurowanego CXFServlet, powyższy błąd przyjdzie.

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

Rozwiązanie polega na podaniu względnego adresu URL bez adresu http/https dołączonego do adresu.

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