Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用pyro调用以对象为参数的python_Java_Python_Pyro - Fatal编程技术网

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

Java 如何使用pyro调用以对象为参数的python,java,python,pyro,Java,Python,Pyro,我已经设置了一个小的测试java应用程序,它在启动pyro服务器(python)后调用python脚本。它工作得很好,但现在我想将一个对象作为参数传递给python类的方法。我从python方面得到一个例外,它说: Pyro4.errors.SerializeError: unsupported serialized class: com.test.pyro4.TestLog 根据pyros文档,一个类将在python中转换为dict,但我甚至不能做到这一点 java代码: NameSe

我已经设置了一个小的测试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()

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

Pyro4.config.SERIALIZER = 'pickle'
请注意,这已经发生了

在Java中:

Config.SERIALIZER = Config.SerializerType.pickle; 

同样的错误,这需要一个确定的地方吗?我在打印URI之前添加了它,将它放在第一行,然后重新开始所有操作。我现在收到一个错误,该错误太长,无法粘贴,但在一行上显示:Pyro4.errors.SerializeError:消息使用了序列化程序,但不被接受:4。这发生在启动服务器时,而不是在尝试从javachecking配置调用方法时。它接受的序列化程序是serpent、marshal和json。它目前正在使用serpent,这也是它在java端应该做的事情,因为我的类路径上有一个jar,它向序列化程序集添加了pickle,并在上面进行了尝试,但仍然得到相同的错误代码,已经更新以显示它现在的工作方式。对象在python端创建,然后通过java端的代理请求它,设置值,然后用于调用python方法。上面的代码不起作用。获取以下错误:TypeError:“float”对象不可编辑。我已经去掉了python调用中的所有参数,只留下了对象,它似乎就是这样的?