I am working in an Android app with Eclipse which connects with an OpenERP server using XML-RPC protocol. My question is how to do a logout to the server or if it is not necessary.
I have tried to do it in the same way as the "login" method but it does not work. I catch a
java.lang.ClassCastException (java.lang.String cannot be cast to java.lang.Integer)
at client.execute() line.
Here is the full stack:
07-17 10:18:42.271: E/Conector OpenERP(19595): Error while logging out
07-17 10:18:42.271: E/Conector OpenERP(19595): java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.parser.XmlRpcResponseParser.addResult(XmlRpcResponseParser.java:55)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.parser.RecursiveTypeParserImpl.endValueTag(RecursiveTypeParserImpl.java:71)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.parser.XmlRpcResponseParser.endElement(XmlRpcResponseParser.java:164)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.harmony.xml.ExpatParser.endElement(ExpatParser.java:156)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.harmony.xml.ExpatParser.appendBytes(Native Method)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:513)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:474)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:316)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:279)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:172)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:149)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:95)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:39)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:53)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:166)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:136)
07-17 10:18:42.271: E/Conector OpenERP(19595): at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:125)
07-17 10:18:42.271: E/Conector OpenERP(19595): at com.example.nfcreader.JavaOpenerpConnector.disconnect(JavaOpenerpConnector.java:459)
07-17 10:18:42.271: E/Conector OpenERP(19595): at com.example.nfcreader.MainActivity$ReadDBTask.doInBackground(MainActivity.java:1198)
07-17 10:18:42.271: E/Conector OpenERP(19595): at com.example.nfcreader.MainActivity$ReadDBTask.doInBackground(MainActivity.java:1)
07-17 10:18:42.271: E/Conector OpenERP(19595): at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-17 10:18:42.271: E/Conector OpenERP(19595): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
07-17 10:18:42.271: E/Conector OpenERP(19595): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
07-17 10:18:42.271: E/Conector OpenERP(19595): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
07-17 10:18:42.271: E/Conector OpenERP(19595): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
07-17 10:18:42.271: E/Conector OpenERP(19595): at java.lang.Thread.run(Thread.java:841)
I have searched in the web but I do not find anything about how to implement this "logout" method. I think the problem is the parameters to send at client.execute() method.
Here is my code:
public void disconnect() {
try{
XmlRpcClient client = new XmlRpcClient();
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
config.setServerURL(new URL("http",host,port,"/xmlrpc/common"));
client.setConfig(config);
Object result = client.execute("logout", new Object[] {database,user,password});
}catch(MalformedURLException ex){
Log.e(TAG, "Wrong URL", ex);
}catch (XmlRpcException ex){
Log.e(TAG, "Error XML-RPC", ex);
}catch (Exception ex) {
Log.e(TAG, "Error while logging out", ex);
}
return;
}
The code for "login" method runs successfully and it is the same like the above one, just changes the word "logout" by "login".
Thanks for your suggestions!