I'm trying to figure out how to test a Component and I've encountered this
piece of code in HostRoute that will most likely always throw an NPE:
...
int resourcePortValue = request.getResourceRef().getHostPort();
if (resourcePortValue == -1) {
resourcePortValue = request.getResourceRef()
.getSchemeProtocol().getDefaultPort();
}
All of the checks before and afterwards test for null but the
getSchemePort() might be null as well, so getDefaultPort() will throw the
NPE.
Just create a request in a unit test:
Request req = new Request(Method.GET, "/foo");
component.handle(req, res);
with a relative URL and you'll get:
java.lang.NullPointerException
at org.restlet.engine.component.HostRoute.score(HostRoute.java:159)
at org.restlet.util.RouteList.getFirst(RouteList.java:121)
at org.restlet.routing.Router.getNext(Router.java:639)
at org.restlet.routing.Router.handle(Router.java:733)
at org.restlet.routing.Filter.doHandle(Filter.java:156)
at
org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:154)
at org.restlet.routing.Filter.handle(Filter.java:203)
at org.restlet.engine.ChainHelper.handle(ChainHelper.java:111)
at org.restlet.Component.handle(Component.java:390)
So it seems this has to be an absolute URL, which seems wrong to me. If my
Component only has a default host, I'm not using name-based virtual hosts at
all. Don't make me supply a value that has no function. In fact, the rest of
the code in HostRoute.score() looks like it should work well with a relative
URI and (default) host matching.
--
View this message in context:
http://restlet-discuss.1400322.n2.nabble.com/NPE-in-HostRoute-tp5342978p5342978.html
Sent from the Restlet Discuss mailing list archive at Nabble.com.
------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2638885