Groovy jython2.2.1属性错误:';javainstance';对象没有属性'__调用';
我在尝试运行嵌入在已编译groovy应用程序中的jython代码时遇到问题。同样的jython代码在嵌入java应用程序(Grinder 3.1)时也可以正常工作 在groovy代码中,我使用org.python.util.PythonInterpreter类(来自jython 2.2.1)创建一个名为TestRunner的类的可调用实例(这是Grinder的要求) 示例性jython代码示例: 以下是我运行上述代码时的输出:Groovy jython2.2.1属性错误:';javainstance';对象没有属性'__调用';,groovy,jython,grinder,Groovy,Jython,Grinder,我在尝试运行嵌入在已编译groovy应用程序中的jython代码时遇到问题。同样的jython代码在嵌入java应用程序(Grinder 3.1)时也可以正常工作 在groovy代码中,我使用org.python.util.PythonInterpreter类(来自jython 2.2.1)创建一个名为TestRunner的类的可调用实例(这是Grinder的要求) 示例性jython代码示例: 以下是我运行上述代码时的输出: TestRunners\uuu call\uu()方法将调用a类实例
\uuu call\uu()
方法将调用a类实例的work()
方法,并打印webservice存根的toString输出AttributeError:'javainstance'对象没有属性'\u调用'
。stacktrace以self.b.methodcall()结尾。self.b.methodcall()
会导致AttributeError:'javainstance'对象没有属性\uuuu调用\uuuu
为问题添加一些上下文
- 我使用groovy只是为了“减少冗长的代码”,但如果是groovy导致了这个问题,我可能不得不切换到普通的旧java
- 我们有数百个
文件和配置文件等,但其中只有一个子集用于一个特定的测试场景。所有这些都在一些测试场景中使用*.py
- 这使得“初学者”很难理解如何配置测试,因此我正在尝试构建一个“测试配置器向导”,它可以在不强制用户/测试人员手动编辑所有配置文件的情况下设置测试场景李>
- 此向导将从“存储库”中收集相关文件,并将其放在“研磨机控制台”可以向用户显示的文件夹中
org.python.util
和org.python.core
包中的任何代码捕获对java.io.FileInputStream(java.io.File)
的所有调用。
我对这些连接点的“建议”是将文件名打印到System.out
。
我使用加载时编织来实现这一点,因此我可以使用我们的代码运行groovy/java/jython代码
已启用AOP。无论是否启用AOP,都会出现AttributeError
问题
我模糊地怀疑,AttributeError
问题可能是由“groovy”类执行PythonInterpreter方法时的类加载器不匹配引起的,但我对此并不确定。
我不确定groovy在加载类时是否在执行任何类型的运行时字节码编辑,以及这是否会混淆Python脚本
groovy代码本身是预编译的,所以我使用常规的java.exe来启动该进程。很明显,错误消息是因为有东西试图访问
\uuuu call\uu()
对象的javainstance
成员,而该成员不存在。假设上面的代码没有使用javainstance
对象或\uuuu调用
方法处理您所说的错误所在的位置,那么这里肯定缺少真实代码中的一些额外细节。您能否创建整个项目的一个副本,然后将其精确地细化到仍然会产生错误的尽可能小的代码?此外,还有一个问题:您的类应该从对象继承,尽管您的实际代码可能已经在这样做了,而您只是忘了将其放在这里。这是我尝试运行Grinder(jython)时的stacktrace来自Groovy的脚本:回溯(最近一次调用):文件“”,第80行,在调用文件“C:\Users\ola\Documents\Workspace\QA\U dev\Performance\Grinder\。\actors\admin\U soaptester\U mc.py”的第214行,在工作f(self)文件“C:\Users\ola\Documents\Workspace\QA\U dev\Performance\Grinder\。\actors\admin\U soaptester\U mc.py”的第103行,在_getMoneyStatsself.soap.getTotalBalance()AttributeError:'javainstance'对象没有属性'call'中,admin_soaptester_mc.py当然由代码中的“A”类表示example@camjackson关于“挑剔”,实际代码中的jython类都没有指定它们扩展对象。它(在研磨机中)仍然有效。应该是类A(对象):
还是导入java.lang.object\n类A(对象):
才正式正确?
class TestRunner:
def __init__(self):
doinitstuff()
def __call__():
a = A()
a.work()
class A:
def __init__(self):
self.b = B()
def work(self):
print "Calling methodcall"
self.b.methodcall()
class B:
def __init__(self):
self.webservice = WebServiceStubImplementedInJava()
print str(self.webservice)
def methodcall(self):
print "In methodcall"
try:
return self.webservice.soapmethod()
except:
log_error()
raise