Publication de WS avec Jonas - Java - Programmation
MarshPosté le 06-01-2012 à 10:02:48
Bonjour J'essaie de créer un web service sur Jonas 5.2.0. Si j'utilise les méthodes "statiques" (annotations @WebService et configuration par CXFServlet), ça marche très bien, mais le problème est que je dois créer dynamiquement un nombre indéterminé de web services sur des urls différents en fonction des serveurs auxquels je vais me connecter (mes services sont en fait des EventConsumer de notifications de WS où je m'abonne). Je dois donc a priori utiliser la technique "à la main" via Endpoint.publish. Le problème alors est que Jonas me dit qu'il ne trouve pas le connecteur Jetty :
2012-01-05 12:37:38,382 : ReflectionServiceFactoryBean.buildServiceFromClass : Creating Service {http://acs.bar.foo.com/}EventConsumerEndpointService from class com.foo.rd.events.EventConsumer [ERROR] 2012-01-05 12:37:38,710 - pb publish http://localhost:9000/test/EventConsumer java.lang.NoClassDefFoundError: org/mortbay/jetty/Connector at org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory.createJettyHTTPServerEngine(JettyHTTPServerEngineFactory.java:243) at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.retrieveEngine(JettyHTTPDestination.java:116) at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.finalizeConfig(JettyHTTPDestination.java:151) at org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory.createDestination(JettyHTTPTransportFactory.java:123) at org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory.getDestination(JettyHTTPTransportFactory.java:103) at org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:92) at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:71) at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:106) at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:177) at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:403) at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:310) at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:234) at org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:112) at javax.xml.ws.Endpoint.publish(Endpoint.java:47) at com.foo.bar.acs.EventConsumerEndpoint.publish(EventConsumerEndpoint.java:62) at com.foo.bar.acs.ACSProxyFactory$ACSProxyCreatorThread.run(ACSProxyFactory.java:222) Caused by: java.lang.ClassNotFoundException: org.mortbay.jetty.Connector not found by org.apache.cxf.bundle [120] at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:787) at org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:71) at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1768) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) ... 16 more
Ma librairie Jetty est bien dans la config standard de Jonas : jonas-full-5.2.0\repositories\maven2-internal\org\mortbay, j'ai essayé de la tirer dans mon war, de la mettre en lib/common|ext... rien n'y fait. Quelqu'un a t'il une solution ou pourrait-il m'indiquer comment court-circuiter CXF pour utiliser une autre librairie que Jetty ?
PS : code de mon implémenteur :
Code :
//@WebService(targetNamespace = "http://foo.com/acs/events", name = "EventConsumer", serviceName = "EventConsumer" )
Marsh Posté le 06-01-2012 à 10:02:48
Bonjour
J'essaie de créer un web service sur Jonas 5.2.0.
Si j'utilise les méthodes "statiques" (annotations @WebService et configuration par CXFServlet),
ça marche très bien, mais le problème est que je dois créer dynamiquement un nombre indéterminé
de web services sur des urls différents en fonction des serveurs auxquels je vais me connecter
(mes services sont en fait des EventConsumer de notifications de WS où je m'abonne).
Je dois donc a priori utiliser la technique "à la main" via Endpoint.publish.
Le problème alors est que Jonas me dit qu'il ne trouve pas le connecteur Jetty :
2012-01-05 12:37:38,382 : ReflectionServiceFactoryBean.buildServiceFromClass : Creating Service {http://acs.bar.foo.com/}EventConsumerEndpointService from class com.foo.rd.events.EventConsumer
[ERROR] 2012-01-05 12:37:38,710 - pb publish http://localhost:9000/test/EventConsumer
java.lang.NoClassDefFoundError: org/mortbay/jetty/Connector
at org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory.createJettyHTTPServerEngine(JettyHTTPServerEngineFactory.java:243)
at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.retrieveEngine(JettyHTTPDestination.java:116)
at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.finalizeConfig(JettyHTTPDestination.java:151)
at org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory.createDestination(JettyHTTPTransportFactory.java:123)
at org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory.getDestination(JettyHTTPTransportFactory.java:103)
at org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:92)
at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:71)
at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:106)
at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:177)
at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:403)
at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:310)
at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:234)
at org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:112)
at javax.xml.ws.Endpoint.publish(Endpoint.java:47)
at com.foo.bar.acs.EventConsumerEndpoint.publish(EventConsumerEndpoint.java:62)
at com.foo.bar.acs.ACSProxyFactory$ACSProxyCreatorThread.run(ACSProxyFactory.java:222)
Caused by: java.lang.ClassNotFoundException: org.mortbay.jetty.Connector not found by org.apache.cxf.bundle [120]
at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:787)
at org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:71)
at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1768)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 16 more
Ma librairie Jetty est bien dans la config standard de Jonas : jonas-full-5.2.0\repositories\maven2-internal\org\mortbay,
j'ai essayé de la tirer dans mon war, de la mettre en lib/common|ext... rien n'y fait.
Quelqu'un a t'il une solution ou pourrait-il m'indiquer comment court-circuiter CXF pour utiliser une autre
librairie que Jetty ?
PS : code de mon implémenteur :
Merci