You are using the same org.apache.cxf.rs.address for both services. This
will not work. For each service the jetty transport is used in your
case. Those jetties do not work together I think.
You could either use two different port numbers or use addresses like
"/service1" and "/service2". In the first case we have two different
jetty instances in the second case we use the servlet transport and
share the
same default web port.
Best regards
Christian
On 09.01.2014 16:46, Gavino Isoni wrote:
Hi,
Consider the following activator code:
package rest.sample.greetings;
import java.util.Dictionary;
import java.util.Hashtable;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import rest.sample.greetings.impl.ByeServiceImpl;
import rest.sample.greetings.impl.HelloServiceImpl;
public class Activator implements BundleActivator {
private ServiceRegistration registration;
private ServiceRegistration registration2;
public void start(BundleContext context) throws Exception {
System.out.println("START GREETINGS BUNDLE");
Dictionary<String, Object> props1 = getProperties();
registration =
context.registerService(HelloServiceImpl.class.getName(), new
HelloServiceImpl(context), props1);
Dictionary<String, Object> props2 = getProperties();
registration2 =
context.registerService(ByeServiceImpl.class.getName(), new
ByeServiceImpl(context), props2);
}
private Dictionary<String, Object> getProperties() {
Dictionary<String, Object> props = new Hashtable<String, Object>();
props.put("service.exported.interfaces", "*");
props.put("service.exported.configs", "org.apache.cxf.rs");
props.put("service.exported.intents", "HTTP");
props.put("org.apache.cxf.rs.address", "http://localhost:8181/");
return props;
}
public void stop(BundleContext context) throws Exception {
registration.unregister();
registration2.unregister();
}
}
package rest.sample.greetings.api;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/bye")
public interface ByeService {
@GET
@Path("/sayBye")
@Produces(MediaType.TEXT_PLAIN)
public String sayBye();
}
package rest.sample.greetings.api;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public interface HelloService {
@GET
@Path("/sayHello")
@Produces(MediaType.TEXT_PLAIN)
public String sayHello();
}
When the two services are registered, seems that the last one overwrite se
first one.
if I try to invoke the services, with the following respective URI:
http://localhost:8181/hello/sayHello
http://localhost:8181/bye/sayBye
only one works, and for the other one is reported the following error:
[qtp22790308-54 - /hello/sayHello] WARN
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor - No root resource
matching request path /hello/sayHello has been found, Relative Path:
/hello/sayHello.
i'm using the multibundle-ditribution 1.5
how can I invoke both services?
thanks for your attention.
--
Christian Schneider
http://www.liquid-reality.de
Open Source Architect
http://www.talend.com