Project

General

Profile

Bug #2518

NPE on exit from testcase with mixed usage of static and dynamic widgets

Added by Igor Skornyakov about 9 years ago. Updated about 9 years ago.

Status:
New
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
02/20/2015
Due date:
% Done:

0%

billable:
No
vendor_id:
GCD
case_num:
version:

w3.p Magnifier (4.76 KB) Igor Skornyakov, 02/20/2015 07:41 AM

History

#1 Updated by Greg Shah about 9 years ago

  • Subject changed from NPE on exit to NPE on exit from testcase with mixed usage of static and dynamic widgets
  • Description updated (diff)

The attached sample after conversion throws NPE on exit:

[02/17/2015 19:25:51 MSK] (StandardServer.invoke:SEVERE) {00000001:00000007:bogus} Abnormal end!
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.goldencode.p2j.util.Utils.invoke(Utils.java:1244)
at com.goldencode.p2j.main.StandardServer$MainInvoker.execute(StandardServer.java:1772)
at com.goldencode.p2j.main.StandardServer.invoke(StandardServer.java:1272)
at com.goldencode.p2j.main.StandardServer.standardEntry(StandardServer.java:435)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.goldencode.p2j.util.MethodInvoker.invoke(MethodInvoker.java:76)
at com.goldencode.p2j.net.Dispatcher.processInbound(Dispatcher.java:693)
at com.goldencode.p2j.net.Conversation.block(Conversation.java:319)
at com.goldencode.p2j.net.Conversation.run(Conversation.java:163)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: Unresolvable remote export public abstract void com.goldencode.p2j.ui.ClientExports.removeWindow(int).
at com.goldencode.p2j.net.RemoteObject$RemoteAccess.obtainRoutingKey(RemoteObject.java:1531)
at com.goldencode.p2j.net.RemoteObject$RemoteAccess.invokeCore(RemoteObject.java:1415)
at com.goldencode.p2j.net.InvocationStub.invoke(InvocationStub.java:97)
at com.sun.proxy.$Proxy1.removeWindow(Unknown Source)
at com.goldencode.p2j.ui.LogicalTerminal.deregisterWindow(LogicalTerminal.java:11977)
at com.goldencode.p2j.ui.WindowWidget.resourceDelete(WindowWidget.java:680)
at com.goldencode.p2j.util.HandleChain.delete(HandleChain.java:238)
at com.goldencode.p2j.util.ProcedureManager.deleteResources(ProcedureManager.java:2041)
at com.goldencode.p2j.util.ProcedureManager.access$3400(ProcedureManager.java:128)
at com.goldencode.p2j.util.ProcedureManager$WorkArea.scopeFinished(ProcedureManager.java:2239)
at com.goldencode.p2j.util.TransactionManager.processScopeNotifications(TransactionManager.java:5146)
at com.goldencode.p2j.util.TransactionManager.popScope(TransactionManager.java:2251)
at com.goldencode.p2j.util.BlockManager.topLevelBlock(BlockManager.java:6955)
at com.goldencode.p2j.util.BlockManager.externalProcedure(BlockManager.java:230)
at com.goldencode.p2j.util.BlockManager.externalProcedure(BlockManager.java:212)
at com.goldencode.testcases.list_widgets.W3.execute(W3.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.goldencode.p2j.util.Utils.invoke(Utils.java:1244)
at com.goldencode.p2j.main.StandardServer$MainInvoker.execute(StandardServer.java:1772)
at com.goldencode.p2j.main.StandardServer.invoke(StandardServer.java:1272)
at com.goldencode.p2j.main.StandardServer.standardEntry(StandardServer.java:435)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.goldencode.p2j.util.MethodInvoker.invoke(MethodInvoker.java:76)
at com.goldencode.p2j.net.Dispatcher.processInbound(Dispatcher.java:693)
at com.goldencode.p2j.net.Conversation.block(Conversation.java:319)
at com.goldencode.p2j.net.Conversation.run(Conversation.java:163)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
at com.goldencode.p2j.ui.LogicalTerminal.pushScreenDefInt(LogicalTerminal.java:10847)
at com.goldencode.p2j.ui.LogicalTerminal.pushScreenDefinition(LogicalTerminal.java:7991)
at com.goldencode.p2j.ui.GenericFrame.pushScreenDefinition(GenericFrame.java:7387)
at com.goldencode.p2j.ui.GenericFrame.pushScreenDefinition(GenericFrame.java:7318)
at com.goldencode.p2j.ui.GenericFrame.deleteDynamicWidget(GenericFrame.java:7758)
at com.goldencode.p2j.ui.GenericWidget.resourceDelete(GenericWidget.java:2960)
at com.goldencode.p2j.util.HandleChain.delete(HandleChain.java:238)
at com.goldencode.p2j.ui.GenericFrame.frameDelete(GenericFrame.java:7259)
at com.goldencode.p2j.ui.LogicalTerminal.deregisterFrameInt(LogicalTerminal.java:8811)
at com.goldencode.p2j.ui.LogicalTerminal.applyChanges(LogicalTerminal.java:9986)
at com.goldencode.p2j.net.Protocol.applyChanges(Protocol.java:309)
at com.goldencode.p2j.net.Queue.transactImpl(Queue.java:1161)
at com.goldencode.p2j.net.Queue.transact(Queue.java:585)
at com.goldencode.p2j.net.BaseSession.transact(BaseSession.java:223)
at com.goldencode.p2j.net.HighLevelObject.transact(HighLevelObject.java:163)
at com.goldencode.p2j.net.HighLevelObject.getKey(HighLevelObject.java:116)
at com.goldencode.p2j.net.RemoteObject$RemoteAccess.obtainRoutingKey(RemoteObject.java:1503)
at com.goldencode.p2j.net.RemoteObject$RemoteAccess.invokeCore(RemoteObject.java:1415)
at com.goldencode.p2j.net.InvocationStub.invoke(InvocationStub.java:97)
at com.sun.proxy.$Proxy1.removeWindow(Unknown Source)
at com.goldencode.p2j.ui.LogicalTerminal.deregisterWindow(LogicalTerminal.java:11977)
at com.goldencode.p2j.ui.WindowWidget.resourceDelete(WindowWidget.java:680)
at com.goldencode.p2j.util.HandleChain.delete(HandleChain.java:238)
at com.goldencode.p2j.util.ProcedureManager.deleteResources(ProcedureManager.java:2041)
at com.goldencode.p2j.util.ProcedureManager.access$3400(ProcedureManager.java:128)
at com.goldencode.p2j.util.ProcedureManager$WorkArea.scopeFinished(ProcedureManager.java:2239)
at com.goldencode.p2j.util.TransactionManager.processScopeNotifications(TransactionManager.java:5146)
at com.goldencode.p2j.util.TransactionManager.popScope(TransactionManager.java:2251)
at com.goldencode.p2j.util.BlockManager.topLevelBlock(BlockManager.java:6955)
at com.goldencode.p2j.util.BlockManager.externalProcedure(BlockManager.java:230)
at com.goldencode.p2j.util.BlockManager.externalProcedure(BlockManager.java:212)
at com.goldencode.testcases.list_widgets.W3.execute(W3.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.goldencode.p2j.util.Utils.invoke(Utils.java:1244)
at com.goldencode.p2j.main.StandardServer$MainInvoker.execute(StandardServer.java:1772)
at com.goldencode.p2j.main.StandardServer.invoke(StandardServer.java:1272)
at com.goldencode.p2j.main.StandardServer.standardEntry(StandardServer.java:435)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.goldencode.p2j.util.MethodInvoker.invoke(MethodInvoker.java:76)
at com.goldencode.p2j.net.Dispatcher.processInbound(Dispatcher.java:693)
at com.goldencode.p2j.net.Conversation.block(Conversation.java:319)
at com.goldencode.p2j.net.Conversation.run(Conversation.java:163)
at java.lang.Thread.run(Thread.java:745)

To reproduce the issue one should press enter on startup and when the main screen appears (after some pop-up dialog boxes) just hit F4

#2 Updated by Greg Shah about 9 years ago

From CA:

About the NPE in note 73 and the w3.p test. A widget can be determine as no longer alive (thus can be deleted) by both client and server sides:
1. on server-side, if the widget/frame is no longer visible, then static widgets will be deleted when it's instantiating-procedure is finished
2. on client-side, if it determines that a frame is now hidden and is no longer alive, it needs to inform the server-side that the frame was deleted from client-side (so server-side can cleanup after it, too).

I think the NPE is caused by the mixed usage of dynamic and static widgets. When a dynamic widget is deleted and is attached to a frame, it needs to be removed from the frame. But now the frame doesn't know that this deletion was decided by the client-side, so it tries to inform back the client-side to delete it, too.

What I think we need is a way to ignore LT.pushScreenDefinition if the caller is LT.applyChanges.

Also available in: Atom PDF