Sorry, I spent so much time hoping to get the example going for you quickly 
that I TOTALLY missed the point... My Jersey resource needs access to other 
components of the system to construct the response, but when I try to add 
@Requires in the resource code it doesn't seem to pick anything up. So I tried 
a lot of things with setting up Jersey and wrapping classes, etc. to no avail.

For instance, let's say there is a component that provides the current status:

public interface StatusProvider {

  String getStatus();

}

@Component(immediate=true)
@Provides
public class StatusProviderImpl implements StatusProvider {

  @Override
  public String getStatus() {
    return "active";
  }

}

@Component(immediate=true)
@Path("status")
public class StatusResource {

  @Requires
  private StatusProvider status;

  @GET
  @Produces("text/plain")
  public String getStatus() {
      return status.getStatus();
  }

}
XML Config -
<ipojo>
  <instance component="com.sun.jersey.samples.osgihttpservice. 
StatusProviderImpl"/>
  <instance component="com.sun.jersey.samples.osgihttpservice.StatusResource"/>
  <instance component="com.sun.jersey.samples.osgihttpservice.JerseyComponent"/>
</ipojo>

When I fire this up and hit the url, then I get a null pointer for the 
StatusProvider.

Hopefully it is just something dead simple that I am overlooking.

Thanks again,
David

On Aug 24, 2010, at 9:46 AM, Clement Escoffier wrote:

> Hi,
> 
> So, I've tested and didn't get any issue. Here are my bundles (also deploy 
> your feature)
> 000047 ACT osgi.cmpn-4.2.0.200908310645
> 000048 ACT org.apache.felix.ipojo-1.6.0
> 000049 ACT ipojo-bundle-1.3  <-- the bundle I've created
> 
> My component is quite simple:
> @Component(immediate=true)
> public class JerseyComponent {
> 
>       @Bind
>       public void bindHttp(HttpService http) {
>        registerServlets(http);
>       }
> 
>       @Unbind
>       public void unbindHttp(HttpService http) {
>        unregisterServlets(http);
>       }
> 
>       private void registerServlets(HttpService http) {
>        try {
>            rawRegisterServlets(http);
>        } catch (Exception ie) {
>            throw new RuntimeException(ie);
>        }
>    }
> 
>    private void rawRegisterServlets(HttpService http) throws 
> ServletException, NamespaceException, InterruptedException {
>        http.registerServlet("/jersey-http-service-ipojo", new 
> ServletContainer(), getJerseyServletParams(), null);
>    }
> 
>    private void unregisterServlets(HttpService http) {
>        http.unregister("/jersey-http-service-ipojo");
>    }
> 
>    private Dictionary<String, String> getJerseyServletParams() {
>        Dictionary<String, String> jerseyServletParams = new Hashtable<String, 
> String>();
>        jerseyServletParams.put("javax.ws.rs.Application", 
> JerseyApplication.class.getName());
>        return jerseyServletParams;
>    }
> 
> }
> 
> Obviously, I've declared an instance in my metadata:
>       <instance component="org.apache.felix.ipojo.jersey.JerseyComponent" />
> 
> The rest of the code is identical.
> 
> Could you give me more details about the issue ?
> 
> Regards,
> 
> Clement
> 
> On 23.08.2010, at 18:14, David Allen wrote:
> 
>> Hello Clement -
>> 
>> Here is the example project from the Jersey group:
>> 
>> http://download.java.net/maven/2/com/sun/jersey/samples/osgi-http-service/1.3/osgi-http-service-1.3-project.zip
>> 
>> Here is a feature I use to get all the dependencies and load it:
>> 
>> <feature name="restful" version="1.0">
>>   <feature>http</feature>
>>   <bundle>mvn:javax.ws.rs/jsr311-api/1.1.1</bundle>
>>   <bundle>mvn:org.ops4j.pax.web/pax-web-extender-whiteboard/0.7.1</bundle>
>>   
>> <bundle>mvn:javax.xml.stream/com.springsource.javax.xml.stream/1.0.1</bundle>
>>   
>> <bundle>mvn:javax.activation/com.springsource.javax.activation/1.1.1</bundle>
>>   <bundle>mvn:javax.xml.bind/com.springsource.javax.xml.bind/2.2.0</bundle>
>>   <bundle>mvn:com.sun.jersey/jersey-core/1.3</bundle>
>>   <bundle>mvn:com.sun.jersey/jersey-server/1.3</bundle>
>>   <bundle>mvn:com.sun.jersey.samples.osgi-http-service/bundle/1.3</bundle>
>> </feature>
>> 
>> When I hit http://localhost:8181/jersey-http-service/status I get the 
>> correct "active" response.
>> 
>> Hopefully I didn't miss anything. Let me know if you need more information.
>> 
>> Thank you!
>> David
>> 
>> 
>> On Aug 23, 2010, at 2:27 AM, Clement Escoffier wrote:
>> 
>>> Hi,
>>> 
>>> Can send me or give me the url where to get the Jersey OSGi example ?
>>> 
>>> Regards,
>>> 
>>> Clement
>>> 
>>> On 23.08.2010, at 08:43, David Allen wrote:
>>> 
>>>> I have an extensive application wired using iPojo (love it!) but now I 
>>>> want to create a REST API bundle where servlets are registered through 
>>>> pax-web.
>>>> 
>>>> I was looking at Jersey for building out the endpoints, but I can't seem 
>>>> to get Jersey/iPojo to play well. I have been able to run their OSGI 
>>>> examples just fine, but when I try to replace the Activator with a Jersey 
>>>> ServletContainer (or wrapper, or extendsion, etc) I get all sorts of 
>>>> errors. I've also done the iPojo model fusion servlet example just fine.
>>>> 
>>>> Has anyone successfully wired up Jersey servlets using iPojo? If not, is 
>>>> anyone using Restlet or a similar library with iPojo?
>>>> 
>>>> Cheers,
>>>> David Allen
>>>> 
>>>> David Allen
>>>> veloGraf Systems
>>>> [email protected]
>>>> 
>>>> 
>>>> 
>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [email protected]
>>>> For additional commands, e-mail: [email protected]
>>>> 
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>> 
> 

Reply via email to