Hi, I am not sure any more ... what it should be used for :) At first I understood it as a URL, but now, when I was looking at the PAX Web code ... not quite sure what it is used for.
But either way, as you said, all these different names make in quite un-clear what they are used for. Thank you for the support and clearing the fog. Kind Regards, Miroslav V V čet., 6. feb. 2020 ob 13:50 je oseba Grzegorz Grzybek < [email protected]> napisala: > In Pax Web 8 I'll try to make it clear "what is alias"? > > I think it comes from (correct me if I'm wrong) ... > https://httpd.apache.org/docs/2.4/mod/mod_alias.html#alias meaning a > "place in URI namespace accessible via HTTP". Http Service spec (chapter > 102 of OSGi CMPN) confuses "name", "alias" and "URI pattern" heavily... > > When I was fixing some bugs in Pax Web some time ago, I found that alias > SHOULD BE just specialized, single-element array of URI patterns. It helped > with the tests and general comprehension, but I didn't notice this > aliasAsUrlPattern() method... > > regards > Grzegorz > > czw., 6 lut 2020 o 13:44 Miroslav Beranič <[email protected]> > napisał(a): > >> Hi Grzegorz, >> >> so yes, this was it. >> >> It can be used: >> >> props.put(ExtenderConstants.PROPERTY_URL_PATTERNS, new >> String[]{"/sl/zdravo", "/en/hello", "/de/halo"}); >> >> or >> >> props.put(ExtenderConstants.PROPERTY_ALIAS, "/sl/zdravo"); >> >> but can not use both. But, now Alias is missing in the Karaf http:list >> and some other internal logic, dependant on the alias is also not working, >> but ... I guess I can work around it. >> >> OK, this kind of solved the problem for now. But why it is not allowed to >> have both? I guess you would want to have alias and n other url patterns >> for the Servlet, or not? >> >> >> Kind regards, >> Miroslav >> >> >> >> V V čet., 6. feb. 2020 ob 13:38 je oseba Miroslav Beranič < >> [email protected]> napisala: >> >>> Hi Grzegorz, >>> >>> I've followed the example provided at GitHub: >>> >>> >>> https://github.com/ops4j/org.ops4j.pax.web/blob/master/samples/whiteboard/src/main/java/org/ops4j/pax/web/extender/samples/whiteboard/internal/Activator.java >>> >>> Thank you for the notice. >>> >>> Kind regards, >>> Miroslav >>> >>> >>> V V čet., 6. feb. 2020 ob 13:27 je oseba Grzegorz Grzybek < >>> [email protected]> napisala: >>> >>>> Hello >>>> >>>> I've checked >>>> org.ops4j.pax.web.extender.whiteboard.internal.tracker.ServletTracker#createWebElement() >>>> and indeed - it takes "alias" from "alias" property and may take patterns >>>> from "urlPatterns" or "osgi.http.whiteboard.servlet.pattern" - but you >>>> CAN'T specify "alias" property to do it. >>>> >>>> Please don't use: >>>> >>>> props.put(ExtenderConstants.PROPERTY_ALIAS, "/hello"); >>>> >>>> regards >>>> Grzegorz >>>> >>>> czw., 6 lut 2020 o 13:07 Miroslav Beranič <[email protected]> >>>> napisał(a): >>>> >>>>> Hi JB, >>>>> >>>>> Took the code from: >>>>> >>>>> https://github.com/ops4j/org.ops4j.pax.web/tree/master/samples/whiteboard >>>>> >>>>> to be able to use ExtenderConstants.PROPERTY_HTTP_CONTEXT_ID => >>>>> Virtual hosts "feature" of Jetty. >>>>> >>>>> { >>>>> Dictionary<String, Object> props; >>>>> props = new Hashtable<>(); >>>>> >>>>> props.put(ExtenderConstants.PROPERTY_ALIAS, "/hello"); >>>>> props.put(ExtenderConstants.PROPERTY_HTTP_CONTEXT_ID, >>>>> "virtualhost"); >>>>> >>>>> // Fail with Exception: from inside constructor of class >>>>> org.ops4j.pax.web.extender.whiteboard.internal.element.ServletWebElement >>>>> // props.put(ExtenderConstants.PROPERTY_URL_PATTERNS, "/hello"); >>>>> >>>>> props.put(ExtenderConstants.DEFAULT_INIT_PREFIX_PROP + >>>>> "exactUrlPattern", Boolean.TRUE); >>>>> >>>>> servletReg = bundleContext.registerService(Servlet.class, new >>>>> WhiteboardServlet("/hello"), props); >>>>> } >>>>> >>>>> Kind Regards, >>>>> Miroslav >>>>> >>>>> >>>>> Dne četrtek, 06. februar 2020 12.50.17 UTC+1 je oseba Jean-Baptiste >>>>> Onofré napisala: >>>>>> >>>>>> Hi >>>>>> >>>>>> Can you please share how you register the servlet ? Via the >>>>>> httpService.register, Servlet service registration or whiteboard ? >>>>>> >>>>>> Thanks, >>>>>> Regards >>>>>> JB >>>>>> >>>>>> On Thu, Feb 6, 2020 at 12:14 PM Miroslav Beranič < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> Hi all, >>>>>>> >>>>>>> I work with Pax Web on Karaf 4.3.0. I am trying to register Servlet >>>>>>> with exact url, but I see url pattern is auto-generated from alias. >>>>>>> I look at the current master branch - version 8.0.0-SNAPSHOT. Class: >>>>>>> >>>>>>> org.ops4j.pax.web.service.spi.model.ServletModel >>>>>>> >>>>>>> >>>>>>> constructor: >>>>>>> #ServletModel(org.ops4j.pax.web.service.spi.model.ContextModel, >>>>>>> javax.servlet.Servlet, java.lang.String, java.lang.String[], >>>>>>> java.lang.String, java.util.Dictionary<java.lang.String,?>, >>>>>>> java.lang.Integer, java.lang.Boolean, >>>>>>> javax.servlet.MultipartConfigElement) >>>>>>> >>>>>>> >>>>>>> it calles method ( private static ) >>>>>>> new String[]{aliasAsUrlPattern(alias)} >>>>>>> >>>>>>> >>>>>>> private static String aliasAsUrlPattern(final String alias) { >>>>>>> String urlPattern = alias; >>>>>>> if (urlPattern != null && !urlPattern.equals("/") >>>>>>> && !urlPattern.contains("*")) { >>>>>>> if (urlPattern.endsWith("/")) { >>>>>>> urlPattern = urlPattern + "*"; >>>>>>> } else { >>>>>>> urlPattern = urlPattern + "/*"; >>>>>>> } >>>>>>> } >>>>>>> return urlPattern; >>>>>>> } >>>>>>> >>>>>>> >>>>>>> so it always creates a url pattern, as I guess the name suggest, but >>>>>>> why? I would like to register exact URL, not the pattern. As it looks >>>>>>> now, >>>>>>> this is not possible to do - as there is no argument to pass in to >>>>>>> control >>>>>>> the flow. >>>>>>> >>>>>>> As it looks from the git history/log this is quite "old" code - from >>>>>>> 2008 - 2013, so I guess this is not new and I guess everybody are ok >>>>>>> with >>>>>>> this? So in this case, what is the usecase for it? As for my usecase - >>>>>>> this >>>>>>> is not the required behavior. >>>>>>> >>>>>>> For example, Servlet, registered with /hello, also matches /hello/1, >>>>>>> but I want /hello/1 to return HTTP 404. >>>>>>> >>>>>>> >>>>>>> So for now, only really question is - is this expected behavior or >>>>>>> is there a room to change this? If so, how can one, with existing >>>>>>> solution, >>>>>>> register Servlet with exact URL? >>>>>>> >>>>>>> Exact strack of calls looks like this: >>>>>>> >>>>>>> <init>:53, ServletModel (org.ops4j.pax.web.service.spi.model) >>>>>>> registerServlet:224, HttpServiceStarted >>>>>>> (org.ops4j.pax.web.service.internal) >>>>>>> registerServlet:210, HttpServiceStarted >>>>>>> (org.ops4j.pax.web.service.internal) >>>>>>> registerServlet:69, HttpServiceProxy >>>>>>> (org.ops4j.pax.web.service.internal) >>>>>>> register:97, ServletWebElement >>>>>>> (org.ops4j.pax.web.extender.whiteboard.internal.element) >>>>>>> registerWebElement:392, WebApplication >>>>>>> (org.ops4j.pax.web.extender.whiteboard.internal) >>>>>>> addWebElement:188, WebApplication >>>>>>> (org.ops4j.pax.web.extender.whiteboard.internal) >>>>>>> addingService:193, AbstractTracker >>>>>>> (org.ops4j.pax.web.extender.whiteboard.internal.tracker) >>>>>>> addingService:46, AbstractTracker >>>>>>> (org.ops4j.pax.web.extender.whiteboard.internal.tracker) >>>>>>> customizerAdding:941, ServiceTracker$Tracked (org.osgi.util.tracker) >>>>>>> customizerAdding:870, ServiceTracker$Tracked (org.osgi.util.tracker) >>>>>>> trackAdding:256, AbstractTracked (org.osgi.util.tracker) >>>>>>> track:229, AbstractTracked (org.osgi.util.tracker) >>>>>>> serviceChanged:901, ServiceTracker$Tracked (org.osgi.util.tracker) >>>>>>> invokeServiceListenerCallback:990, EventDispatcher >>>>>>> (org.apache.felix.framework) >>>>>>> fireEventImmediately:838, EventDispatcher >>>>>>> (org.apache.felix.framework) >>>>>>> fireServiceEvent:545, EventDispatcher (org.apache.felix.framework) >>>>>>> fireServiceEvent:4595, Felix (org.apache.felix.framework) >>>>>>> registerService:3587, Felix (org.apache.felix.framework) >>>>>>> registerService:348, BundleContextImpl (org.apache.felix.framework) >>>>>>> registerService:355, BundleContextImpl (org.apache.felix.framework) >>>>>>> >>>>>>> I've changed this in my branch, added additional method with same >>>>>>> name and initParams: >>>>>>> >>>>>>> private static String aliasAsUrlPattern(final String alias, final >>>>>>> Dictionary<String, ?> initParams) { >>>>>>> final Object exactUrlPatternFromAliasParam = >>>>>>> initParams.get("exactUrlPattern"); >>>>>>> Boolean exactUrlPatternFromAlias = Boolean.FALSE; >>>>>>> if (null != exactUrlPatternFromAliasParam) { >>>>>>> if (exactUrlPatternFromAliasParam instanceof String) { >>>>>>> final String flag = ((String) >>>>>>> exactUrlPatternFromAliasParam).toLowerCase(); >>>>>>> exactUrlPatternFromAlias = Boolean.parseBoolean(flag); >>>>>>> } else if(exactUrlPatternFromAliasParam instanceof Boolean) { >>>>>>> final Boolean flag = (Boolean) >>>>>>> exactUrlPatternFromAliasParam; >>>>>>> exactUrlPatternFromAlias = flag; >>>>>>> } else if (exactUrlPatternFromAliasParam instanceof >>>>>>> Serializable) { >>>>>>> final String flag = >>>>>>> exactUrlPatternFromAliasParam.toString().toLowerCase(); >>>>>>> exactUrlPatternFromAlias = Boolean.parseBoolean(flag); >>>>>>> } >>>>>>> } >>>>>>> final String result; >>>>>>> if (Boolean.TRUE.equals(exactUrlPatternFromAlias)) { >>>>>>> // Break the reference >>>>>>> result = alias.toString(); >>>>>>> } else { >>>>>>> result = aliasAsUrlPattern(alias); >>>>>>> } >>>>>>> return result; >>>>>>> } >>>>>>> >>>>>>> >>>>>>> This calls original unmodified version of method aliasAsUrlPattern. >>>>>>> >>>>>>> Caller has to pass additional init parameter "exactUrlPattern". I >>>>>>> usually call it with Boolean.TRUE. I guess flag could/should be added >>>>>>> into >>>>>>> org.ops4j.pax.web.extender.whiteboard.ExtenderConstants. >>>>>>> >>>>>>> To note one other thing -- this is " one of the use cases ", I as >>>>>>> see there is also construction, that allows to pass in defined url >>>>>>> patterns, but I did not find how to call it. The call I am using is: >>>>>>> >>>>>>> props.put(ExtenderConstants.DEFAULT_INIT_PREFIX_PROP + >>>>>>> "exactUrlPattern", Boolean.TRUE); >>>>>>> bundleContext.registerService(Servlet.class, new >>>>>>> WhiteboardServlet("/hello"), props); >>>>>>> >>>>>>> Could be, that if HttpService interface is used, this is not the >>>>>>> case. >>>>>>> >>>>>>> I've tried to solve this using >>>>>>> >>>>>>> props.put(ExtenderConstants.PROPERTY_URL_PATTERNS, "/hello"); >>>>>>> >>>>>>> This is illegal state as implemented by the constructor of class: >>>>>>> >>>>>>> >>>>>>> org.ops4j.pax.web.extender.whiteboard.internal.element.ServletWebElement >>>>>>> >>>>>>> if (alias != null && urlPatterns != null && urlPatterns.length != 0) >>>>>>> { >>>>>>> LOG.warn("Registered servlet [{}] cannot have both alias and url >>>>>>> patterns.", getServiceID()); >>>>>>> valid = false; >>>>>>> } >>>>>>> >>>>>>> >>>>>>> I did not look into this yet, but why is this implemented like so? >>>>>>> If this would be changed, it would make use of existing constants. >>>>>>> >>>>>>> >>>>>>> Kind Regards, >>>>>>> Miroslav >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> -- >>>>>>> ------------------ >>>>>>> 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]. >>>>>>> To view this discussion on the web visit >>>>>>> https://groups.google.com/d/msgid/ops4j/179c33ab-fdd3-451f-b4ff-57f2fc934a04%40googlegroups.com >>>>>>> <https://groups.google.com/d/msgid/ops4j/179c33ab-fdd3-451f-b4ff-57f2fc934a04%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> >>>>>> -- >>>>> -- >>>>> ------------------ >>>>> 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]. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/ops4j/9016e27b-4059-4c2d-83ad-1ae42d5083c5%40googlegroups.com >>>>> <https://groups.google.com/d/msgid/ops4j/9016e27b-4059-4c2d-83ad-1ae42d5083c5%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> -- >>>> -- >>>> ------------------ >>>> 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]. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/ops4j/CAAdXmhoCKVNaxKmy51dWFE2uMBmSbSZHBKb3azGJ9PwJ%2BrPVGg%40mail.gmail.com >>>> <https://groups.google.com/d/msgid/ops4j/CAAdXmhoCKVNaxKmy51dWFE2uMBmSbSZHBKb3azGJ9PwJ%2BrPVGg%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> >>> >>> -- >>> Miroslav Beranič >>> MIBESIS >>> [email protected] >>> https://www.mibesis.si >>> >> >> >> -- >> Miroslav Beranič >> MIBESIS >> [email protected] >> https://www.mibesis.si >> >> -- >> -- >> ------------------ >> 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]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/ops4j/CA%2B3Fds4h7EpEq_hQi1y_g1deGTokj6z4h06myo%2BUR9R%3DZpV5KQ%40mail.gmail.com >> <https://groups.google.com/d/msgid/ops4j/CA%2B3Fds4h7EpEq_hQi1y_g1deGTokj6z4h06myo%2BUR9R%3DZpV5KQ%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- > -- > ------------------ > 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]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/ops4j/CAAdXmhqnAZQC4jEEP-cbNi_0U_BcBAoYxCY4s3AUN4UHuNLwtg%40mail.gmail.com > <https://groups.google.com/d/msgid/ops4j/CAAdXmhqnAZQC4jEEP-cbNi_0U_BcBAoYxCY4s3AUN4UHuNLwtg%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- Miroslav Beranič MIBESIS [email protected] https://www.mibesis.si -- -- ------------------ 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]. To view this discussion on the web visit https://groups.google.com/d/msgid/ops4j/CA%2B3Fds50H15NOmJBdNnYsVpDMvbvbVE7nLjd4cHsPXV9jKZnag%40mail.gmail.com.
