It seems like a general problem and not just a Pax-Web problem. It is
probably not possible to have two servlets with overlapping context paths.
Although I think it should be possible if one could control the order in
which they are invoked.

Strange, I would think that this would be a pretty normal thing.

You seem to be very knowledgable about servlets. How does the actual
invoking of a servlet work? Is it possible to have a chain where one
servlet leaves the request unhandled to be passed on to the next? If not,
then I guess it's Jetty internals that decide what servlet to invoke.

Would a workaround be to move all my static files out of the bundle and not
use the registerResources() method at all but only use jetty.xml and
org.eclipse.jetty.server.handler.ResourceHandler. Would I loose any Pax-Web
functionality this way?

/Bengt


2016-11-10 15:35 GMT+01:00 'Achim Nierbeck' via OPS4J <
[email protected]>:

> ok, at least #1 is solved ... that one worried me.
>
> Using "/" for the HttpService in conjunction with aliases plus an extra
> handler on the same context path ... seems hard to achieve. I fear we need
> an issue for this.
> Combining two handlers on the same context path seems to be a bit tricky
> right now.
>
> regards, Achim
>
>
> 2016-11-10 15:16 GMT+01:00 Bengt Rodehav <[email protected]>:
>
>> An update on this problem...
>>
>> Problem #1 was not a problem but a bug in my code. I created the "//"
>> (double slash) all by myself. Sorry for the buzz.
>>
>> Problem #2 however still exists. If I register resources on the root url
>> using
>>
>>   mWebService.registerResources("/", "/webroot", mHttpContext);
>>
>> Then I cannot publish any resources using jetty.xml and
>> org.eclipse.jetty.server.handler.ResourceHandler.
>>
>> Pax-Web's resource handler does not seem to pass the request on to the
>> handler I register in jetty.xml.
>>
>> So my problem is that I need to accomplish both of these things at the
>> same time:
>>
>> - Map "/logo" to a normal directory using jetty.xml and
>> org.eclipse.jetty.server.handler.ResourceHandler
>> - Map "/" to the "/webroot" directory in my bundle using the
>> registerResources() method.
>>
>> How can I accomplish this?
>>
>> I did try to use "insertRule" in my jetty.xml instead of "addHandler"
>> since I hoped that this would put the "/logo" rule first. However, this
>> syntax does not seem to be supported.
>>
>> /Bengt
>>
>> 2016-11-09 8:58 GMT+01:00 Bengt Rodehav <[email protected]>:
>>
>>> OK - thanks.
>>>
>>> Finally got you :-)
>>>
>>> /Bengt
>>>
>>> 2016-11-08 21:27 GMT+01:00 'Achim Nierbeck' via OPS4J <
>>> [email protected]>:
>>>
>>>> Hi
>>>>
>>>> regarding registering resources on "/" ... I'd expect it to work in the
>>>> way you describe it, but you might have found a bug there.
>>>> The thing about the "/" - context, is. It is special. Since all
>>>> HttpService registered "resources" are registered with this as the context
>>>> ... So it might be that an additional context from outside doesn't play
>>>> along. Will need to test.
>>>>
>>>> regards, Achim
>>>>
>>>>
>>>> 2016-11-08 8:58 GMT+01:00 Bengt Rodehav <[email protected]>:
>>>>
>>>>> Hi again Achim,
>>>>>
>>>>> I'm not exactly sure how you mean. The way I register my resources is
>>>>> via the WebContainer (which I get with iPojo) as follows:
>>>>>
>>>>>   private HttpContext mHttpContext;
>>>>>
>>>>>   @Requires
>>>>>   private WebContainer mWebService;
>>>>>   ...
>>>>>   mHttpContext = mWebService.createDefaultHttpContext();
>>>>>   mWebService.registerResources("/", "/webroot", mHttpContext);
>>>>>
>>>>> The above will get me the double slash problem. If I instead do:
>>>>>
>>>>>   mWebService.registerResources("", "/webroot", mHttpContext);
>>>>>
>>>>> Then I get:
>>>>>
>>>>> Caused by: java.lang.IllegalArgumentException: Alias does not start
>>>>> with slash (/)
>>>>>         at org.ops4j.pax.web.service.spi.
>>>>> model.ServletModel.validateAlias(ServletModel.java:169)
>>>>>         at org.ops4j.pax.web.service.spi.
>>>>> model.ServletModel.<init>(ServletModel.java:53)
>>>>>         at org.ops4j.pax.web.service.spi.
>>>>> model.ResourceModel.<init>(ResourceModel.java:29)
>>>>>         at org.ops4j.pax.web.service.inte
>>>>> rnal.HttpServiceStarted.registerResources(HttpServiceStarted.java:262)
>>>>>         at org.ops4j.pax.web.service.inte
>>>>> rnal.HttpServiceProxy.registerResources(HttpServiceProxy.java:71)
>>>>>         at org.ops4j.pax.web.service.WebC
>>>>> ontainer$$Proxy.registerResources(Unknown Source)
>>>>>         at se.digia.hp.web.HpWebService._
>>>>> _M_init(HpWebService.java:134)
>>>>>         at se.digia.hp.web.HpWebService.init(HpWebService.java)
>>>>>         at se.digia.hp.web.HpWebService._
>>>>> _M_starting(HpWebService.java:47)
>>>>>         at se.digia.hp.web.HpWebService.starting(HpWebService.java)
>>>>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>>>>> Method)[:1.8.0_74]
>>>>>         at sun.reflect.NativeMethodAccess
>>>>> orImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_74]
>>>>>         at sun.reflect.DelegatingMethodAc
>>>>> cessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_74]
>>>>>         at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_74]
>>>>>         at org.apache.felix.ipojo.util.Ca
>>>>> llback.call(Callback.java:237)[50:org.apache.felix.ipojo:1.12.1]
>>>>>         at org.apache.felix.ipojo.util.Ca
>>>>> llback.call(Callback.java:193)[50:org.apache.felix.ipojo:1.12.1]
>>>>>         at org.apache.felix.ipojo.handler
>>>>> s.lifecycle.callback.LifecycleCallback.call(LifecycleCallbac
>>>>> k.java:86)[50:org.apache.felix.ipojo:1.12.1]
>>>>>         at org.apache.felix.ipojo.handler
>>>>> s.lifecycle.callback.LifecycleCallbackHandler.__M_stateChang
>>>>> ed(LifecycleCallbackHandler.java:162)[50:org.apache.felix.i
>>>>> pojo:1.12.1]
>>>>>
>>>>> Specifying null does not work either. If I do
>>>>>
>>>>>   mWebService.registerResources(null, "/webroot", mHttpContext);
>>>>>
>>>>> Then I get:
>>>>>
>>>>> Caused by: java.lang.IllegalArgumentException: Alias does not start
>>>>> with slash (/)
>>>>>         at org.ops4j.pax.web.service.spi.
>>>>> model.ServletModel.validateAlias(ServletModel.java:169)
>>>>>         at org.ops4j.pax.web.service.spi.
>>>>> model.ServletModel.<init>(ServletModel.java:53)
>>>>>         at org.ops4j.pax.web.service.spi.
>>>>> model.ResourceModel.<init>(ResourceModel.java:29)
>>>>>         at org.ops4j.pax.web.service.inte
>>>>> rnal.HttpServiceStarted.registerResources(HttpServiceStarted.java:262)
>>>>>         at org.ops4j.pax.web.service.inte
>>>>> rnal.HttpServiceProxy.registerResources(HttpServiceProxy.java:71)
>>>>>         at org.ops4j.pax.web.service.WebC
>>>>> ontainer$$Proxy.registerResources(Unknown Source)
>>>>>         at se.digia.hp.web.HpWebService._
>>>>> _M_init(HpWebService.java:134)
>>>>>         at se.digia.hp.web.HpWebService.init(HpWebService.java)
>>>>>         at se.digia.hp.web.HpWebService._
>>>>> _M_starting(HpWebService.java:47)
>>>>>         at se.digia.hp.web.HpWebService.starting(HpWebService.java)
>>>>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>>>>> Method)[:1.8.0_74]
>>>>>         at sun.reflect.NativeMethodAccess
>>>>> orImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_74]
>>>>>         at sun.reflect.DelegatingMethodAc
>>>>> cessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_74]
>>>>>         at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_74]
>>>>>         at org.apache.felix.ipojo.util.Ca
>>>>> llback.call(Callback.java:237)[50:org.apache.felix.ipojo:1.12.1]
>>>>>         at org.apache.felix.ipojo.util.Ca
>>>>> llback.call(Callback.java:193)[50:org.apache.felix.ipojo:1.12.1]
>>>>>         at org.apache.felix.ipojo.handler
>>>>> s.lifecycle.callback.LifecycleCallback.call(LifecycleCallbac
>>>>> k.java:86)[50:org.apache.felix.ipojo:1.12.1]
>>>>>         at org.apache.felix.ipojo.handler
>>>>> s.lifecycle.callback.LifecycleCallbackHandler.__M_stateChang
>>>>> ed(LifecycleCallbackHandler.java:162)[50:org.apache.felix.i
>>>>> pojo:1.12.1]
>>>>>
>>>>> It looks like the code you are referring to registers a Servlet which
>>>>> I do not do directly for these resources (although Pax-Web ResourceServlet
>>>>> is probably used under the hood).
>>>>>
>>>>> Perhaps I'd better give you the overall picture...
>>>>>
>>>>> I have a web application consisting of html/javascript/css files.
>>>>> These are included in my app and will reside in my bundle. They are 
>>>>> located
>>>>> in my bundle directory "\webroot". I want "\webroot" to correspond to the
>>>>> root ("\") context path.
>>>>>
>>>>> I also have a couple of Servlets providing services for my javascript
>>>>> files:
>>>>>
>>>>> - One using the context path "\api" that provides general services.
>>>>> - One using the context path "\admin\login" for logging in. Shiro is
>>>>> automatically implementing "\admin\logout" since I specify in my shiro.ini
>>>>> that this should be the logout page.
>>>>>
>>>>> In addition to the above, I need to externalize some of my resources
>>>>> to a normal directory in the file system. My web application uses 
>>>>> different
>>>>> logos for the different clients and they can upload their logos on their
>>>>> own so they cannot be a static part of the web  application.
>>>>>
>>>>> So I need something like this:
>>>>>
>>>>> a) The bundle's "\webroot" mapped to "\"
>>>>> b) Servlet mapped to "\api"
>>>>> c) Serlvet mapped to "\admin\login" (and "\admin\logout" via Shiro)
>>>>> d) Normal directory mapped to "\logo".
>>>>>
>>>>> I can get the individual pieces working but not together. If I put
>>>>> everything under "\hp" instead of under "\" then it works fine but that
>>>>> context part is not acceptable. I need to put it under "\" since there are
>>>>> existing URL's on the public site that must remain as today.
>>>>>
>>>>> Might sound a bit complicated but I don't think it's an unusual setup.
>>>>>
>>>>> /Bengt
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> 2016-11-07 20:09 GMT+01:00 'Achim Nierbeck' via OPS4J <
>>>>> [email protected]>:
>>>>>
>>>>>> Hi Bengt,
>>>>>>
>>>>>> regarding issue #1 ... could you try to do something as "documented"
>>>>>> in this[1] integration test?
>>>>>> If you abandon the first parameter, with only the alias, it's always
>>>>>> bound to the root "/".
>>>>>>
>>>>>> regarding issue#2 ... I'm not sure yet, but might be solved with #1
>>>>>> done right ;)
>>>>>>
>>>>>> regards, Achim
>>>>>>
>>>>>> [1] - https://github.com/ops4j/org.ops4j.pax.web/blob/master/pax
>>>>>> -web-itest/pax-web-itest-container/pax-web-itest-container-j
>>>>>> etty/src/test/java/org/ops4j/pax/web/itest/jetty/RootAliasIn
>>>>>> tegrationTest.java
>>>>>>
>>>>>>
>>>>>> 2016-11-07 17:40 GMT+01:00 Bengt Rodehav <[email protected]>:
>>>>>>
>>>>>>> I'm using Pax-Web in Karaf 4.0.7.
>>>>>>>
>>>>>>> I have two problems with aliases:
>>>>>>>
>>>>>>> *Problem #1*
>>>>>>>
>>>>>>> If I register resources for the context path "/" (i e the root) as
>>>>>>> follows:
>>>>>>>
>>>>>>>     mWebService.registerResources("/", "/webroot", mHttpContext);
>>>>>>>
>>>>>>> Then my application is reachable at:
>>>>>>>
>>>>>>> http://localhost:8183//admin/login
>>>>>>>
>>>>>>> but not at:
>>>>>>>
>>>>>>> http://localhost:8183/admin/login
>>>>>>>
>>>>>>> I want to get rid of the double slash. However if I try this instead:
>>>>>>>
>>>>>>>     mWebService.registerResources("", "/webroot", mHttpContext);
>>>>>>>
>>>>>>> Then I get:
>>>>>>>
>>>>>>> Caused by: java.lang.IllegalArgumentException: Alias does not start
>>>>>>> with slash (/)
>>>>>>>         at org.ops4j.pax.web.service.spi.
>>>>>>> model.ServletModel.validateAlias(ServletModel.java:169)
>>>>>>>         at org.ops4j.pax.web.service.spi.
>>>>>>> model.ServletModel.<init>(ServletModel.java:53)
>>>>>>>         at org.ops4j.pax.web.service.spi.
>>>>>>> model.ResourceModel.<init>(ResourceModel.java:29)
>>>>>>>         at org.ops4j.pax.web.service.inte
>>>>>>> rnal.HttpServiceStarted.registerResources(HttpServiceStarted
>>>>>>> .java:262)
>>>>>>>         at org.ops4j.pax.web.service.inte
>>>>>>> rnal.HttpServiceProxy.registerResources(HttpServiceProxy.java:71)
>>>>>>>         at org.ops4j.pax.web.service.WebC
>>>>>>> ontainer$$Proxy.registerResources(Unknown Source)
>>>>>>>         at se.digia.hp.web.HpWebService._
>>>>>>> _M_init(HpWebService.java:133)
>>>>>>>         at se.digia.hp.web.HpWebService.init(HpWebService.java)
>>>>>>>         at se.digia.hp.web.HpWebService._
>>>>>>> _M_starting(HpWebService.java:47)
>>>>>>>         at se.digia.hp.web.HpWebService.starting(HpWebService.java)
>>>>>>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>>>>>>> Method)[:1.8.0_74]
>>>>>>>         at sun.reflect.NativeMethodAccess
>>>>>>> orImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_74]
>>>>>>>         at sun.reflect.DelegatingMethodAc
>>>>>>> cessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_74]
>>>>>>>         at java.lang.reflect.Method.invok
>>>>>>> e(Method.java:498)[:1.8.0_74]
>>>>>>>         at org.apache.felix.ipojo.util.Ca
>>>>>>> llback.call(Callback.java:237)[50:org.apache.felix.ipojo:1.12.1]
>>>>>>>         at org.apache.felix.ipojo.util.Ca
>>>>>>> llback.call(Callback.java:193)[50:org.apache.felix.ipojo:1.12.1]
>>>>>>>         at org.apache.felix.ipojo.handler
>>>>>>> s.lifecycle.callback.LifecycleCallback.call(LifecycleCallbac
>>>>>>> k.java:86)[50:org.apache.felix.ipojo:1.12.1]
>>>>>>>         at org.apache.felix.ipojo.handler
>>>>>>> s.lifecycle.callback.LifecycleCallbackHandler.__M_stateChang
>>>>>>> ed(LifecycleCallbackHandler.java:162)[50:org.apache.felix.i
>>>>>>> pojo:1.12.1]
>>>>>>>
>>>>>>> How can I get rid of the "double slash"?
>>>>>>>
>>>>>>> *Problem #2*
>>>>>>>
>>>>>>> Assume that my web application resides at the context url:
>>>>>>>
>>>>>>> http://localhost:8183/hp
>>>>>>>
>>>>>>> I also register a separate resource directory directly in jetty with
>>>>>>> the following configuration (as I was helped by Achim on this forum):
>>>>>>>
>>>>>>> <?xml version="1.0"?>
>>>>>>> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "
>>>>>>> http://www.eclipse.org/jetty/configure_9_0.dtd";>
>>>>>>>
>>>>>>> <Configure id="Server" class="org.eclipse.jetty.server.Server">
>>>>>>>   <Get name="handler">
>>>>>>>     <Call name="addHandler">
>>>>>>>       <Arg>
>>>>>>>         <New class="org.eclipse.jetty.serve
>>>>>>> r.handler.ContextHandler">
>>>>>>>           <Set name="contextPath">/logo</Set>
>>>>>>>           <Set name="handler">
>>>>>>>             <New class="org.eclipse.jetty.serve
>>>>>>> r.handler.ResourceHandler">
>>>>>>>               <Set name="resourceBase">../../common/etc/logo</Set>
>>>>>>>               <Set name="directoriesListed">true</Set>
>>>>>>>             </New>
>>>>>>>           </Set>
>>>>>>>         </New>
>>>>>>>       </Arg>
>>>>>>>     </Call>
>>>>>>>   </Get>
>>>>>>> </Configure>
>>>>>>>
>>>>>>> This works fine. But when I try to move the application up to the
>>>>>>> root (which has the double slash problem as described in Problem #1) to 
>>>>>>> the
>>>>>>> following url:
>>>>>>>
>>>>>>> http://localhost:8183//
>>>>>>>
>>>>>>> Then the separate resource via my jetty.xml does not work. It seems
>>>>>>> that it cannot be a descendant of the context path I use for my web
>>>>>>> application. But, since this is a public web application, with a
>>>>>>> predetermined url, it must reside at the root. Then there is no context
>>>>>>> path that works for my separate resource directory since all paths are
>>>>>>> descendants of root.
>>>>>>>
>>>>>>> This seems a bit weird...
>>>>>>>
>>>>>>> /Bengt
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> --
>>>>>>> ------------------
>>>>>>> OPS4J - http://www.ops4j.org - [email protected]
>>>>>>>
>>>>>>> ---
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "OPS4J" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>> send an email to [email protected].
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>> Apache Member
>>>>>> Apache Karaf <http://karaf.apache.org/> Committer & PMC
>>>>>> OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/>
>>>>>> Committer & Project Lead
>>>>>> blog <http://notizblog.nierbeck.de/>
>>>>>> Co-Author of Apache Karaf Cookbook <http://bit.ly/1ps9rkS>
>>>>>>
>>>>>> Software Architect / Project Manager / Scrum Master
>>>>>>
>>>>>> --
>>>>>> --
>>>>>> ------------------
>>>>>> OPS4J - http://www.ops4j.org - [email protected]
>>>>>>
>>>>>> ---
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "OPS4J" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to [email protected].
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>> --
>>>>> --
>>>>> ------------------
>>>>> OPS4J - http://www.ops4j.org - [email protected]
>>>>>
>>>>> ---
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "OPS4J" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to [email protected].
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> Apache Member
>>>> Apache Karaf <http://karaf.apache.org/> Committer & PMC
>>>> OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/>
>>>> Committer & Project Lead
>>>> blog <http://notizblog.nierbeck.de/>
>>>> Co-Author of Apache Karaf Cookbook <http://bit.ly/1ps9rkS>
>>>>
>>>> Software Architect / Project Manager / Scrum Master
>>>>
>>>> --
>>>> --
>>>> ------------------
>>>> OPS4J - http://www.ops4j.org - [email protected]
>>>>
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "OPS4J" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>> --
>> --
>> ------------------
>> OPS4J - http://www.ops4j.org - [email protected]
>>
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "OPS4J" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> --
>
> Apache Member
> Apache Karaf <http://karaf.apache.org/> Committer & PMC
> OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer &
> Project Lead
> blog <http://notizblog.nierbeck.de/>
> Co-Author of Apache Karaf Cookbook <http://bit.ly/1ps9rkS>
>
> Software Architect / Project Manager / Scrum Master
>
> --
> --
> ------------------
> OPS4J - http://www.ops4j.org - [email protected]
>
> ---
> You received this message because you are subscribed to the Google Groups
> "OPS4J" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
-- 
------------------
OPS4J - http://www.ops4j.org - [email protected]

--- 
You received this message because you are subscribed to the Google Groups 
"OPS4J" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to