to clarify my needs, it looks like:
a) I must have a SOAP client in python
b) an RPC protocol for call from Java -> Python, where I control both
sides, and need something that's easy to use.
Thanks a lot to all of you!
I believe with the code Simon provided (separate thread) I will be able to
use ZSI for the client against a WSDL server, which will solve "a".
On the "b" front, I'm almost there with XML-RPC, but need another piece of
help:
I have a java client calling python server. The call succeeds - I printed
out input values in the server method and they match what I passed in java.
however, when Java tries to build an object from the response, I get a
java.lang.NoClassDefFoundError.
I tried both an integer and a string as return values (the simplest objects
I could think of). I'm guessing Java doesn't understand how to map the
python types to java types (?)
I am using apache xml-rpc (version 3), with default options.
Do you have an idea on what I did wrong?
python and java sources attached.
from what I read seems that types for basic types like string/int are
explicit in the XML serialization of XML-RPC (and SOAP), but implicit in
JSON, so maybe JSON would work more easily between the languages?
If I try JSON, I saw there are several implementations in both Java and
Python - can anyone point me to a good combination for both languages you
have used?
thanks again
Ronnie
On 6/7/07, Simon Robins <[EMAIL PROTECTED]> wrote:
For the Python side:
a) steer clear of SOAP
If you decide to carry on anyway...
b) There's a simple example in the 'dive into python' free web book
using the SOAPpy lib
c) If your needs are more complex you'll need the ZSI libraries.
I can give you the code I used in a demo at the python group -
they're toy examples though.
On 7 Jun 2007, at 07:53, Ronnie Maor wrote:
> Does anyone have experience with RPC from Java to Python?
> Trying to get this to work over either XML-RPC or SOAP (prefer
> SOAP) but am having slow start due to lack of experience with any
> of relevant parts :-(
> Specific packages to use, tips, and especially working example code
> would be very very appreciated
>
> thanks
> Ronnie
>
import time
from SimpleXMLRPCServer import SimpleXMLRPCServer
class A(object):
def get(self,*args):
print 'GET CALLED, args=%s' % (args,)
return "ronnie"
if __name__ == '__main__':
server = SimpleXMLRPCServer(('localhost',8080))
server.register_instance(A())
try:
print 'Starting server (press Ctrl-C to stop)'
server.serve_forever()
except KeyboardInterrupt:
pass
import java.net.URL;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
public class HelloRPC {
/**
* @param args
*/
public static void main(String[] args) {
try {
System.out.println("Trying XML-RPC...");
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
config.setServerURL(new URL("http://127.0.0.1:8080"));
XmlRpcClient client = new XmlRpcClient();
client.setConfig(config);
//Object[] params = new Object[]{};
Object[] params = new Object[]{new Integer(33), new Integer(9)};
Object resobj = client.execute("get", params);
String result = (String) resobj;
System.out.println("Results was " + result.toString());
}
catch (Exception e){
System.out.println("Caught Exception: " + e.getMessage());
}
}
}