Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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 FacesCompositeELResolver中的NullPointerException如何修复或获得支持?_Java_Nullpointerexception_Jsf 1.2 - Fatal编程技术网

Java FacesCompositeELResolver中的NullPointerException如何修复或获得支持?

Java FacesCompositeELResolver中的NullPointerException如何修复或获得支持?,java,nullpointerexception,jsf-1.2,Java,Nullpointerexception,Jsf 1.2,我们正在生产一个NPE,它使用apache-tomcat-8.5.28或8.5.34(实际上不确定是哪一个,但我可以试试看),具有以下堆栈: java.lang.NullPointerException: while trying to invoke the method javax.el.ELResolver.getValue(javax.el.ELContext, java.lang.Object, java.lang.Object) of a null object loaded from

我们正在生产一个NPE,它使用apache-tomcat-8.5.28或8.5.34(实际上不确定是哪一个,但我可以试试看),具有以下堆栈:

java.lang.NullPointerException: while trying to invoke the method javax.el.ELResolver.getValue(javax.el.ELContext, java.lang.Object, java.lang.Object) of a null object loaded from an array (which itself was loaded from field javax.el.CompositeELResolver.resolvers of an object) with an index loaded from local variable 'i'
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:62) ~[el-api.jar:3.0.FR]
    at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72) ~[jsf-impl.jar:1.2_13-b02-FCS]
    at org.apache.el.parser.AstValue.getValue(AstValue.java:169) ~[jasper-el.jar:8.5.34]
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:190) ~[jasper-el.jar:8.5.34]
    at com.sun.faces.application.ValueBindingValueExpressionAdapter.getValue(ValueBindingValueExpressionAdapter.java:113) ~[jsf-impl.jar:1.2_13-b02-FCS]
    ...
该错误并不总是发生,尽管一旦发生,该特定服务器节点似乎会发生很多错误。在过去的几天里,我一直在深入研究反编译的jar,并设置断点来尝试理解错误

该类是扩展了
CompositeELResolver
FacesCompositeELResolver
,并且仅创建了该类的两个实例:一个为chainType=Faces,另一个为chainType=JSP。前一个(其中chainType=Faces)是作为对FacesServlet.service()的第一次调用的一部分创建的,该调用仅在您第一次访问服务器时发生

父类,
CompositeElResolver
,正在尝试调用getValue,其代码如下:

// copied from CompositeELResolver.java

public Object getValue(ELContext context, Object base, Object property) {
    context.setPropertyResolved(false);
    int sz = this.size;

    for(int i = 0; i < sz; ++i) {
        Object result = this.resolvers[i].getValue(context, base, property); // <----  line 62 NPE here
        if(context.isPropertyResolved()) {
            return result;
        }
    }

    return null;
}
这可能就是问题所在,虽然我还没有重现这个问题,但我怀疑上面的堆栈是罪魁祸首

总结一下,一个静态函数elotils.buildFacesResolver正在修改FacesCompositeELResolver类型的共享对象,如果服务器是“幸运的”足够在启动时在两个线程中调用同一堆栈,这将在singleton实例中产生一个
this.resolvers
数组,其中包含一个null对象,该对象将不断通过NullPointerException,直到服务器被弹回为止—这似乎正是我们所看到的

但这里有一件事,这一切都不属于正在运行的应用程序代码,它似乎是我们正在使用的jsf-impl.jar的一部分,根据该jar中的manifest.mf文件,它似乎是版本1.2_13-b02-FCS的一部分。我不确定这个版本是从哪里来的,或者如果我需要的话,我如何修改它

有人能帮助我了解我在哪些方面可以获得这些特定类的支持吗?这是我可以控制的吗

有人能提供的任何其他帮助或线索都会很有帮助

// copied from CompositeELResolver.java

public void add(ELResolver elResolver) {
    Objects.requireNonNull(elResolver);       // <---- line 47
    if(this.size >= this.resolvers.length) {
        ELResolver[] nr = new ELResolver[this.size * 2];
        System.arraycopy(this.resolvers, 0, nr, 0, this.size);
        this.resolvers = nr;
    }

    this.resolvers[this.size++] = elResolver; // <---- line 54
}
javax.el.CompositeELResolver.add():54
com.sun.faces.el.FacesCompositeElResolver.add():60
com.sun.faces.el.ElUtils.buildFacesResolver():160