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
[cid:image001.gif@01CA9AC4.CEF80A30]<
http://www.fiercewireless.com/special-reports/camiant-top-wireless-company-2009-fiercewireless-fierce-15>
www.camiant.com<
http://www.camiant.com>
200 Nickerson Road, Marlborough, MA 01752-4603 USA
[cid:image002.gif@01CA9AC4.CEF80A30]<
http://twitter.com/camiant>