Hi David,
can you pls. provide a testcase (small project) to reproduce the issue?
Thank you.
WBR,
Alexey.
On Jan 22, 2010, at 0:09 , David Tkaczyk wrote:
> Hi,
>
> Has anyone ever tested Grizzly’s HttpService with a Jersey
> ServletContainer? I have tried several different ways and have
> failed to get Jersey to locate my resource file. I see an Embedded
> Grizzly test in the Jersey tests, but not one with HttpService. I
> see use of the Jersey client in the Grizzly tests, but no use of the
> Jersey servlet.
>
> I’m using Felix BTW.
>
> Here’s my code and the result from the startup log file.
>
> package camiant.osgi.msr.rest;
>
> import java.util.Dictionary;
> import java.util.Hashtable;
>
> import org.osgi.framework.ServiceReference;
> import org.osgi.service.http.HttpService;
> import org.osgi.util.tracker.ServiceTrackerCustomizer;
> import org.slf4j.Logger;
> import org.slf4j.LoggerFactory;
>
> import com.sun.jersey.api.core.PackagesResourceConfig;
> import com.sun.jersey.spi.container.servlet.ServletContainer;
>
> public class RestGrizzlyServiceTrackerCustomizer implements
> ServiceTrackerCustomizer {
>
> private static final Logger LOGGER =
> LoggerFactory.getLogger(RestGrizzlyServiceTrackerCustomizer.class);
>
> @Override
> public Object addingService(ServiceReference serviceRef) {
> LOGGER.info("Adding service: " +
> serviceRef.getBundle().getSymbolicName());
>
> Dictionary<String, String> JERSEY_INIT_PARAMS = new
> Hashtable<String, String>();
>
> // package based
> JERSEY_INIT_PARAMS.put(PackagesResourceConfig.PROPERTY_PACKAGES,
> "camiant.osgi.msr.rest.resource");
>
> // application based
> //JERSEY_INIT_PARAMS.put("javax.ws.rs.Application",
> "camiant.osgi.msr.rest.MSRRestApplication");
>
> // resource based
> //
> JERSEY_INIT_PARAMS.put("com.sun.jersey.config.property.classnames",
> Resource1.class.getCanonicalName());
> //
> JERSEY_INIT_PARAMS
> .put("com.sun.jersey.config.property.resourceConfigClass",
> ClassNamesResourceConfig.class.getName());
>
> HttpService grizzlyService =
> (HttpService
> )serviceRef.getBundle().getBundleContext().getService(serviceRef);
> try {
> ServletContainer jerseyServletContainer = new
> ServletContainer();
>
> grizzlyService.registerServlet("/rs", jerseyServletContainer,
> JERSEY_INIT_PARAMS, null);
> } catch (Exception e) {
> e.printStackTrace();
> grizzlyService = null;
> }
>
> return grizzlyService;
> }
>
> @Override
> public void modifiedService(ServiceReference serviceRef, Object
> httpService) {
> LOGGER.info("Modifying service: " +
> serviceRef.getBundle().getSymbolicName());
> removedService(serviceRef, httpService);
> addingService(serviceRef);
> }
>
> @Override
> public void removedService(ServiceReference serviceRef, Object
> httpService) {
> LOGGER.info("Removing service: " +
> serviceRef.getBundle().getSymbolicName());
>
> serviceRef.getBundle().getBundleContext().ungetService(serviceRef);
> httpService = null;
> }
>
> }
>
> Welcome to Felix
> ================
> 2010-01-21 17:55:36,020-0500 INFO SLF4JBridgeActivator:23 - SLF4J
> JUL Bridge - starting
> 2010-01-21 17:55:36,024-0500 INFO SLF4JBridgeActivator:35 - SLF4J
> JUL Bridge - started
> 2010-01-21 17:55:36,100-0500 INFO RestBundleActivator:23 - Info -
> Starting Rest Bundle!!!!!!!!!!!!!
> 2010-01-21 17:55:36,101-0500 INFO
> RestMSRCoreServiceTrackerCustomizer:16 - Adding service:
> camiant.osgi.msr.core
> 2010-01-21 17:55:36,185-0500 INFO grizzly:765 - Starting Grizzly
> Framework 1.9.18-k - Thu Jan 21 17:55:36 EST 2010
> 2010-01-21 17:55:36,205-0500 INFO
> RestGrizzlyServiceTrackerCustomizer:21 - Adding service:
> com.sun.grizzly.osgi.grizzly-httpservice-bundle
> 2010-01-21 17:55:36,226-0500 INFO PackagesResourceConfig:107 -
> Scanning for root resource and provider classes in the packages:
> camiant.osgi.msr.rest.resource
> 2010-01-21 17:55:36,250-0500 INFO ScanningResourceConfig:76 - No
> root resource classes found.
> 2010-01-21 17:55:36,250-0500 INFO ScanningResourceConfig:83 - No
> provider classes found.
> ERROR: EventDispatcher: Error during dispatch.
> (com.sun.jersey.spi.service.ServiceConfigurationError:
> com.sun.jersey.spi.container.WebApplicationProvider: The class
> com.sun.jersey.server.impl.container.WebApplicationProviderImpl
> implementing provider interface
> com.sun.jersey.spi.container.WebApplicationProvider could not be
> instantiated: null)
> com.sun.jersey.spi.service.ServiceConfigurationError:
> com.sun.jersey.spi.container.WebApplicationProvider: The class
> com.sun.jersey.server.impl.container.WebApplicationProviderImpl
> implementing provider interface
> com.sun.jersey.spi.container.WebApplicationProvider could not be
> instantiated: null
> at
> com.sun.jersey.spi.service.ServiceFinder.fail(ServiceFinder.java:380)
> at com.sun.jersey.spi.service.ServiceFinder.access
> $600(ServiceFinder.java:144)
> at com.sun.jersey.spi.service.ServiceFinder
> $LazyObjectIterator.hasNext(ServiceFinder.java:683)
> at
> com
> .sun
> .jersey
> .spi
> .container
> .WebApplicationFactory
> .createWebApplication(WebApplicationFactory.java:61)
> at
> com
> .sun
> .jersey
> .spi.container.servlet.ServletContainer.create(ServletContainer.java:
> 325)
> at com.sun.jersey.spi.container.servlet.ServletContainer
> $InternalWebComponent.create(ServletContainer.java:240)
> at
> com
> .sun
> .jersey.spi.container.servlet.WebComponent.load(WebComponent.java:548)
> at
> com
> .sun
> .jersey.spi.container.servlet.WebComponent.init(WebComponent.java:201)
> at
> com
> .sun
> .jersey
> .spi.container.servlet.ServletContainer.init(ServletContainer.java:
> 307)
> at
> com
> .sun
> .jersey
> .spi.container.servlet.ServletContainer.init(ServletContainer.java:
> 470)
> at javax.servlet.GenericServlet.init(GenericServlet.java:
> 242)
> at
> com
> .sun
> .grizzly.http.servlet.ServletAdapter.loadServlet(ServletAdapter.java:
> 428)
> at
> com
> .sun
> .grizzly
> .osgi
> .httpservice.OSGiServletAdapter.startServlet(OSGiServletAdapter.java:
> 99)
> at
> com
> .sun
> .grizzly
> .osgi
> .httpservice
> .OSGiMainAdapter.registerServletAdapter(OSGiMainAdapter.java:178)
> at
> com
> .sun
> .grizzly
> .osgi
> .httpservice.HttpServiceImpl.registerServlet(HttpServiceImpl.java:92)
> at
> camiant
> .osgi
> .msr
> .rest
> .RestGrizzlyServiceTrackerCustomizer
> .addingService(RestGrizzlyServiceTrackerCustomizer.java:38)
> at org.osgi.util.tracker.ServiceTracker
> $Tracked.customizerAdding(ServiceTracker.java:896)
> at
> org
> .osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:
> 261)
> at
> org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:233)
> at org.osgi.util.tracker.ServiceTracker
> $Tracked.serviceChanged(ServiceTracker.java:840)
> at
> org
> .apache
> .felix
> .framework
> .util
> .EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:
> 878)
> at
> org
> .apache
> .felix
> .framework
> .util.EventDispatcher.fireEventImmediately(EventDispatcher.java:732)
> at
> org
> .apache
> .felix
> .framework
> .util.EventDispatcher.fireServiceEvent(EventDispatcher.java:662)
> at
> org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:3587)
> at org.apache.felix.framework.Felix.access
> $000(Felix.java:40)
> at org.apache.felix.framework.Felix
> $1.serviceChanged(Felix.java:625)
> at
> org
> .apache
> .felix
> .framework.ServiceRegistry.registerService(ServiceRegistry.java:90)
> at
> org.apache.felix.framework.Felix.registerService(Felix.java:2711)
> at
> org
> .apache
> .felix
> .framework.BundleContextImpl.registerService(BundleContextImpl.java:
> 252)
> at
> org
> .apache
> .felix
> .framework.BundleContextImpl.registerService(BundleContextImpl.java:
> 230)
> at
> com.sun.grizzly.osgi.httpservice.Activator.start(Activator.java:89)
> at
> org
> .apache
> .felix.framework.util.SecureAction.startActivator(SecureAction.java:
> 639)
> at
> org.apache.felix.framework.Felix.activateBundle(Felix.java:1700)
> at
> org.apache.felix.framework.Felix.startBundle(Felix.java:1622)
> at
> org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1077)
> at
> org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:264)
> at java.lang.Thread.run(Thread.java:619)
> Caused by: java.lang.ClassCastException
> at java.lang.Class.cast(Class.java:2990)
> at com.sun.jersey.spi.service.ServiceFinder
> $LazyObjectIterator.hasNext(ServiceFinder.java:641)
> ... 34 more
> ->
>
> So, I’ve tried package-based, resource-based, and application
> methods of trying to get Jersey to locate my resource file. No luck
> at all. Am I not bundling things such that Jersey can see them
> (i.e. classload issue?).
>
> Any help would be greatly appreciated.
>
> Thanks,
> Dave
>
> P.S. here’s the ps…
>
> -> ps -l
> START LEVEL 1
> ID State Level Location
> [ 0] [Active ] [ 0] System Bundle
> [ 1] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/ant.jar
> [ 2] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/asm-all-3.2.jar
> [ 3] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/camiant.osgi.msr.core.jar
> [ 4] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/camiant.osgi.msr.log.jar
> [ 5] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/camiant.osgi.msr.rest.jar
> [ 6] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/dom4j-1.6.1.jar
> [ 7] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/grizzly-httpservice-bundle-1.9.18-k.jar
> [ 8] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/hibernate.bundle.jar
> [ 9] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/http-20070405.jar
> [ 10] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/jackson-core-asl-1.1.1.jar
> [ 11] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/javax.annotation.jar
> [ 12] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/javax.ejb.jar
> [ 13] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/javax.servlet.jar
> [ 14] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/javax.servlet.jsp.jar
> [ 15] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/jaxb-osgi.jar
> [ 16] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/jdom.jar
> [ 17] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/jersey-bundle-1.1.5.jar
> [ 18] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/jettison-1.1.jar
> [ 19] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/jsr311-api-1.1.1.jar
> [ 20] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/jul-to-slf4j-1.5.8.jar
> [ 21] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/mail.jar
> [ 22] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/org.apache.felix.configadmin-1.2.4.jar
> [ 23] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/org.apache.felix.http.api-2.0.4.jar
> [ 24] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/org.apache.felix.http.base-2.0.4.jar
> [ 25] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/org.apache.felix.scr-1.4.0.jar
> [ 26] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/org.apache.felix.shell-1.4.1.jar
> [ 27] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/org.apache.felix.shell.tui-1.4.1.jar
> [ 28] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/org.apache.felix.webconsole-2.0.2.jar
> [ 29] [Resolved ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/org.apache.log4j.properties.jar
> [ 30] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/org.apache.log4j_1.2.15.v200910021404.jar
> [ 31] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/org.osgi.compendium-4.2.0.jar
> [ 32] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/rome-1.0.jar
> [ 33] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/slf4j-api-1.5.8.jar
> [ 34] [Resolved ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/slf4j-log4j12-1.5.8.jar
> [ 35] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/sun.rt.jar
> [ 36] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/tools.jar
> [ 37] [Active ] [ 1] file:/home/users/dtkaczyk/ewks1/OSGi_1/
> bundle/weld-osgi-bundle.jar
> ->
>
> David Tkaczyk
> Member of Technical Staff
> Office: 508-303-4162
> Fax: 508-486-9595
>
> <image001.gif>
>
> www.camiant.com
> 200 Nickerson Road, Marlborough, MA 01752-4603 USA
>
> <image002.gif>
>