我们有一个在JDK 7和JBoss EAP 6上运行的Java EE 6 JSF项目。
我们在消息包周围有一个很好的类,我们有两个方法具有相同的名称,但不同的参数和使用varargs:
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" />
<style>
.btn {
padding: 14px 24px;
border: 0 none;
font-weight: 700;
letter-spacing: 1px;
text-transform: uppercase;
}
.btn:focus,
.btn:active:focus {
outline: 0 none;
}
.btn-primary {
background: #d5e14d;
color: #fff;
border-radius: 0;
}
.btn-primary:hover {
background: #d5e14d;
}
</style>
<button class="btn btn-primary"><i class="fa fa-instagram"></i> Instagram</button>
在XHTML页面的EL表达式中使用这些方法时,我们会遇到奇怪的行为,即应用程序在客户测试环境(Linux,JDK 7 Update 91)中生成NPE,但不在我们的(Windows,JDK 7)中更新80)并且经过深入挖掘后发现,由于选择了错误的方法,它发生在JBoss EL API的public void doSomething(String name) {..}
public void doSomething(String name, Object... params) {..}
范围内 - 尽管事实上只有1个参数在EL表达。
我们还没有检查除了上面提到的两个测试环境之间的确切区别,当然通过重命名其中一个方法很容易解决 - 但是有没有人经历过这种行为并且可以告诉我它为什么会发生?