Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jetty错误处理程序在Pax Web中注册错误_Java_Jetty_Pax Web - Fatal编程技术网

Java Jetty错误处理程序在Pax Web中注册错误

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> </

我正在尝试向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>
      </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,请查看文档,但也可以使用外部文件: