I tried but with no luck. I am just wondering if I have configured the
maven files correctly.
I get the following exception:
createInstance -> The POJO constructor invocation failed : Expecting a
stackmap frame at branch target 22
Exception Details:
Location:
com/test/component/service/MyServlet.__doGet(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V
@8: aload_2
Reason:
Expected stackmap frame at this location.
Bytecode:
0000000: b200 8912 8bb6 0090 2cb9 0096 0100 1298
0000010: b600 9ba7 0008 4e2d b600 9cb1
Exception Handler Table:
bci [8, 19] => handler: 22
java.lang.VerifyError: Expecting a stackmap frame at branch target 22
Exception Details:
Location:
com/test/component/service/MyServlet.__doGet(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V
@8: aload_2
Reason:
Expected stackmap frame at this location.
Bytecode:
0000000: b200 8912 8bb6 0090 2cb9 0096 0100 1298
0000010: b600 9ba7 0008 4e2d b600 9cb1
Exception Handler Table:
bci [8, 19] => handler: 22
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2585)
at java.lang.Class.getConstructor0(Class.java:2885)
at java.lang.Class.getDeclaredConstructor(Class.java:2058)
at
org.apache.felix.ipojo.InstanceManager.createObject(InstanceManager.java:746)
at
org.apache.felix.ipojo.InstanceManager.getPojoObject(InstanceManager.java:963)
at
org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__M_stateChanged(LifecycleCallbackHandler.java:156)
at
org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.stateChanged(LifecycleCallbackHandler.java)
at org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:560)
at org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:440)
at
org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:179)
at
org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:319)
at
org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:240)
at
org.apache.felix.ipojo.extender.internal.linker.ManagedType$InstanceSupport$1.call(ManagedType.java:312)
at
org.apache.felix.ipojo.extender.internal.linker.ManagedType$InstanceSupport$1.call(ManagedType.java:306)
at
org.apache.felix.ipojo.extender.internal.queue.JobInfoCallable.call(JobInfoCallable.java:114)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
[ERROR] com.test.component.service.MyServlet : Cannot create a POJO
instance, the POJO constructor invocation has thrown an exception
so this is how my servlet looks :
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.felix.ipojo.annotations.Bind;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Instantiate;
import org.apache.felix.ipojo.annotations.ServiceProperty;
import org.apache.felix.ipojo.annotations.Unbind;
import org.osgi.service.http.HttpService;
import org.osgi.service.http.NamespaceException;
@Component(immediate = true)
@Instantiate
@Provides
public class MyServlet extends HttpServlet {
@ServiceProperty
private String SERVLET_ALIAS = "/hello";
@Bind
public void bindHttp(HttpService httpService) {
try {
httpService.registerServlet(SERVLET_ALIAS, this, null, null);
} catch (ServletException | NamespaceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Unbind
public void unbindHttp(HttpService httpService) {
httpService.unregister(SERVLET_ALIAS);
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
{
System.out.println("Hello");
try {
response.getWriter().println("Hello World!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Maven file :
Just the plugin portion:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-ipojo-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<goals>
<goal>ipojo-bundle</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Import-Package>
javax.crypto.*; javax.crypto.spec.*; javax.jms.*;
javax.mail.*;
javax.mail.internet.*; javax.naming.*;
javax.naming.directory.*;
javax.naming.ldap.*; javax.net.*;
javax.net.ssl.*;
javax.security.auth.x500.*; javax.servlet.*;
javax.sql.*;javax.ws.rs.*;com.sun.jersey.api.core;
com.sun.jersey.spi.container.servlet;
org.osgi.*; resolution:=optional
</Import-Package>
<Embed-Dependency>httpclient; httpcore; gson; commons-logging;
log4j;</Embed-Dependency>
</instructions>
</configuration>
</plugin>
On Sat, Feb 14, 2015 at 1:35 PM, Clement Escoffier <
[email protected]> wrote:
> Hi,
>
> Oh, you are not using the whiteboard pattern, so the code should be
> something like:
>
> @Component(immediate=true)
> @Instantiate
> public class MyServlet extends HttpServlet {
>
> @Bind
> public void bindHttp(HttpService svc) {
> svc.registerServlet(alias, this, null, null);
> }
>
> @Unbind
> public void unbindHttp(HttpService svc) {
> svc.unregisterServlet(alias);
> }
>
> }
>
> Cheers,
>
> Clement
>
>
> On 13 février 2015 at 17:04:53, Ascharya Shetty ([email protected])
> wrote:
>
> Thanks. I agree with David. There is something more than just the three
> annotations which Clement has mentioned.
> My servlet looks like this :
>
> package com.test.ipojo.example;
> @Component(immediate=true)
> //provides a service
> @Instantiate
> @Provides(specifications={HttpServlet.class})
> public class MyServlet extends HttpServlet{
> @ServiceProperty(name="alias", value="/hello")
> private String alias ;
> public MyServlet(@Requires HttpService httpService) throws
> ServletException, NamespaceException{
> httpService.registerServlet(alias,this, null, null);
> }
> public void doGet(HttpServletRequest request, HttpServletResponse
> response){
> System.out.println("Hello");
> try {
> response.getWriter().println("Hello World!");
> } catch (IOException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }
> }
> }
> Also, i am not very sure if I am configuring the maven build plugin the
> right way:(ignore the other irrelevant packages.)
> <plugin>
> <groupId>org.apache.felix</groupId>
> <artifactId>maven-bundle-plugin</artifactId>
> <extensions>true</extensions>
> <configuration>
> <instructions>
> <Export-Package>
> com.test.ipojo.example
> </Export-Package>
> <Import-Package>
> javax.crypto.*; javax.crypto.spec.*; javax.jms.*;
> javax.mail.*;
> javax.mail.internet.*; javax.naming.*;
> javax.naming.directory.*;
> javax.naming.ldap.*; javax.net.*;
> javax.net.ssl.*;
> javax.security.auth.x500.*; javax.servlet.*;
> javax.sql.*;
> org.osgi.*; resolution:=optional
> </Import-Package>
> <Embed-Dependency>httpclient; httpcore; gson; commons-logging;
> log4j;</Embed-Dependency>
> </instructions>
> </configuration>
> </plugin>
>
>
> On Fri, Feb 13, 2015 at 10:06 AM, David Bosschaert <
> [email protected]> wrote:
>
> > I guess if you want a servlet registered in the service registry this
> > is typically to have it picked up by something like the Http
> > Whiteboard implementation. For that you cannot register it under
> > HttpServlet but it has to be registered as a javax.servlet.Servlet.
> > I'm not familiar with the iPojo annotations, but I guess the above
> > example would need to be tweaked in such a case...
> >
> > Cheers,
> >
> > David
> >
> > On 13 February 2015 at 15:58, clement escoffier
> > <[email protected]> wrote:
> > > Hi,
> > >
> > > If you just want to register your service just do this:
> > >
> > > @Component
> > > @Provides
> > > @Instantiate
> > > public class MyServlet extends HttpServlet {
> > > ...
> > > }
> > >
> > > @Component declares a component type, @Provides tells to iPOJO that
> your
> > > component is providing a service, and @Instantiate create an instance
> of
> > > this component.
> > >
> > > Cheers,
> > >
> > > Clement
> > >
> > >
> > > 2015-02-13 15:43 GMT+01:00 Ascharya Shetty <[email protected]>:
> > >
> > >> I have been struggling to use the right brew of annotations to get the
> > >> servlet registered as a service using iPojo.Please let me know how can
> > I do
> > >> this?
> > >> Thanks
> > >> Ascharya
> > >>
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> >
> >
>