简体   繁体   English

如何使用Java中的XML-RPC协议注销到OpenERP服务器?

[英]How can I do logout to OpenERP server using XML-RPC protocol in Java?

I am working in an Android app with Eclipse which connects with an OpenERP server using XML-RPC protocol. 我正在使用带有Eclipse的Android应用程序,该应用程序使用XML-RPC协议与OpenERP服务器连接。 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. 在client.execute()行。

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. 我认为问题是在client.execute()方法中发送的参数。

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! 感谢您的建议!

I'm using XML-RPC with PHP, and the login() method authenticates the user credentials and returns a user ID. 我将XML-RPC与PHP结合使用,login()方法对用户凭据进行身份验证并返回用户ID。

Each call to subsequent methods needs the user ID and password - it seems there is no need to actually log in - it is just there to validate the user credentials. 每次对后续方法的调用都需要用户ID和密码-似乎不需要实际登录-只是用于验证用户凭据。 I cannot find any documentation on this, but it appears that the XML-RPC API is stateless - there is no need to log in and log out. 我找不到有关此内容的任何文档,但是XML-RPC API似乎是无状态的-无需登录和注销。

However, there is a session interface available through the API, but it is unclear whether that is of any use with XML-RPC. 但是,可以通过API使用一个会话接口,但是尚不清楚该接口是否与XML-RPC一起使用。 It could be possible that logout() interacts with the session to connect/remove an authenticated user to the session. logout()可能与会话交互以将经过身份验证的用户连接/删除到会话。 The session ID is a UUID string. 会话ID是UUID字符串。

Sorry if that is a bit fuzzy; 抱歉,这有点模糊; most of what I've found out is trial-and-error, as the documentation unfortunately skips over any of the important points. 我发现的大多数都是反复试验,因为不幸的是该文档跳过了任何要点。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM