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.validateAli >> as(ServletModel.java:169) >> at org.ops4j.pax.web.service.spi.model.ServletModel.<init>(Serv >> letModel.java:53) >> at org.ops4j.pax.web.service.spi.model.ResourceModel.<init>(Res >> ourceModel.java:29) >> at org.ops4j.pax.web.service.internal.HttpServiceStarted.regist >> erResources(HttpServiceStarted.java:262) >> at org.ops4j.pax.web.service.internal.HttpServiceProxy.register >> Resources(HttpServiceProxy.java:71) >> at >> org.ops4j.pax.web.service.WebContainer$$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.NativeMethodAccessorImpl.invoke(NativeMethodAcce >> ssorImpl.java:62)[:1.8.0_74] >> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe >> thodAccessorImpl.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.Callback.call(Callback.java:237) >> [50:org.apache.felix.ipojo:1.12.1] >> at org.apache.felix.ipojo.util.Callback.call(Callback.java:193) >> [50:org.apache.felix.ipojo:1.12.1] >> at org.apache.felix.ipojo.handlers.lifecycle.callback.Lifecycle >> Callback.call(LifecycleCallback.java:86)[50:org.apache. >> felix.ipojo:1.12.1] >> at org.apache.felix.ipojo.handlers.lifecycle.callback.Lifecycle >> CallbackHandler.__M_stateChanged(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.validateAli >> as(ServletModel.java:169) >> at org.ops4j.pax.web.service.spi.model.ServletModel.<init>(Serv >> letModel.java:53) >> at org.ops4j.pax.web.service.spi.model.ResourceModel.<init>(Res >> ourceModel.java:29) >> at org.ops4j.pax.web.service.internal.HttpServiceStarted.regist >> erResources(HttpServiceStarted.java:262) >> at org.ops4j.pax.web.service.internal.HttpServiceProxy.register >> Resources(HttpServiceProxy.java:71) >> at >> org.ops4j.pax.web.service.WebContainer$$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.NativeMethodAccessorImpl.invoke(NativeMethodAcce >> ssorImpl.java:62)[:1.8.0_74] >> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe >> thodAccessorImpl.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.Callback.call(Callback.java:237) >> [50:org.apache.felix.ipojo:1.12.1] >> at org.apache.felix.ipojo.util.Callback.call(Callback.java:193) >> [50:org.apache.felix.ipojo:1.12.1] >> at org.apache.felix.ipojo.handlers.lifecycle.callback.Lifecycle >> Callback.call(LifecycleCallback.java:86)[50:org.apache. >> felix.ipojo:1.12.1] >> at org.apache.felix.ipojo.handlers.lifecycle.callback.Lifecycle >> CallbackHandler.__M_stateChanged(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.validateAli >>>> as(ServletModel.java:169) >>>> at org.ops4j.pax.web.service.spi.model.ServletModel.<init>(Serv >>>> letModel.java:53) >>>> at org.ops4j.pax.web.service.spi.model.ResourceModel.<init>(Res >>>> ourceModel.java:29) >>>> at org.ops4j.pax.web.service.internal.HttpServiceStarted.regist >>>> erResources(HttpServiceStarted.java:262) >>>> at org.ops4j.pax.web.service.internal.HttpServiceProxy.register >>>> Resources(HttpServiceProxy.java:71) >>>> at >>>> org.ops4j.pax.web.service.WebContainer$$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.NativeMethodAccessorImpl.invoke(NativeMethodAcce >>>> ssorImpl.java:62)[:1.8.0_74] >>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe >>>> thodAccessorImpl.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.Callback.call(Callback.java:237) >>>> [50:org.apache.felix.ipojo:1.12.1] >>>> at org.apache.felix.ipojo.util.Callback.call(Callback.java:193) >>>> [50:org.apache.felix.ipojo:1.12.1] >>>> at org.apache.felix.ipojo.handlers.lifecycle.callback.Lifecycle >>>> Callback.call(LifecycleCallback.java:86)[50:org.apache.felix >>>> .ipojo:1.12.1] >>>> at org.apache.felix.ipojo.handlers.lifecycle.callback.Lifecycle >>>> CallbackHandler.__M_stateChanged(LifecycleCallbackHandler.ja >>>> va: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.server.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.
