On Mon, Aug 12, 2013 at 12:13 AM, Dishara Wijewardana <[email protected]> wrote: > Hi Ian, > Thank you very much for this detailed steps. This was what I was looking to > gather from docs. > > In step1, on services, there is no CassandraResourceProvider. I searched > for the name and there is no such. But in bundles I have it in active > state. I tried refreshing it again too. But still I cannot see the service. > In my provider class @Service annotation is defined > as @Service(ResourceProvider.class). Instead do I need to make it > as @Service(CassandraResourceProvider.class) ? How does the services > generated from bundles ?.
@ServiceProvider is the right one to add, but IUUC you also need to add @Component . See the maven-scr-plugin docs [1] for more details. I can't remember where your code is posted, can you please paste a link? Perhaps the maven-scr-plugin is not properly integrated in the build. Robert [1]: http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html#component > (I also verified this by uninstalling and then installing the cassandra > bundle and check whether service count decreases/increases) > > > On Sun, Aug 11, 2013 at 2:49 PM, Ian Boston <[email protected]> wrote: > >> Hi Dishara, >> The Resource is not being found. >> >> Things to check. >> >> 1. Check that the CassandraResourceProvider is registered with the >> ResourceResolver at the correct path. >> >> Got to >> http://localhost:8080/system/console/services (login admin:admin) >> Locate the CassandraResourceProvider and take a note of the service ID >> (first column). >> Locate the service for >> org.apache.sling.api.resource.ResourceResolverFactory >> Click on the bundle link in the left hand column, in my case >> http://localhost:8080/system/console/bundles/146 >> Check that the the service ID for the CassandraResourceProvider is >> used by this bundle. >> >> 2. Put some Log statements in the CassandraResourceProvider to prove >> that the ResourceResolver is calling it. >> >> >> 3. Make certain that the Resource that the CassandrResourceProvider is >> returning is properly formed. It has resource metadata with a >> resourceType and path. >> >> You can use http://localhost:8080/system/console/jcrresolver to check >> how URLs are resolved, or use a curl command. >> >> HTH >> Ian >> >> On 11 August 2013 01:08, Dishara Wijewardana <[email protected]> >> wrote: >> > On Sat, Aug 10, 2013 at 1:47 PM, Bertrand Delacretaz < >> [email protected] >> >> wrote: >> > >> >> Hi, >> >> >> >> On Sat, Aug 10, 2013 at 7:02 AM, Dishara Wijewardana >> >> <[email protected]> wrote: >> >> > ...The integration tests >> >> > calls to HTTP REST endpoints. So there should be a place that I >> should be >> >> > writing something like JAX-RS using sling APIs... >> >> >> >> You don't need JAX-RS, Sling provides RESTful HTTP APIs out of the box. >> >> >> >> > ...Apparently what I should be >> >> > writing is something similar to PlanetsResourceProviderTest.... >> >> >> >> Yeah can be a good starting point - setup a Sling instance with your >> >> resource provider active and create, retrieve, update and delete >> >> resources via Sling's HTTP API. >> >> >> >> You can also probably test your ResourceProvider without a Sling >> >> instance, either with unit tests or pax exam integration tests. If you >> >> can demonstrate there that it works according to the ResourceProvider >> >> semantics, integration tests can be minimal and just verify that your >> >> provider hooks up in the right way when activated. >> >> >> > >> > Hi Bertrand >> > You are quite right. My provider works standalone and wants to make sure >> > whether my provider picked up by the sling engine. Where should I specify >> > my provider when calling the HTTP endpoint. Or if I call to a correct >> > resource path, will it picked it up ? >> > >> > I tried writing something similar to PlanetsResourceProviderTest and did >> a >> > HTTP GET call to the endpoint " >> > http://localhost:8080/content/cassandra/movies/foo" and when I remotely >> > debug the test, the http client of HTTPTestBase receives a 404 for that >> GET >> > call.. >> > >> > NOTE: /content/cassandra/movies/foo is an existing resource node in >> > cassandra and my provider capable of returning it in standalone mode. >> > >> > This is the BE error log.. >> > >> > unning >> > >> org.apache.sling.launchpad.webapp.integrationtest.resourceprovider.CassandraResourceProviderTest >> > Checking if the required Sling services are started (timeout 62 >> seconds)... >> > (base URLs=http://localhost:8080 and http://localhost:8080; servlet >> > context=) >> > Sling services seem to be started, continuing with integration tests. >> > Listening for transport dt_socket at address: 5006 >> > Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.472 sec >> > <<< FAILURE! >> > >> testMovieResource(org.apache.sling.launchpad.webapp.integrationtest.resourceprovider.CassandraResourceProviderTest) >> > Time elapsed: 0.437 sec <<< FAILURE! >> > junit.framework.AssertionFailedError: Expected status 200 for >> > http://localhost:8080/content/cassandra/movies/foo (content=<!DOCTYPE >> HTML >> > PUBLIC "-//IETF//DTD HTML 2.0//EN"> >> > <html> >> > <head> >> > <title>404 No resource found</title> >> > </head> >> > <body> >> > <h1>No resource found (404)</h1> >> > <p>The requested URL /content/cassandra/movies/foo resulted in an error >> in >> > >> org.apache.sling.servlets.resolver.internal.defaults.DefaultErrorHandlerServlet.</p> >> > <h3>Request Progress:</h3> >> > <pre> >> > 0 (2013-08-11 05:25:39) TIMER_START{Request Processing} >> > 0 (2013-08-11 05:25:39) COMMENT timer_end format is {<elapsed >> > msec>,<timer name>} <optional message> >> > 0 (2013-08-11 05:25:39) LOG Method=GET, >> > PathInfo=/content/cassandra/movies/foo >> > 0 (2013-08-11 05:25:39) TIMER_START{ResourceResolution} >> > 2 (2013-08-11 05:25:39) TIMER_END{2,ResourceResolution} >> > URI=/content/cassandra/movies/foo resolves to >> Resource=NonExistingResource, >> > path=/content/cassandra/movies/foo >> > 3 (2013-08-11 05:25:39) LOG Resource Path Info: >> SlingRequestPathInfo: >> > path='/content/cassandra/movies/foo', selectorString='null', >> > extension='null', suffix='null' >> > 3 (2013-08-11 05:25:39) TIMER_START{ServletResolution} >> > 3 (2013-08-11 05:25:39) >> > TIMER_START{resolveServlet(NonExistingResource, >> > path=/content/cassandra/movies/foo)} >> > 3 (2013-08-11 05:25:39) >> > TIMER_END{0,resolveServlet(NonExistingResource, >> > path=/content/cassandra/movies/foo)} Using servlet >> > org.apache.sling.servlets.get.DefaultGetServlet >> > 3 (2013-08-11 05:25:39) TIMER_END{0,ServletResolution} >> > URI=/content/cassandra/movies/foo handled by >> > Servlet=org.apache.sling.servlets.get.DefaultGetServlet >> > 3 (2013-08-11 05:25:39) LOG Applying Requestfilters >> > 3 (2013-08-11 05:25:39) LOG Calling filter: >> > org.apache.sling.engine.impl.debug.RequestProgressTrackerLogFilter >> > 3 (2013-08-11 05:25:39) >> > TIMER_START{org.apache.sling.servlets.get.DefaultGetServlet#0} >> > 3 (2013-08-11 05:25:39) >> > TIMER_END{0,org.apache.sling.servlets.get.DefaultGetServlet#0} >> > 3 (2013-08-11 05:25:39) TIMER_START{handleError:status=404} >> > 4 (2013-08-11 05:25:39) TIMER_END{1,handleError:status=404} Using >> > handler >> > >> org.apache.sling.servlets.resolver.internal.defaults.DefaultErrorHandlerServlet >> > 5 (2013-08-11 05:25:39) TIMER_END{5,Request Processing} Dumping >> > SlingRequestProgressTracker Entries >> > </pre> >> > <hr> >> > <address>ApacheSling/2.2 (jetty/6.1.x, OpenJDK 64-Bit Server VM 1.6.0_27, >> > Linux 3.0.0-12-generic amd64)</address> >> > </body> >> > </html> >> > ) expected:<200> but was:<404> >> > at junit.framework.Assert.fail(Assert.java:47) >> > at junit.framework.Assert.failNotEquals(Assert.java:277) >> > at junit.framework.Assert.assertEquals(Assert.java:64) >> > at junit.framework.Assert.assertEquals(Assert.java:195) >> > at >> > >> org.apache.sling.commons.testing.integration.HttpTestBase.getContent(HttpTestBase.java:380) >> > at >> > >> org.apache.sling.commons.testing.integration.HttpTestBase.getContent(HttpTestBase.java:355) >> > at >> > >> org.apache.sling.commons.testing.integration.HttpTestBase.getContent(HttpTestBase.java:347) >> > at >> > >> org.apache.sling.commons.testing.integration.HttpTestBase.getContent(HttpTestBase.java:342) >> > at >> > >> org.apache.sling.launchpad.webapp.integrationtest.resourceprovider.CassandraResourceProviderTest.assertStrings(CassandraResourceProviderTest.java:27) >> > at >> > >> org.apache.sling.launchpad.webapp.integrationtest.resourceprovider.CassandraResourceProviderTest.testMovieResource(CassandraResourceProviderTest.java:64) >> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> > at >> > >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) >> > at >> > >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >> > at java.lang.reflect.Method.invoke(Method.java:597) >> > at junit.framework.TestCase.runTest(TestCase.java:168) >> > at junit.framework.TestCase.runBare(TestCase.java:134) >> > at junit.framework.TestResult$1.protect(TestResult.java:110) >> > at junit.framework.TestResult.runProtected(TestResult.java:128) >> > at junit.framework.TestResult.run(TestResult.java:113) >> > at junit.framework.TestCase.run(TestCase.java:124) >> > at junit.framework.TestSuite.runTest(TestSuite.java:232) >> > at junit.framework.TestSuite.run(TestSuite.java:227) >> > at >> > >> org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81) >> > at >> > >> org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) >> > at >> > >> org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) >> > at >> > >> org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) >> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> > at >> > >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) >> > at >> > >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >> > at java.lang.reflect.Method.invoke(Method.java:597) >> > at >> > >> org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) >> > at >> > >> org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) >> > at >> > >> org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) >> > at >> > >> org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) >> > at >> org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) >> > >> > >> > Results : >> > >> > Failed tests: >> > >> testMovieResource(org.apache.sling.launchpad.webapp.integrationtest.resourceprovider.CassandraResourceProviderTest): >> > Expected status 200 for >> > http://localhost:8080/content/cassandra/movies/foo(content=<!DOCTYPE >> > HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">(..) >> > >> > Tests run: 1, Failures: 1, Errors: 0, Skipped: 0 >> > >> > [INFO] >> > ------------------------------------------------------------------------ >> > [INFO] BUILD FAILURE >> > [ >> > >> > >> > >> >> >> >> -Bertrand >> >> >> > >> > >> > >> > -- >> > Thanks >> > /Dishara >> > > > > -- > Thanks > /Dishara -- Sent from my (old) computer
