Hi,
I've managed to override configureSingleton(), but at the moment my
implementation just logs something and then delegates to
super.configureSingleton() (which is empty itself btw). I'm not exactly
sure what code I would need to include in my implementation. Any
suggestions?
Another suggestions I got on Stack Overflow was to extend
CXFNonSpringJaxrsServlet.getResourceProviders(). Same thing here, I
can't figure out what my implementation would need to do :).
Does anybody have any further pointers/suggestions? Btw. Haven't figured
out how/where to register a custom application yet, so no progress in
that direction yet.
Maarten
On 2015-01-18 21:27, Sergey Beryozkin wrote:
Hi
Right now it is not possible to pass an initialized instance directly
to the servlet, though I can see it can be handy in some cases.
In many cases one can still achieve the same with the current
approach, example, you can have Catalog properties passed too,
Catalog(a=1 b=2), see the example at the wiki. List properties can be
passed too.
if you do need to pass some ready instance then you can either go with
working directlu with JAXRSServerFactoryBean (I'd prefer it instead of
dealing directly with Jetty handlers), use jaxrs:server with an
absolute HTTP address, or in this case, extend
CxfNonSpringJaxrsServlet and override its configureSingleton class or
it it is more involved, register a custom Application.
I'll add a constructor CxfNonSpringJaxrsServlet(Application) to make
things simpler too
Cheers, Sergey
On 18/01/15 13:15, Maarten Boekhold wrote:
Hi Sergey,
I don't think so. Based on the following line:
servletHolder.setInitParameter("jaxrs.serviceClasses",
Catalog.class.getName());
I believe that this example still completely manages the lifecycle of
the Catalog bean, eg it is CXF that creates an instance of Catalog. In
my case, I already have a fully initialized instance of Catalog that I
need to use.
Maarten
On 2015-01-18 17:05, Sergey Beryozkin wrote:
Hi
Can the following help ?
https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=blob;f=distribution/src/main/release/samples/jax_rs/search/src/main/java/demo/jaxrs/search/server/Server.java;h=f0ce84e80229cd9ad2a497a0c9ab6b36a69872db;hb=HEAD
Sergey
On 18/01/15 12:27, Maarten Boekhold wrote:
Hi,
On 2015-01-18 13:03, Maarten Boekhold wrote:
I'm a bit confused still about the part where we tell the
ServletHolder (or CFXNonSpringJaxrsServler?) to dispatch incoming
requests to a specific object? The example I've seen of
CXFNonSpringJaxrsServlet uses
setInitParameter("javax.ws.rs.Application", "some.class.name"), but
that implies that CXF manages the lifecycle of the application
object,
which won't work for me. I need to manage the lifecycle myself.
To demonstrate what I would like to do, I managed to implement this
with
Jersey & Jetty. However as mentioned previously, I'd really like to be
able to do the same with CXF, because it just seems silly to have both
CXF (which I need for non-JAX-RS-reasons as well) as well as Jersey in
my project.
Code for Jersey+Jetty (note: works with Jersey 2.7, with 2.9 or
2.14 I'm
getting errors which I haven't figured out yet):
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletContainer;
public class TheApp {
TheResource resource;
public TheApp(int port) throws Exception {
ServletContextHandler sch = new ServletContextHandler();
sch.setContextPath("/xxx");
resource = new TheResource();
ResourceConfig rc = new ResourceConfig();
rc.register(resource);
ServletContainer sc = new ServletContainer(rc);
ServletHolder holder = new ServletHolder(sc);
sch.addServlet(holder, "/*");
Server server = new Server(port);
server.setHandler(sch);
server.start();
server.join();
}
public static void main(String[] args) throws Exception {
TheApp app = new TheApp(8122);
}
}
"TheResource" is simplicity itself:
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Path("request")
@Produces(MediaType.TEXT_PLAIN)
public class TheResource {
private static final Logger LOG =
LoggerFactory.getLogger(TheResource.class);
public TheResource() {
LOG.info("Creating instance of TheResource");
}
@GET
@Path("{service:.*}")
@Produces("text/plain")
public String testit(@PathParam("service") final String
service) {
LOG.info("GET method called with service = {}", service);
return "Service = " + service;
}
}
Maarten