Apologies for the delayed reply. Comments in line below.

On Monday, October 31, 2011 10:28 PM, "Sergey Beryozkin"
<sberyoz...@gmail.com> wrote:
> Hi
> 
> On 27/10/11 16:28, Jon Barber wrote:
> > Hi List,
> >
> > I've managed to get CXF DOSGi 1.2 working with JSON responses following
> > the discussions I found on this list. However, I've hit a problem when I
> > try to use the OSGi HTTP Service via the
> > org.apache.cxf.ws.httpservice.context property.
> >
> > So I've adapted the greeter rest sample from the distribution and added
> > the following properties to the services :
> >
> >
> >          props.put("service.exported.interfaces", "*");
> >          props.put("service.exported.configs", "org.apache.cxf.rs");
> >          props.put("service.exported.intents", "HTTP");
> >          
> > props.put("org.apache.cxf.rs.provider","org.apache.cxf.jaxrs.provider.AegisElementProvider,org.apache.cxf.jaxrs.provider.AegisJSONProvider");
> >
> > Then for the first case I register an address for the service to use,
> > e.g.
> >
> >          
> > props.put("org.apache.cxf.rs.address","http://localhost:8282/greeter2";);
> >
> > This works like a charm : curl
> > http://localhost:8282/greeter2/greeter/greeting/fred
> > {"ns1.GreeterInfo":{"@xsi.type":"ns1:GreeterInfo","ns1.greetings":{"ns1.GreetingPhrase":[{"@xsi.type":"ns1:GreetingPhrase","ns1.name":"fred","ns1.phrase":"Hello"},{"@xsi.type":"ns1:GreetingPhrase","ns1.name":"fred","ns1.phrase":"Hoi"},{"@xsi.type":"ns1:GreetingPhrase","ns1.name":"fred","ns1.phrase":"Hola"},{"@xsi.type":"ns1:GreetingPhrase","ns1.name":"fred","ns1.phrase":"Bonjour"}]}}}
> >
> >
> >
> > However, it blows up when I try and register with a context instead of
> > an address. So that last property above is replaced with this :
> >
> >          props.put("org.apache.cxf.rs.httpservice.context","/greeter2");
> >
> > Now when I issue the curl command I get this exception in Felix :
> >
> > 27-Oct-2011 16:11:08
> > org.apache.cxf.dosgi.dsw.handlers.SecurityDelegatingHttpContext
> > handleSecurity
> > INFO: No filter registered.
> > Delegating from GreeterServiceImpl2 to GreeterServiceImpl
> > Invoking: greetMe(fred)
> > java.lang.ExceptionInInitializerError
> >          at
> >          
> > org.apache.cxf.aegis.AegisContext.createRootTypeCreator(AegisContext.java:119)
> >          at
> >          
> > org.apache.cxf.aegis.AegisContext.createTypeCreator(AegisContext.java:108)
> >          at
> >          org.apache.cxf.aegis.AegisContext.initialize(AegisContext.java:150)
> >          at
> >          
> > org.apache.cxf.jaxrs.provider.AbstractAegisProvider.getClassContext(AbstractAegisProvider.java:123)
> >          at
> >          
> > org.apache.cxf.jaxrs.provider.AbstractAegisProvider.getAegisContext(AbstractAegisProvider.java:80)
> >          at
> >          
> > org.apache.cxf.jaxrs.provider.AegisElementProvider.writeTo(AegisElementProvider.java:74)
> >          at
> >          
> > org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.serializeMessage(JAXRSOutInterceptor.java:248)
> >          at
> >          
> > org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.processResponse(JAXRSOutInterceptor.java:139)
> >          at
> >          
> > org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.handleMessage(JAXRSOutInterceptor.java:78)
> >          at
> >          
> > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
> >          at
> >          
> > org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:78)
> >          at
> >          
> > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
> >          at
> >          
> > org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:110)
> >          at
> >          
> > org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:98)
> >          at
> >          
> > org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:423)
> >          at
> >          
> > org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:139)
> >          at
> >          
> > org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:142)
> >          at
> >          
> > org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
> >          at
> >          
> > org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)
> >          at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
> >          at
> >          
> > org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
> >          at
> >          
> > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
> >          at
> >          
> > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
> >          at
> >          
> > org.ops4j.pax.web.service.internal.HttpServiceServletHandler.handle(HttpServiceServletHandler.java:66)
> >          at
> >          
> > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> >          at
> >          
> > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
> >          at
> >          
> > org.ops4j.pax.web.service.internal.HttpServiceContext.handle(HttpServiceContext.java:108)
> >          at
> >          
> > org.ops4j.pax.web.service.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:64)
> >          at
> >          
> > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
> >          at org.mortbay.jetty.Server.handle(Server.java:324)
> >          at
> >          
> > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
> >          at
> >          
> > org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829)
> >          at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:513)
> >          at
> >          org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
> >          at
> >          org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
> >          at
> >          
> > org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
> >          at
> >          
> > org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
> > Caused by: java.lang.IllegalArgumentException: No SchemaFactory that
> > implements the schema language specified by:
> > http://www.w3.org/2001/XMLSchema could be loaded
> >          at javax.xml.validation.SchemaFactory.newInstance(Unknown
> >          Source)
> >          at
> >          
> > org.apache.cxf.aegis.type.XMLTypeCreator.<clinit>(XMLTypeCreator.java:118)
> >
> > This is using Java 1.6.0_27, CXF DOSGi 1.2 and Felix 3.2.2. I configured
> > felix as per the conf in the cxf distribution with the addition of the
> > jettison jar and my modified greeter bundle - config is viewable at
> > http://pastebin.com/m8Qa8pLw
> 
> I vaguely recall seeing something like that before.
> Does it happen with Aegis only, when requesting JSON or XMl or both ? 
> Can you please try JAXB ?

OK, I'll try and find out how I use JAXB in place of Aegis. Could you
provide a pointer to some docs etc ?

> 
> >
> > I can work around this, in that if I set the address to be the same as
> > the OSGi HTTP service is already using then that works fine,
> 
> Can you clarify it please ?

So I mean that if the HTTP service is configured to listen to port 9000
then if I set the property like this :

    props.put("org.apache.cxf.rs.address","http://localhost:9000/greeter2";);

then that works fine.

However, I'd rather not do that (set an absolute address) as we have
different configurations for our different environments.

> 
> Cheers, Sergey
> 
> > but I'd
> > rather not do that as we would need to remember to change the property
> > if we ever change the port to be consistent.
> >
> > Any help would be gratefully received.
> >
> > Thanks,
> >
> > Jon.
> 
> 

Reply via email to