Java Wildfly 10.1和NullPointerException

Java Wildfly 10.1和NullPointerException,java,wildfly-10,Java,Wildfly 10,在指出这是重复之前,请将文章读到最后,因为这是根据上述网站上的建议准备的 我将我的应用程序从Wildfly 8移动到Wildfly 10,令我惊讶的是,在我看来它不应该出现的地方出现了NullPointerException AdmUserCrud.java的一段代码-更新方法: 119: inst.setRoles(roles); 120: if (inst.getAllowIp()!=null && inst.getAllowIp().equals("")) 121: in

在指出这是重复之前,请将文章读到最后,因为这是根据上述网站上的建议准备的

我将我的应用程序从Wildfly 8移动到Wildfly 10,令我惊讶的是,在我看来它不应该出现的地方出现了NullPointerException

AdmUserCrud.java的一段代码-更新方法:

119: inst.setRoles(roles);
120: if (inst.getAllowIp()!=null && inst.getAllowIp().equals(""))
121:  inst.setAllowIp(null);
错误:

Caused by: java.lang.NullPointerException
        at com.i4u.qla.action.setting.AdmUserCrud.update(AdmUserCrud.java:120)
        at com.i4u.qla.action.setting.AdmUserCrud$Proxy$_$$_WeldSubclass.update$$super(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.jboss.weld.interceptor.proxy.TerminalAroundInvokeInvocationContext.proceedInternal(TerminalAroundInvokeInvocationContext.java:49)
        at org.jboss.weld.interceptor.proxy.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:77)
        at com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:117)
        at com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:53)
        at com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:76)
        at com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:47)
        at sun.reflect.GeneratedMethodAccessor125.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.jboss.weld.interceptor.reader.SimpleInterceptorInvocation$SimpleMethodInvocation.invoke(SimpleInterceptorInvocation.java:74)
        at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeAroundInvoke(InterceptorMethodHandler.java:84)
        at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:72)
        at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:56)
        at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:79)
        at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:68)
        at com.i4u.qla.action.setting.AdmUserCrud$Proxy$_$$_WeldSubclass.update(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at javax.el.ELUtil.invokeMethod(ELUtil.java:300)
        at javax.el.BeanELResolver.invoke(BeanELResolver.java:415)
        at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
        at com.sun.el.parser.AstValue.invoke(AstValue.java:285)
        at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
        at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
        at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
        at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
        at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
        at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
        ... 59 more
第119行和上面的不可见行确保inst对象不为空。那么为什么第120行会引发空指针错误呢?
我真的很困惑。

可能是inst.getAllowIp在后续调用中返回不同的结果。因此,当它执行if的第一部分时:

它可能会产生一些价值,过一会儿

.. && inst.getAllowIp().equals("") )
可能已为空

防止这种情况发生的一种方法是只获取一次值,例如,沿着

inst.setRoles(roles);
String currentIp = inst.getAllowIp();
if (currentIp!=null && currentIp.equals("")) 
  ...

一般来说,我不认为它与Wildfly版本更改有任何直接联系。

可能与@JFPicard重复-我在网站上写了以下问题,你指出了这一点。虽然我不明白为什么我的价值观在改变。getAllowIp是一个没有任何隐藏逻辑的简单getter。我想到的唯一解释是Java版本升级-可能有些变化-Wildfly 10.1需要Java 8。无论如何,谢谢你:-
inst.setRoles(roles);
String currentIp = inst.getAllowIp();
if (currentIp!=null && currentIp.equals("")) 
  ...