有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用pyro调用以对象为参数的python

我已经设置了一个小型测试java应用程序,在启动pyro服务器(python)后调用python脚本。它工作得很好,但现在我想将一个对象作为参数传递给python类的方法。python方面有个例外,我说:

Pyro4.errors.SerializeError: unsupported serialized class: 
com.test.pyro4.TestLog  

根据pyros文档,一个类将被转换为python中的dict,但我甚至不能做到这一点

java代码:

NameServerProxy ns = NameServerProxy.locateNS("localhost");
PyroProxy remotePluginObject = new PyroProxy(ns.lookup("plugin"));

int length = 5;
double[] values = new double[] { 0.5, 0.3, 0.6, 05, 0.4 };
double a = 6.94;
double b = 2.17;

remoteObject = new PyroProxy(ns.lookup("test.object"));
remoteObject.call("setValues", values, length);

Object result = remoteObject.call("calculate", remoteObject, a, b);

System.out.println(result.toString());

remotePluginObject.close();             
remoteObject.close();
ns.close();

python服务器代码:

class TestObject(object):
values=[]
length=0

def setValues(self, valuesArray, lengthValue):
    values=valuesArray
    length=lengthValue    

class Plugin(object):
def calculate(self, obj, a, b):
    result = example.calculate(obj, a, b)
    return result

plugin=Plugin()
obj=TestObject()

daemon=Pyro4.Daemon()
ns=Pyro4.locateNS()

pluginURI=daemon.register(plugin)
ns.register("plugin", pluginURI)

objURI=daemon.register(obj)
ns.register("test.object", objURI)

daemon.requestLoop()

共 (1) 个答案

  1. # 1 楼答案

    尝试将序列化程序设置为pickle

    Pyro4.config.SERIALIZER = 'pickle'
    

    要知道这有security implications

    在Java中:

    Config.SERIALIZER = Config.SerializerType.pickle;