Java Jetty错误处理程序在Pax Web中注册错误
我正在尝试向Jetty 8注册一个自定义错误处理程序,Jetty 8嵌入在Pax Web OSGi容器中。我将以下基本xml配置添加到jetty.xml文件中:Java Jetty错误处理程序在Pax Web中注册错误,java,jetty,pax-web,Java,Jetty,Pax Web,我正在尝试向Jetty 8注册一个自定义错误处理程序,Jetty 8嵌入在Pax Web OSGi容器中。我将以下基本xml配置添加到jetty.xml文件中: <Call name="addBean"> <Arg> <New class="my.custom.handler"> <Set name="server"><Ref id="Server"/></Set> </
<Call name="addBean">
<Arg>
<New class="my.custom.handler">
<Set name="server"><Ref id="Server"/></Set>
</New>
</Arg>
</Call>
Pax似乎用JettyServerWrapper包装Jetty的服务器类,并且不能使用xml配置的反射来设置它。当我深入研究Jetty源代码时,我发现以下代码与xml中的反射配置相关:
从org.eclipse.jetty.xml.XmlConfiguration的内部类JettyXmlConfiguration:
private void set(Object obj, XmlParser.Node node) throws Exception
{
...
// Try for trivial match
try
{
Method set = oClass.getMethod(name,vClass);
set.invoke(obj,arg);
return;
}
...
}
从代码中可以明显看出,XmlConfiguration的set方法只尝试获取具有特定类型的方法,而不寻找父类。这就是为什么不能在自定义错误处理程序上设置Pax包装的服务器实例
因此,无法使用xml配置Jetty。您有什么解决方案吗?您可以在文档中找到关于如何配置Jetty的说明: 此外,这里有一个简短的总结:
<Get name="handler">
<Call name="addHandler">
<Arg>
<New class="org.eclipse.jetty.servlet.ServletContextHandler">
<Set name="contextPath">/app</Set>
<Set name="resourceBase">/path/to/your/share</Set>
<Call name="addServlet">
<Arg>org.eclipse.jetty.servlet.DefaultServlet</Arg>
<Arg>/</Arg>
</Call>
</New>
</Arg>
</Call>
</Get>
/应用程序
/路径/到/您的/共享
org.eclipse.jetty.servlet.DefaultServlet
/
您需要“适应”正在运行的实例,而不是以定义如何启动的方式配置Jetty 您可以在文档中找到如何配置Jetty的说明: 此外,这里有一个简短的总结:
<Get name="handler">
<Call name="addHandler">
<Arg>
<New class="org.eclipse.jetty.servlet.ServletContextHandler">
<Set name="contextPath">/app</Set>
<Set name="resourceBase">/path/to/your/share</Set>
<Call name="addServlet">
<Arg>org.eclipse.jetty.servlet.DefaultServlet</Arg>
<Arg>/</Arg>
</Call>
</New>
</Arg>
</Call>
</Get>
/应用程序
/路径/到/您的/共享
org.eclipse.jetty.servlet.DefaultServlet
/
您需要“适应”正在运行的实例,而不是以定义如何启动的方式配置Jetty 如何使用上下文处理程序servlet进行错误处理?在您提到的文档中,还解释了在捆绑包片段中使用外部jetty.xml文件的方法。但只要使用xml配置,我就会遇到我提到的错误。@oak,请看一下文档,但是可以使用外部文件:如何使用上下文处理程序servlet来处理错误?在您提到的文档中,还解释了在捆绑包片段中使用外部jetty.xml文件的方法。但只要使用xml配置,我就会遇到我提到的错误。@oak,请查看文档,但也可以使用外部文件: