protected List<String> getFieldOrder() {
return Arrays.asList(new String[] { "iVal1", "cValue2", "sValue3", "nbParams", "params" });
}
}
The empty constructor of
ParamInvoke
is required by JNA because otherwise, I get an exception when initializing :
SagaInvoke
:
java.lang.IllegalArgumentException: Invalid Structure field in class test.MainPOCInterop$Invoke, field name 'params' (class test.MainPOCInterop$ParamInvoke): Can't instantiate class test.MainPOCInterop$ParamInvoke
at com.sun.jna.Structure.validateField(Structure.java:1109)
at com.sun.jna.Structure.validateField(Structure.java:1101)
at com.sun.jna.Structure.validateFields(Structure.java:1119)
at com.sun.jna.Structure.<init>(Structure.java:179)
at com.sun.jna.Structure.<init>(Structure.java:172)
at com.sun.jna.Structure.<init>(Structure.java:159)
at com.sun.jna.Structure.<init>(Structure.java:151)
at test.MainPOCInterop$Invoke.<init>(MainPOCInterop.java:301)
at test.MainPOCInterop.messageRun(MainPOCInterop.java:447)
at test.MainPOCInterop$5.widgetSelected(MainPOCInterop.java:158)
at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Display.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
at test.MainPOCInterop.main(MainPOCInterop.java:90)
Caused by: java.lang.IllegalArgumentException: Can't instantiate class test.MainPOCInterop$ParamInvoke
at com.sun.jna.Structure.newInstance(Structure.java:1781)
at com.sun.jna.Structure.newInstance(Structure.java:1759)
at com.sun.jna.Structure.size(Structure.java:1030)
at com.sun.jna.Native.getNativeSize(Native.java:1172)
at com.sun.jna.Structure.getNativeSize(Structure.java:2072)
at com.sun.jna.Structure.getNativeSize(Structure.java:2062)
at com.sun.jna.Structure.validateField(Structure.java:1105)
... 16 common frames omitted
Caused by: java.lang.InstantiationException: test.MainPOCInterop$ParamInvoke
at java.lang.Class.newInstance(Unknown Source)
at com.sun.jna.Structure.newInstance(Structure.java:1773)
... 22 common frames omitted
Caused by: java.lang.NoSuchMethodException: test.MainPOCInterop$ParamInvoke.<init>()
at java.lang.Class.getConstructor0(Unknown Source)
... 24 common frames omittedWith the empty constructor, my problem is that at runtime, the data sent to the wire is not correct.
The first
ParamInvoke
element of the array is for example of size 20 and it writes correctly to the output buffer.
But the second
ParamInvoke
parameter is written in memory at wrong offset, overriding my first parameter instead of being placed just next to it.
The override happens exactly at the place of
bData's
array size, i.e : 4 + 4 + 4 bytes are correct but next bytes of my first ParamInvoke are replaced by bytes of the second...
I suspect it the need of the default constructor that is problem, but I am not sure.
Note : I use jna 4.2.2