Hi Part of the fix is this example: https://github.com/ops4j/org.ops4j.pax.web/tree/pax-web-8.0.x/samples/samples-war/war-dispatcher
with this web.xml: <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>dispatch-servlet</servlet-name> <servlet-class>org.ops4j.pax.web.samples.war.osgi.JustDispatchServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>dispatch-servlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> and this org.ops4j.pax.web.samples.war.osgi.JustDispatchServlet: public class JustDispatchServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // https://github.com/ops4j/org.ops4j.pax.web/issues/1794: // we want to delegate to "default" servlet hoping to use it's functionality getServletContext().getNamedDispatcher("default").include(req, resp); } } the test checks the behavior on three runtimes (Jetty, Tomcat, Undertow). regards Grzegorz Grzybek śr., 16 lis 2022 o 14:57 Prashanth Ettaboina <prashanth.ettabo...@motivitylabs.com.invalid> napisał(a): > Hi Grzegorz, > > I hope the latest version(8.0.13) should solve the issue. > Thank you for taking up the issue and being supportive, your responses are > deeply appreciated. > > Regards, > Prashanth > > From: Prashanth Ettaboina > Sent: 16 November 2022 15:33 > To: 'iss...@karaf.apache.org' <iss...@karaf.apache.org>; ' > dev@karaf.apache.org' <dev@karaf.apache.org>; 'u...@karaf.apache.org' < > u...@karaf.apache.org> > Subject: RE: Unable to create default RequestDispatcher > > Hi Grzegorz, > > Thank you for your response. > I have gone through your explanation; I have seen that "/" is overriding > the default servlet. Thank you for letting me know. > But we had that web.xml configuration from last several years below is the > web.xml which was being used from older karaf versions (before 4.4.1). > > <servlet> > <servlet-name>helloboard</servlet-name> > <servlet-class>com.console.helloboard.HelloboardServlet</servlet-class> > </servlet> > <servlet-mapping> > <servlet-name>helloboard</servlet-name> > <url-pattern>/</url-pattern> > </servlet-mapping> > > Previously HelloboardServlet used to take in all the requests and process > them, below is the code block which is used to be executed. > > public class HelloboardServlet extends HttpServlet { > > protected void doGet(HttpServletRequest request, > HttpServletResponse response) throws ServletException, IOException { > if (request.getServletPath().equals("/")) { > response.sendRedirect("views/welcome.jsp"); > } else if (request.getServletPath().startsWith("/resources/")){ > if(request.getServletPath().endsWith(".css")) { > response.setContentType("text/css"); > } else if (request.getServletPath().endsWith(".js")) { > response.setContentType("text/javascript"); > } > RequestDispatcher rd = > getServletContext().getNamedDispatcher("default"); > rd.include(request, response); > } > } > } > > I want to know why it was able to create a default RequestDispatcher back > then and why not now? are there any changes in the implementation as part > of the upgrades, if yes can I get some information of what has been > modified. > > As per your directions I have changed the web.xml servlet mapping from / > to /*, now I'm able to create the default servlet but the above code block > will not be working because I have changed the url-pattern from / to /* all > the request objects are containing servletPath as "" (empty string). Which > will break the existing flow. > > I'm sorry that I cannot share the WAB and can give any further inputs > regarding this issue. > > Thanks, > Prashanth Ettaboina. > > > From: Prashanth Ettaboina > Sent: 16 November 2022 14:02 > To: 'iss...@karaf.apache.org' <iss...@karaf.apache.org<mailto: > iss...@karaf.apache.org>>; 'dev@karaf.apache.org' <dev@karaf.apache.org > <mailto:dev@karaf.apache.org>>; 'u...@karaf.apache.org' < > u...@karaf.apache.org<mailto:u...@karaf.apache.org>> > Subject: RE: Unable to create default RequestDispatcher > > Hi Grzegorz, > > Thank you for your response. > I have gone through your explanation; I have seen that "/" is overriding > the default servlet. Thank you for letting me know. > But we had that web.xml configuration from last several years below is the > web.xml which was being used from older karaf versions (before 4.4.1). > > <servlet> > <servlet-name>helloboard</servlet-name> > <servlet-class>com.console.helloboard.HelloboardServlet</servlet-class> > </servlet> > <servlet-mapping> > <servlet-name>helloboard</servlet-name> > <url-pattern>/</url-pattern> > </servlet-mapping> > > Previously HelloboardServlet used to take in all the requests and process > them, below is the code block which is used to be executed. > > public class HelloboardServlet extends HttpServlet { > > protected void doGet(HttpServletRequest request, > HttpServletResponse response) throws ServletException, IOException { > if (request.getServletPath().equals("/")) { > response.sendRedirect("views/welcome.jsp"); > } else if (request.getServletPath().startsWith("/resources/")){ > if(request.getServletPath().endsWith(".css")) { > response.setContentType("text/css"); > } else if (request.getServletPath().endsWith(".js")) { > response.setContentType("text/javascript"); > } > RequestDispatcher rd = > getServletContext().getNamedDispatcher("default"); > rd.include(request, response); > } > } > } > > I want to know why it was able to create a default RequestDispatcher back > then and why not now? are there any changes in the implementation as part > of the upgrades, if yes can I get some information of what has been > modified. > > As per your directions I have changed the web.xml servlet mapping from / > to /*, now I'm able to create the default servlet but the above code block > will not be working because I have changed the url-pattern from / to /* all > the request objects are containing servletPath as "" (empty string). Which > will break the existing flow. > > I'm sorry that I cannot share the WAB and can give any further inputs > regarding this issue. > > Thanks, > Prashanth Ettaboina. > From: Prashanth Ettaboina > Sent: 15 November 2022 20:03 > To: 'iss...@karaf.apache.org' <iss...@karaf.apache.org<mailto: > iss...@karaf.apache.org>>; 'dev@karaf.apache.org' <dev@karaf.apache.org > <mailto:dev@karaf.apache.org>>; 'u...@karaf.apache.org' < > u...@karaf.apache.org<mailto:u...@karaf.apache.org>> > Subject: RE: Unable to create default RequestDispatcher > > Hi Grzegorz, > > I'm generating a WAR file of the bundle(which will have the web > application). > > Adding the war file in the feature.xml and installing it in the karaf as a > kar file. > > <!-- Server Console Bundles --> > <bundle > start-level="95">mvn:com.server.console/helloboard/${project.version}/war</bundle> > > karaf@root()> kar: install file :filepath*** snapshot.kar > > below are the logs from karaf which are generated while I installed the > kar file. > > 2022-11-15T19:19:11.401+0530 CEF:1 | org.apache.karaf.kar.core | 4.4.1 | > INFO | ID=168 THR=0.0-SNAPSHOT.kar CAT=KarServiceImpl > MSG=Added feature repository > 'mvn:com.server.kars/example-console/51.0.0-SNAPSHOT/xml/features' > 2022-11-15T19:19:11.403+0530 CEF:1 | org.apache.karaf.features.core | > 4.4.1 | INFO | ID=19 THR=0.0-SNAPSHOT.kar CAT=FeaturesServiceImpl > MSG=Adding features: example-console/[51.0.0.SNAPSHOT,51.0.0.SNAPSHOT] > 2022-11-15T19:19:15.041+0530 CEF:1 | org.apache.karaf.features.core | > 4.4.1 | INFO | ID=19 THR=tures-3-thread-1 CAT=FeaturesServiceImpl > MSG=Changes to perform: > 2022-11-15T19:19:15.041+0530 CEF:1 | org.apache.karaf.features.core | > 4.4.1 | INFO | ID=19 THR=tures-3-thread-1 CAT=FeaturesServiceImpl > MSG= Region: root > 2022-11-15T19:19:15.042+0530 CEF:1 | org.apache.karaf.features.core | > 4.4.1 | INFO | ID=19 THR=tures-3-thread-1 CAT=FeaturesServiceImpl > MSG= Bundles to install: > 2022-11-15T19:19:15.042+0530 CEF:1 | org.apache.karaf.features.core | > 4.4.1 | INFO | ID=19 THR=tures-3-thread-1 CAT=FeaturesServiceImpl > MSG= mvn:com.server.console/helloboard/51.0.0-SNAPSHOT/war > 2022-11-15T19:19:20.621+0530 CEF:1 | org.apache.karaf.features.core | > 4.4.1 | INFO | ID=19 THR=tures-3-thread-1 CAT=FeaturesServiceImpl > MSG= helloboard/51.0.0.SNAPSHOT > 2022-11-15T19:19:20.634+0530 CEF:1 | > org.ops4j.pax.web.pax-web-extender-war | 8.0.6 | INFO | ID=269 > THR=ender-1-thread-1 CAT=BundleWebApplication MSG=Configuring > Web Application "/helloboard" for bundle helloboard/51.0.0.SNAPSHOT > 2022-11-15T19:19:20.635+0530 CEF:1 | org.apache.karaf.features.core | > 4.4.1 | INFO | ID=19 THR=tures-3-thread-1 CAT=FeaturesServiceImpl > MSG=Done. > 2022-11-15T19:19:32.512+0530 CEF:1 | org.ops4j.pax.web.pax-web-runtime | > 8.0.6 | INFO | ID=272 THR=ender-1-thread-1 > CAT=StoppableHttpServiceFactory MSG=Binding HTTP Service for bundle: > [helloboard [318]] > 2022-11-15T19:19:32.514+0530 CEF:1 | > org.ops4j.pax.web.pax-web-extender-war | 8.0.6 | INFO | ID=269 > THR=ender-1-thread-1 CAT=BundleWebApplication MSG=Allocated > context for /helloboard: > OsgiContextModel{WAB,id=OCM-233,name='/helloboard',path='/helloboard',bundle=helloboard,} > 2022-11-15T19:19:32.520+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerController > MSG=Receiving Batch{"Deployment of Web Application "/helloboard" for > bundle helloboard/51.0.0.SNAPSHOT", size=24} > 2022-11-15T19:19:32.520+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerWrapper > MSG=Creating new Jetty context for > ServletContextModel{id=ServletContextModel-234,contextPath='/helloboard'} > 2022-11-15T19:19:32.521+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerWrapper > MSG=Adding > OsgiContextModel{WAB,id=OCM-233,name='/helloboard',path='/helloboard',bundle=helloboard,context=WebContainerContextWrapper{bundle=helloboard > [318],contextId='/helloboard',delegate=org.ops4j.pax.web.extender.war.internal.WebApplicationHelper@1641e385}} > to o.o.p.w.s.j.i.PaxWebServletContextHandler@6ae38bdd > {/helloboard,null,STOPPED}<mailto: > o.o.p.w.s.j.i.PaxWebServletContextHandler@6ae38bdd > %7b/dashboard,null,STOPPED%7d> > 2022-11-15T19:19:32.522+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerWrapper > MSG=Changing default OSGi context model for > o.o.p.w.s.j.i.PaxWebServletContextHandler@6ae38bdd > {/helloboard,null,STOPPED}<mailto: > o.o.p.w.s.j.i.PaxWebServletContextHandler@6ae38bdd > %7b/dashboard,null,STOPPED%7d> > 2022-11-15T19:19:32.522+0530 CEF:1 | org.ops4j.pax.web.pax-web-spi | 8.0.6 > | INFO | ID=273 THR=ploy /helloboard) CAT=OsgiServletContext > MSG=Registering > OsgiServletContext{model=OsgiContextModel{WAB,id=OCM-233,name='/helloboard',path='/helloboard',bundle=helloboard,context=WebContainerContextWrapper{bundle=helloboard > [318],contextId='/helloboard',delegate=org.ops4j.pax.web.extender.war.internal.WebApplicationHelper@1641e385}}} > as OSGi service for "/helloboard" context path > 2022-11-15T19:19:32.523+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerWrapper > MSG=Configuring metadata of > OsgiContextModel{WAB,id=OCM-233,name='/helloboard',path='/helloboard',bundle=helloboard,context=WebContainerContextWrapper{bundle=helloboard > [318],contextId='/helloboard',delegate=org.ops4j.pax.web.extender.war.internal.WebApplicationHelper@1641e385 > }} > 2022-11-15T19:19:32.523+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerWrapper > MSG=Configuring MIME and Locale Encoding mapping of > OsgiContextModel{WAB,id=OCM-233,name='/helloboard',path='/helloboard',bundle=helloboard,context=WebContainerContextWrapper{bundle=helloboard > [318],contextId='/helloboard',delegate=org.ops4j.pax.web.extender.war.internal.WebApplicationHelper@1641e385 > }} > 2022-11-15T19:19:32.524+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerWrapper > MSG=Adding servlet > ServletModel{id=ServletModel-235,name='audit',urlPatterns=[/uem/data/audit/*, > /data/audit/*],servletClass=class > com..gcs.console.helloboard.AuditLogServlet,contexts=null} > 2022-11-15T19:19:32.524+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerWrapper > MSG=Adding servlet > ServletModel{id=ServletModel-236,name='jsp',urlPatterns=[*.jspx, > *.jsp],servletClass=class > org.ops4j.pax.web.jsp.JspServlet,contexts=[{WAB,OCM-233,/helloboard,/helloboard}]} > 2022-11-15T19:19:32.525+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerWrapper > MSG=Adding servlet > ServletModel{id=ServletModel-237,name='login-typeCheck',urlPatterns=[/loginType/*],servletClass=class > com..gcs.console.helloboard.LoginTypeCheckServlet,contexts=null} > 2022-11-15T19:19:32.525+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerWrapper > MSG=Adding servlet > ServletModel{id=ServletModel-238,name='repository',urlPatterns=[/data/docs/*, > /uem/data/docs/*],servletClass=class > com..gcs.console.helloboard.RepositoryServlet,contexts=null} > 2022-11-15T19:19:32.525+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerWrapper > MSG=Adding servlet > ServletModel{id=ServletModel-239,name='helloboard',urlPatterns=[/],servletClass=class > com..gcs.console.helloboard.HelloboardServlet,contexts=null} > 2022-11-15T19:19:32.525+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerWrapper > MSG=Adding servlet > ServletModel{id=ServletModel-240,name='basic-auth',urlPatterns=[/login/*],servletClass=class > com..gcs.console.helloboard.BasicAuthServlet,contexts=null} > 2022-11-15T19:19:32.525+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerWrapper > MSG=Changing filter configuration for context /helloboard > 2022-11-15T19:19:32.526+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerWrapper > MSG=Reconfiguration of welcome files for all resource servlets in > context > "OsgiContextModel{WAB,id=OCM-233,name='/helloboard',path='/helloboard',bundle=helloboard,context=WebContainerContextWrapper{bundle=helloboard > [318],contextId='/helloboard',delegate=org.ops4j.pax.web.extender.war.internal.WebApplicationHelper@1641e385 > }}" > 2022-11-15T19:19:32.526+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerWrapper > MSG=Changing error page configuration for context /helloboard > 2022-11-15T19:19:32.526+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerWrapper > MSG=Starting Jetty context "/helloboard" with default Osgi Context > OsgiContextModel{WAB,id=OCM-233,name='/helloboard',path='/helloboard',bundle=helloboard,context=WebContainerContextWrapper{bundle=helloboard > [318],contextId='/helloboard',delegate=org.ops4j.pax.web.extender.war.internal.WebApplicationHelper@1641e385 > }} > 2022-11-15T19:19:32.528+0530 CEF:1 | org.ops4j.pax.web.pax-web-jsp | 8.0.6 > | INFO | ID=271 THR=ploy /helloboard) CAT=PaxWebTldScanner > MSG=Searching for TLDs in pax-web-jsp bundle > 2022-11-15T19:19:32.639+0530 CEF:1 | org.ops4j.pax.web.pax-web-jsp | 8.0.6 > | INFO | ID=271 THR=ploy /helloboard) CAT=PaxWebTldScanner > MSG=Searching for TLDs in context configuration (web.xml) > 2022-11-15T19:19:32.639+0530 CEF:1 | org.ops4j.pax.web.pax-web-jsp | 8.0.6 > | INFO | ID=271 THR=ploy /helloboard) CAT=PaxWebTldScanner > MSG=Searching for TLDs in /WEB-INF/ > 2022-11-15T19:19:32.640+0530 CEF:1 | org.ops4j.pax.web.pax-web-jsp | 8.0.6 > | INFO | ID=271 THR=ploy /helloboard) CAT=PaxWebTldScanner > MSG=Searching for TLDs in bundle helloboard [318] > 2022-11-15T19:19:32.828+0530 CEF:1 | org.ops4j.pax.web.pax-web-runtime | > 8.0.6 | INFO | ID=272 THR=ploy /helloboard) CAT=HttpServiceEnabled > MSG=Registering > EventListenerModel{id=EventListenerModel-252,listener='ch.qos.logback.classic.servlet.LogbackServletContextListener@70476be6 > ',contexts=[{WAB,OCM-233,/helloboard,/helloboard}]} > 2022-11-15T19:19:32.828+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerController > MSG=Receiving Batch{"Registration of > EventListenerModel{id=EventListenerModel-252,listener='ch.qos.logback.classic.servlet.LogbackServletContextListener@70476be6',contexts=[{WAB,OCM-233,/helloboard,/helloboard}]}", > size=1} > 2022-11-15T19:19:32.830+0530 CEF:1 | org.ops4j.pax.web.pax-web-runtime | > 8.0.6 | INFO | ID=272 THR=ploy /helloboard) CAT=HttpServiceEnabled > MSG=Registering > EventListenerModel{id=EventListenerModel-251,listener='org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer$ContextDestroyListener@526531fa > ',contexts=[{WAB,OCM-233,/helloboard,/helloboard}]} > 2022-11-15T19:19:32.831+0530 CEF:1 | org.ops4j.pax.web.pax-web-jetty | > 8.0.6 | INFO | ID=270 THR=ploy /helloboard) CAT=JettyServerController > MSG=Receiving Batch{"Registration of > EventListenerModel{id=EventListenerModel-251,listener='org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer$ContextDestroyListener@526531fa',contexts=[{WAB,OCM-233,/helloboard,/helloboard}]}", > size=1} > 2022-11-15T19:19:32.834+0530 CEF:1 | org.eclipse.jetty.util | > 9.4.48.v20220622 | INFO | ID=243 THR=ploy /helloboard) CAT=ContextHandler > MSG=Started > o.o.p.w.s.j.i.PaxWebServletContextHandler@6ae38bdd > {ServerHelloboard,/helloboard,null,AVAILABLE}<mailto: > o.o.p.w.s.j.i.PaxWebServletContextHandler@6ae38bdd > %7bServerDashboard,/dashboard,null,AVAILABLE%7d> > > > > From: Prashanth Ettaboina > Sent: 15 November 2022 16:28 > To: 'iss...@karaf.apache.org' <iss...@karaf.apache.org<mailto: > iss...@karaf.apache.org>>; 'dev@karaf.apache.org' <dev@karaf.apache.org > <mailto:dev@karaf.apache.org>>; 'u...@karaf.apache.org' < > u...@karaf.apache.org<mailto:u...@karaf.apache.org>> > Subject: RE: Unable to create default RequestDispatcher > > Hi Grzegorz, > > I'm not registering the ExampleServlet anywhere, I'm configuring them in > web.xml. > In the web.xml we are giving the servlet and servlet mapping with > url-pattern and class path. > > Thanks, > Prashanth Ettaboina. > > From: Prashanth Ettaboina > Sent: 14 November 2022 19:11 > To: iss...@karaf.apache.org<mailto:iss...@karaf.apache.org>; > dev@karaf.apache.org<mailto:dev@karaf.apache.org>; u...@karaf.apache.org > <mailto:u...@karaf.apache.org> > Subject: Unable to create default RequestDispatcher > > Hi Team, > > I have updated my KARAF version from 4.2.15 to 4.4.1 and Java from 8 to 11 > in my application. > Gone through the official Release notes and updated some dependencies as > well. > > Upgraded OSGI-Core from 6.0.0 to 8.0.0. > Upgraded osgi.compendium 5.0.0 to osgi.cmpn 7.0.0 > Upgraded Jetty from 9.4.43.v20210629 to 9.4.46.v20220331. > Upgraded pax-web-spi from 4.3.4 to 7.2.11. > I'm using javax.servlet-api 3.1.0 version in my application. > > I'm unable to create default RequestDispatcher. > Please check the below code lines. > > public class ExampleServlet extends HttpServlet { > protected void doGet(HttpServletRequest request, HttpServletResponse > response) throws ServletException, IOException { > RequestDispatcher requestDispatcher = > getServletContext().getNamedDispatcher("default"); // get > getServletContext() is calling the method in GenericServlet. > requestDispatcher.include(request, response); > } > } > > the above code used to work fine before the version upgrades but now I'm > getting the requestDispatcher as null. > > Can anyone please look at it, let me know if I'm missing something. > > Thanks, > Prashanth Ettaboina > > > >