My root question is, considering that I have three objects:
1. HttpService object (osgi)
2. A Servlet object -- a subclass or instance of
noelios.ext.servlet.ServerServlet
3. A Restlet Application object
What is the proper way to, and questions:
1. Hook the HttpService to the Servlet object? -- this should be standard
2. Configure the Servlet?
3. Hook the Servlet to the Restlet application? -- I'm not sure how to do
this
4. Properly (auto-)configure the (internal) Restlet
component/server/etc.?
5. Which one is correct: router.attach("something", *) or
router.attach("/something", *) ?
6. Why does router.attach("", *) seem to respond to every URL?
Thanks.
Appendixes:
This is the log when I use the "" form: (you can see my frustration in the
last log line where I attempted to get a 404 but get a 200 OK instead)
INFO
[org.springframework.osgi.service.exporter.support.OsgiServiceFactoryBean] -
Publishing service under classes [{java.io.Serializable,
javax.servlet.Servlet, javax.servlet.ServletConfig}]
INFO [com.x.het.rest] - ServiceEvent REGISTERED
DEBUG [org.ops4j.pax.web.extender.whiteboard.internal.AbstractTracker] -
Service available [{java.io.Serializable, javax.servlet.Servlet,
javax.servlet.ServletConfig}={org.springframework.osgi.bean.name=4ab84c,
Bundle-SymbolicName=com.x.het.rest, Bundle-Version=1.0.0, alias=/,
service.id=43}]
INFO [org.ops4j.pax.web.service.internal.HttpServiceProxy] - Creating
adefault context
INFO [org.ops4j.pax.web.service.internal.HttpServiceProxy] - Registering
servlet: [/] -> [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
[EMAIL PROTECTED] as handler
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
HttpServiceContext{httpContext=null} as handler
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
[EMAIL PROTECTED] as handler
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
[EMAIL PROTECTED] as sessionManager
DEBUG [org.mortbay.jetty] - Container HttpServiceContext{httpContext=null} +
[EMAIL PROTECTED] as handler
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] -
[EMAIL PROTECTED] as handler
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
[EMAIL PROTECTED] as handler
DEBUG [org.mortbay.jetty] - Container
[EMAIL PROTECTED]
+ [EMAIL PROTECTED] as errorHandler
INFO [org.ops4j.pax.web.service.internal.JettyServerWrapper] - added servlet
context:
[EMAIL PROTECTED]
}
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
[EMAIL PROTECTED] as sessionIdManager
DEBUG [org.mortbay.jetty] - started
[EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - started
[EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - filterNameMap=null
DEBUG [org.mortbay.jetty] - pathFilters=null
DEBUG [org.mortbay.jetty] - servletFilterMap=null
DEBUG [org.mortbay.jetty] - servletPathMap=null
DEBUG [org.mortbay.jetty] - servletNameMap=null
DEBUG [org.mortbay.jetty] - starting [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - started [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - starting [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - started [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - starting
[EMAIL PROTECTED]
}
DEBUG [org.mortbay.jetty] - starting [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - started [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - started
[EMAIL PROTECTED]
}
DEBUG [org.mortbay.jetty] - starting [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - started [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
org.ops4j.pax.web.service.internal.model.ServletModel-2 as servlet
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
(S=org.ops4j.pax.web.service.internal.model.ServletModel-2,[/]) as
servletMapping
DEBUG [org.mortbay.jetty] - filterNameMap=null
DEBUG [org.mortbay.jetty] - pathFilters=null
DEBUG [org.mortbay.jetty] - servletFilterMap=null
DEBUG [org.mortbay.jetty] -
servletPathMap={/=org.ops4j.pax.web.service.internal.model.ServletModel-2}
DEBUG [org.mortbay.jetty] -
servletNameMap={org.ops4j.pax.web.service.internal.model.ServletModel-2=org.ops4j.pax.web.service.internal.model.ServletModel-2}
May 24, 2008 3:02:14 PM org.restlet.Connector <init>
WARNING: The connector has been instantiated without any protocol.
WARN [org.restlet.Component] - The connector has been instantiated without
any protocol.
INFO [com.x.het.rest.RestletApplication] - createRoot() called
DEBUG [org.mortbay.jetty] - started
org.ops4j.pax.web.service.internal.model.ServletModel-2
INFO [org.ops4j.pax.web.extender.whiteboard.internal.AbstractTracker] -
Registered [EMAIL PROTECTED] ->
[AliasBasedRegistration{httpContextId=default,alias=/}]
INFO
[org.springframework.osgi.context.support.OsgiBundleXmlApplicationContext] -
Publishing application context with properties (
org.springframework.context.service.name=com.x.het.rest)
INFO [com.x.het.rest] - ServiceEvent REGISTERED
DEBUG [org.mortbay.jetty] - REQUEST / on
[EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] -
[EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - session=null
DEBUG [org.mortbay.jetty] -
servlet=org.ops4j.pax.web.service.internal.model.ServletModel-2
DEBUG [org.mortbay.jetty] - chain=null
DEBUG [org.mortbay.jetty] - servlet
holder=org.ops4j.pax.web.service.internal.model.ServletModel-2
May 24, 2008 3:02:20 PM org.restlet.Connector <init>
WARNING: The connector has been instantiated without any protocol.
WARN [org.restlet.Component] - The connector has been instantiated without
any protocol.
INFO [org.mortbay.jetty./] -
org.ops4j.pax.web.service.internal.model.ServletModel-2: [Noelios Restlet
Engine] - Attaching application:
[EMAIL PROTECTED] URI: /
May 24, 2008 3:02:20 PM com.noelios.restlet.LogFilter afterHandle
INFO: 2008-05-24 15:02:20 127.0.0.1 - 127.0.0.1 8080
GET / - 200 753 - 20 http://localhost:8080
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b5) Gecko/2008050509
Firefox/3.0b5 -
INFO [org.restlet.Component (17823274)] - 2008-05-24 15:02:20
127.0.0.1 - 127.0.0.1 8080 GET / - 200 753 -
20 http://localhost:8080 Mozilla/5.0 (X11; U; Linux i686; en-US;
rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 -
DEBUG [org.mortbay.jetty] - RESPONSE / 200
DEBUG [org.mortbay.jetty] - REQUEST /group.xml on
[EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] -
[EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - session=null
DEBUG [org.mortbay.jetty] -
servlet=org.ops4j.pax.web.service.internal.model.ServletModel-2
DEBUG [org.mortbay.jetty] - chain=null
DEBUG [org.mortbay.jetty] - servlet
holder=org.ops4j.pax.web.service.internal.model.ServletModel-2
INFO [com.x.het.db.inmemory.RuleDatabaseImpl] - Initializing
InMemoryRuleDatabase without context
INFO [com.x.het.RuleDatabaseBase] - Setting context to default
May 24, 2008 3:02:22 PM com.noelios.restlet.LogFilter afterHandle
INFO: 2008-05-24 15:02:22 127.0.0.1 - 127.0.0.1 8080
GET /group.xml - 200 600 - 81 http://localhost:8080
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b5) Gecko/2008050509
Firefox/3.0b5 http://localhost:8080/
INFO [org.restlet.Component (17823274)] - 2008-05-24 15:02:22
127.0.0.1 - 127.0.0.1 8080 GET /group.xml - 200
600 - 81 http://localhost:8080 Mozilla/5.0 (X11; U; Linux i686;
en-US; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 http://localhost:8080/
DEBUG [org.mortbay.jetty] - RESPONSE /group.xml 200
DEBUG [org.mortbay.jetty] - REQUEST /databases/main.xml on
[EMAIL PROTECTED]
May 24, 2008 3:02:25 PM com.noelios.restlet.LogFilter afterHandle
INFO: 2008-05-24 15:02:25 127.0.0.1 - 127.0.0.1 8080
GET /databases/main.xml - 200 753 - 1
http://localhost:8080 Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b5)
Gecko/2008050509 Firefox/3.0b5 http://localhost:8080/
DEBUG [org.mortbay.jetty] -
[EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - session=null
DEBUG [org.mortbay.jetty] -
servlet=org.ops4j.pax.web.service.internal.model.ServletModel-2
DEBUG [org.mortbay.jetty] - chain=null
DEBUG [org.mortbay.jetty] - servlet
holder=org.ops4j.pax.web.service.internal.model.ServletModel-2
INFO [org.restlet.Component (17823274)] - 2008-05-24 15:02:25
127.0.0.1 - 127.0.0.1 8080 GET /databases/main.xml -
200 753 - 1 http://localhost:8080 Mozilla/5.0 (X11; U; Linux
i686; en-US; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5
http://localhost:8080/
DEBUG [org.mortbay.jetty] - RESPONSE /databases/main.xml 200
DEBUG [org.mortbay.jetty] - REQUEST /strange-it-doesntgiveme404error!!! on
[EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] -
[EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - session=null
DEBUG [org.mortbay.jetty] -
servlet=org.ops4j.pax.web.service.internal.model.ServletModel-2
DEBUG [org.mortbay.jetty] - chain=null
DEBUG [org.mortbay.jetty] - servlet
holder=org.ops4j.pax.web.service.internal.model.ServletModel-2
INFO [org.restlet.Component (17823274)] - 2008-05-24 15:02:39
127.0.0.1 - 127.0.0.1 8080 GET
/strange-it-doesntgiveme404error!!! - 200 753 - 1
http://localhost:8080 Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b5)
Gecko/2008050509 Firefox/3.0b5 -
DEBUG [org.mortbay.jetty] - RESPONSE /strange-it-doesntgiveme404error!!!
200
May 24, 2008 3:02:39 PM com.noelios.restlet.LogFilter afterHandle
INFO: 2008-05-24 15:02:39 127.0.0.1 - 127.0.0.1 8080
GET /strange-it-doesntgiveme404error!!! - 200 753 - 1
http://localhost:8080 Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b5)
Gecko/2008050509 Firefox/3.0b5 -
This is the log when I use the "/" form:
INFO [com.x.het.rest] - ServiceEvent REGISTERED
DEBUG [org.ops4j.pax.web.extender.whiteboard.internal.AbstractTracker] -
Service available [{java.io.Serializable, javax.servlet.Servlet,
javax.servlet.ServletConfig}={org.springframework.osgi.bean.name=1b5a40a,
Bundle-SymbolicName=com.x.het.rest, Bundle-Version=1.0.0, alias=/,
service.id=43}]
INFO [org.ops4j.pax.web.service.internal.HttpServiceProxy] - Creating
adefault context
INFO [org.ops4j.pax.web.service.internal.HttpServiceProxy] - Registering
servlet: [/] -> [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
[EMAIL PROTECTED] as handler
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
HttpServiceContext{httpContext=null} as handler
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
[EMAIL PROTECTED] as handler
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
[EMAIL PROTECTED] as sessionManager
DEBUG [org.mortbay.jetty] - Container HttpServiceContext{httpContext=null} +
[EMAIL PROTECTED] as handler
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] -
[EMAIL PROTECTED] as handler
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
[EMAIL PROTECTED] as handler
DEBUG [org.mortbay.jetty] - Container
[EMAIL PROTECTED]
+ [EMAIL PROTECTED] as errorHandler
INFO [org.ops4j.pax.web.service.internal.JettyServerWrapper] - added servlet
context:
[EMAIL PROTECTED]
}
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
[EMAIL PROTECTED] as sessionIdManager
DEBUG [org.mortbay.jetty] - started
[EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - started
[EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - filterNameMap=null
DEBUG [org.mortbay.jetty] - pathFilters=null
DEBUG [org.mortbay.jetty] - servletFilterMap=null
DEBUG [org.mortbay.jetty] - servletPathMap=null
DEBUG [org.mortbay.jetty] - servletNameMap=null
DEBUG [org.mortbay.jetty] - starting [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - started [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - starting [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - started [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - starting
[EMAIL PROTECTED]
}
DEBUG [org.mortbay.jetty] - starting [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - started [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - started
[EMAIL PROTECTED]
}
DEBUG [org.mortbay.jetty] - starting [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - started [EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
org.ops4j.pax.web.service.internal.model.ServletModel-2 as servlet
DEBUG [org.mortbay.jetty] - Container [EMAIL PROTECTED] +
(S=org.ops4j.pax.web.service.internal.model.ServletModel-2,[/]) as
servletMapping
DEBUG [org.mortbay.jetty] - filterNameMap=null
DEBUG [org.mortbay.jetty] - pathFilters=null
DEBUG [org.mortbay.jetty] - servletFilterMap=null
DEBUG [org.mortbay.jetty] -
servletPathMap={/=org.ops4j.pax.web.service.internal.model.ServletModel-2}
DEBUG [org.mortbay.jetty] -
servletNameMap={org.ops4j.pax.web.service.internal.model.ServletModel-2=org.ops4j.pax.web.service.internal.model.ServletModel-2}
May 24, 2008 2:44:36 PM org.restlet.Connector <init>
WARNING: The connector has been instantiated without any protocol.
WARN [org.restlet.Component] - The connector has been instantiated without
any protocol.
INFO [com.x.het.rest.RestletApplication] - createRoot() called
DEBUG [org.mortbay.jetty] - started
org.ops4j.pax.web.service.internal.model.ServletModel-2
INFO [org.ops4j.pax.web.extender.whiteboard.internal.AbstractTracker] -
Registered [EMAIL PROTECTED] ->
[AliasBasedRegistration{httpContextId=default,alias=/}]
INFO
[org.springframework.osgi.context.support.OsgiBundleXmlApplicationContext] -
Publishing application context with properties (
org.springframework.context.service.name=com.x.het.rest)
INFO [com.x.het.rest] - ServiceEvent REGISTERED
DEBUG [org.mortbay.jetty] - REQUEST / on
[EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] -
[EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - session=null
DEBUG [org.mortbay.jetty] -
servlet=org.ops4j.pax.web.service.internal.model.ServletModel-2
DEBUG [org.mortbay.jetty] - chain=null
DEBUG [org.mortbay.jetty] - servlet
holder=org.ops4j.pax.web.service.internal.model.ServletModel-2
May 24, 2008 2:44:44 PM org.restlet.Connector <init>
WARNING: The connector has been instantiated without any protocol.
WARN [org.restlet.Component] - The connector has been instantiated without
any protocol.
INFO [org.mortbay.jetty./] -
org.ops4j.pax.web.service.internal.model.ServletModel-2: [Noelios Restlet
Engine] - Attaching application:
[EMAIL PROTECTED] URI: /
May 24, 2008 2:44:44 PM com.noelios.restlet.LogFilter afterHandle
INFO: 2008-05-24 14:44:44 127.0.0.1 - 127.0.0.1 8080
GET / - 404 330 - 7 http://localhost:8080
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b5) Gecko/2008050509
Firefox/3.0b5 -
INFO [org.restlet.Component (24758223)] - 2008-05-24 14:44:44
127.0.0.1 - 127.0.0.1 8080 GET / - 404 330 -
7 http://localhost:8080 Mozilla/5.0 (X11; U; Linux i686; en-US;
rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 -
DEBUG [org.mortbay.jetty] - RESPONSE / 404
DEBUG [org.mortbay.jetty] - REQUEST /group.xml on
[EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] -
[EMAIL PROTECTED]
DEBUG [org.mortbay.jetty] - session=null
DEBUG [org.mortbay.jetty] -
servlet=org.ops4j.pax.web.service.internal.model.ServletModel-2
DEBUG [org.mortbay.jetty] - chain=null
DEBUG [org.mortbay.jetty] - servlet
holder=org.ops4j.pax.web.service.internal.model.ServletModel-2
INFO [org.restlet.Component (24758223)] - 2008-05-24 14:45:07
127.0.0.1 - 127.0.0.1 8080 GET /group.xml - 404
330 - 1 http://localhost:8080 Mozilla/5.0 (X11; U; Linux i686;
en-US; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 -
DEBUG [org.mortbay.jetty] - RESPONSE /group.xml 404
May 24, 2008 2:45:07 PM com.noelios.restlet.LogFilter afterHandle
INFO: 2008-05-24 14:45:07 127.0.0.1 - 127.0.0.1 8080
GET /group.xml - 404 330 - 1 http://localhost:8080
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b5) Gecko/2008050509
Firefox/3.0b5 -
On Sat, May 24, 2008 at 2:45 PM, Hendy Irawan <[EMAIL PROTECTED]>
wrote:
> In a Restlet application, if I do this:
>
> @Override
> public Restlet createRoot() {
> log.info("createRoot() called");
> Router router = new Router(getContext());
> // Front page "index"
> router.attach("", FrontResource.class);
> // Rule database group
> router.attach("group", GroupResource.class);
> return router;
> }
>
> The application works fine, but only if I initially access i.e.
> http://localhost:8080/
>
> Accessing other URLs, like http://localhost:8080/something.xml doesn't
> give me 404, but instead gives the front resource.
>
> group resource is accessible through http://localhost:8080/group and
> http://localhost:8080/group.xml
>
> If I change the implementation to this:
>
> @Override
> public Restlet createRoot() {
> log.info("createRoot() called");
> Router router = new Router(getContext());
> // Front page "index"
> router.attach("/", FrontResource.class);
> // Rule database group
> router.attach("/group", GroupResource.class);
> return router;
> }
>
> The application doesn't work, accessing i.e. http://localhost:8080/ gives
> me:
>
> The server has not found anything matching the request URI
>
> You can get technical details
> here<http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5>
> .
> Please continue your visit at our home page <http://localhost:8080/>.
> neither does any other URLs.
>
> Please help. Thank you.
>
> I'm using restlet 1.1-m4.
>
> --
> Best regards,
> Hendy Irawan
--
Best regards,
Hendy Irawan