java当作为OSGi运行时,如何在Jetty中正确初始化WebAppContext?
我正在尝试让Jetty 9.4.30作为一个OSGi服务运行(下面是:https://examples.javacodegeeks.com/enterprise-java/jetty/jetty-osgi-example/和更新版本),它可以承载WebApp捆绑包。我可以部署,servlet也可以正常工作,但JSP不起作用,我一直遇到TLD加载异常,原因是:
Caused by:
java.lang.NullPointerException
at org.apache.jasper.JspCompilationContext.getTldResourcePath(JspCompilationContext.java:563)
at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:430)
at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:489)
问题几乎与http://bengreen.eu/fancyhtml/quickreference/jettyjsp9error.html中描述的完全相同,除了在本例中,作者使用Jetty作为嵌入式,并且能够设置org。日食码头。使用启动服务器的代码初始化容器
在OSGi中,我没有一个开始的地方——一切都是在捆绑包中发生的。在对配置文件进行了大量的调整(和解构)之后,我觉得我得到的最接近的配置是将代码中执行的配置复制到jetty web中。xml文件(将部署在每个WAB中,其本身并不理想)如下所示:
<Configure id="webappctxt" class="org.eclipse.jetty.webapp.WebAppContext">
<New id="initList" class="java.util.ArrayList"></New>
<Call name="setAttribute">
<Arg>org.eclipse.jetty.containerInitializers</Arg>
<Arg>
<Call class="java.util.Arrays" name="asList">
<Array type="org.eclipse.jetty.plus.annotation.ContainerInitializer">
<Item>
<New
class="org.eclipse.jetty.plus.annotation.ContainerInitializer">
<Arg>
<New class="org.eclipse.jetty.apache.jsp.JettyJasperInitializer"></New>
</Arg>
<Arg></Arg>
</New>
</Item>
</Array>
</Call>
</Arg>
</Call>
<Call name="addBean">
<Arg>
<New class="org.eclipse.jetty.annotations.ServletContainerInitializersStarter">
<Arg>
<Ref refid="webappctxt" />
</Arg>
</New>
</Arg>
</Call>
<Get name="ServletContext">
<Call name="setAttribute">
<Arg>org.apache.tomcat.InstanceManager</Arg>
<Arg>
<New class="org.apache.tomcat.SimpleInstanceManager"></New>
</Arg>
</Call>
</Get>
</Configure>
运行时,我可以看到组织。日食码头。注释。ServletContainerInitializersStarter,它具有来自平台的TLD(因此我的所有依赖项似乎都在那里!)但是XML版本的代码失败了,因为org有两个构造函数。日食码头。加注释。容器初始化器:
ContainerInitializer(java.lang.ClassLoader loader, java.lang.String toString)
ContainerInitializer(javax.servlet.ServletContainerInitializer target, java.lang.Class<?>[] classes)
。。。Jetty XML代码选择第一个并抛出“java.lang.IllegalArgumentException:参数类型不匹配”
我的WAB当前“需要”的插件有:
Require-Bundle: org.eclipse.jetty.jndi;bundle-version="9.4.30",
org.mortbay.jasper.apache-jsp;bundle-version="8.5.54",
org.eclipse.jetty.server;bundle-version="9.4.30",
org.eclipse.jetty.deploy;bundle-version="9.4.30",
org.eclipse.jetty.http;bundle-version="9.4.30",
org.eclipse.jetty.io;bundle-version="9.4.30",
org.eclipse.jetty.osgi.boot;bundle-version="9.4.30",
org.eclipse.jetty.security;bundle-version="9.4.30",
org.eclipse.jetty.servlet;bundle-version="9.4.30",
org.eclipse.jetty.util;bundle-version="9.4.30",
org.eclipse.jetty.webapp;bundle-version="9.4.30",
org.eclipse.jetty.xml;bundle-version="9.4.30",
org.eclipse.jetty.annotations;bundle-version="9.4.30",
org.eclipse.jetty.apache-jsp;bundle-version="9.4.30"
。。。并且只有WAB包被设置为自动启动
为完整起见,配置插件的VM参数包括:
-Djetty.home.bundle=jetty-config-bundle -Djava.naming.factory.url.pkgs=org.eclipse.jetty.jndi -Djava.naming.factory.initial=org.eclipse.jetty.jndi.InitialContextFactory
jetty配置包确实包含jetty。xml等文件,它们正在被处理
有谁能告诉我他们是不是已经开始工作了,怎么做的?是否可配置为只工作而不需要jetty web。每个WAB中都有xml,还是我的插件上缺少一个依赖包
共 (0) 个答案