I am trying to implement Xen API (server side) and test it
using Citrix Java Bindings (version 5.5). I have a question regarding API fields
of type ‘int’ such as host.API_version_minor and host.API_version_major.
Using Citrix Java Bindings when I request host.get_API_version_major, I
think my server response comes back ok, but the SDK Java client is not able to
parse it.
Below is the XML request/response.
Request using Citrix Java client :
<methodCall>
<methodName>host.get_API_version_major
</methodName>
<params>
<param>
<value>trjp19gne05edqnajbgmpc6me5</value>
</param>
<param>
<value>host:023</value>
</param>
</params>
</methodCall>
My server’s response:
<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>Status</name>
<value>Success</value>
</member>
<member>
<name>Value</name>
<value>
<i4>1</i4>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>
But
Citrix Java client is not able to parse this response. I get the error
[java] java.lang.ClassCastException: java.lang.Integer cannot be cast to
java.lang.String
[java] at
com.xensource.xenapi.Types.toLong(Types.java:6559)
[java] at
com.xensource.xenapi.Host.getAPIVersionMajor(Host.java:477)
[java] at
com.xensource.xenapi.Connection.setAPIVersion(Connection.java:368)
[java] at com.xensource.xenapi.Connection.dispatch(Connection.java:308)
[java] at
com.xensource.xenapi.Session.loginWithPassword(Session.java:438)
[java] at TestBase.connect(TestBase.java:52)
[java] at VIFTest.RunTest(VIFTest.java:30)
[java] at RunTests.main(RunTests.java:114)
Also looking at the SDK Java client code, it treats these ‘int’
fields as Long.
Interestingly if I implement those ‘int’ type
fields as String in my server, then the SDK Java client is happy. However that’s
not the correct implementation for fields of type ‘int’.
Any help would be much appreciated.
-Ajay