gpt4 book ai didi

java - 语句在 WAS 上给出 nullPointerException,但在 Tomcat 上运行良好

转载 作者:行者123 更新时间:2023-11-30 04:32:17 24 4
gpt4 key购买 nike

这是一个奇怪的场景,我想要的是是否有人过去经历过类似的事情以及可能发生的情况的任何提示

我正在开发的应用程序可以在不同的环境中使用。我们一般使用Tomcat进行开发,我们的集成环境之一是Websphere。

现在是这样的声明

BillingPaymentAssembler.java:149

finActivity.setReferenceNo(paymentDetail.getTicketNumber());

其中,ticketNumber 是 String,在单元测试期间可以在 Tomcat 上正常运行。但是当部署在 websphere 上时,同一测试用例会抛出 nullPointerException

更新#1

我们在 UI 上使用 JSF2, paymentDetail 是 Bean。

ticket number 是 UI 上的一个字段,对应于 bean 的 ticketNumber

这种情况,当我没有在 UI 上输入任何票号时,将其留空。在这种情况下,我会得到异常

更新#2

[1/16/13 5:25:02:750 EST] 00000019 SystemErr     R java.lang.NullPointerException
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.csa.assembler.BillingPaymentAssembler.disassemble(BillingPaymentAssembler.java:149)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.accel.AccelTransformation.disassemble(AccelTransformation.java:79)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at java.lang.reflect.Method.invoke(Method.java:600)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.ServiceHandler.invoke(ServiceHandler.java:59)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.accel.AccelService.callService(AccelService.java:1087)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.csa.process.BillingPaymentBP.process(BillingPaymentBP.java:29)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.accel.AccelBP.process(AccelBP.java:62)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at java.lang.reflect.Method.invoke(Method.java:600)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.service.ServiceControllerBP.process(ServiceControllerBP.java:54)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.service.ServiceControllerAbstract.internalExecute(ServiceControllerAbstract.java:278)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.service.ServiceControllerAbstract.execute(ServiceControllerAbstract.java:197)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.delegate.DirectServiceController.execute(DirectServiceController.java:61)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.delegate.ServiceDelegateDirect.execute(ServiceDelegateDirect.java:70)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.accel.ui.BaseServiceAction.execute(BaseServiceAction.java:584)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.accel.ui.action.policy.services.MaintainBillingPayment.perform(MaintainBillingPayment.java:145)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.accel.ui.BaseServiceAction.perform(BaseServiceAction.java:618)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.accel.ui.ServiceDelegator.execute(ServiceDelegator.java:506)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.accel.ui.ServiceDelegator.processEvent(ServiceDelegator.java:240)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.accel.ui.BeanBase.executeEvent(BeanBase.java:779)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at pagecode.policy.file.Billing.executeBillingPayments(Billing.java:498)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at java.lang.reflect.Method.invoke(Method.java:600)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at org.apache.el.parser.AstValue.invoke(AstValue.java:131)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:67)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at javax.faces.component.UICommand.broadcast(UICommand.java:315)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1655)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1595)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:131)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.csc.fs.accel.ui.filters.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:82)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:895)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:932)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:500)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:91)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:864)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:183)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
[1/16/13 5:25:02:750 EST] 00000019 SystemErr R at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1550)

最佳答案

我假设 ticketNumberNumber 的实例(整数 double 等)。通常,当使用原始类型(intlongdouble 等)时,EL 会自动将空字符串提交值强制为原始类型的默认值这是 00.0。对于包装对象类型,EL 解析器存在差异,因为 EL specification对此并不清楚和/或因为强制为 null 对于非原始类型上提交的空字符串值更有意义。

Tomcat 附带 Apache EL 解析器,会将 Number 类型上提交的空字符串值强制转换为原始表示形式的默认值。因此,Integer 类型的空提交值将被设置为 0,而不是 null。显然,您认为这是“正确”的行为,并且您的代码也是这样编写的以拦截该行为。

但是,其他服务器(例如本例中的 WebSphere)将强制它们为 null 而不是原始表示的默认值,从而导致 NPE。

基本上,错误存在于您的代码中。您应该考虑 null 值,或者如果 0 是有效表示,则使用 int 而不是 Integer “没有值(value)”(这取决于您的业务需求)。为了让所有服务器表现相同,您基本上还应该指示 Tomcat Number 上提交的空字符串值强制为 0。您可以通过将以下 VM 参数添加到 Tomcat 启动脚本来做到这一点:

-Dorg.apache.el.parser.COERCE_TO_ZERO=false

请注意,这个问题本质上与 JSF 无关。它只是碰巧使用 EL。

另请参阅:

关于java - 语句在 WAS 上给出 nullPointerException,但在 Tomcat 上运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14356929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com