我正在使用名为“SOA-Model”的库,“Predic8”。可以找到代码here。
库的一些代码是用Groovy编写的,但我在Java应用程序中使用这个库。我正在尝试编写一个扩展“ResourceResolver”的类“ExternalResolver”。它类似于找到here的示例代码。我认为可以找到ResourceResolver的源代码here。
但是,我在 Java 中写这个,类似这样:
import com.predic8.schema.Import;
import com.predic8.xml.util.ResourceResolver;
public class ExternalWSDLResolver extends ResourceResolver {
public Object resolve(Object input, String baseDir){
//some code here to do the customised resolving
}
}
现在,如果在Eclipse中进行编译,上面的工作正常。
然而,当我尝试在IntellijIDEA上编译时,它迫使我实现了更多的方法。基本上是实现的方法:
- implements groovy.lang.GroovyObject.invokeMethod(String s, Object o)
- implements groovy.lang.GroovyObject.getProperty(String s)
- implements groovy.lang.GroovyObject.setProperty(String s, Object o)
- implements groovy.lang.GroovyObject.getMetaClass()
- implements groovy.lang.GroovyObject.setMetaClass(MetaClass metaClass)
对于大多数人来说,只需返回“null”即可。但是,如果我为getMetaClass执行此操作,我的代码将无效,并返回异常。
因此我需要知道:
修改
正如在反馈ResourceResolver.class
的注释中所建议的那样,这里是getMetaClass的结果。
另外,作为参考,我已在此处粘贴了整个输出:http://pastie.org/7980007
public groovy.lang.MetaClass getMetaClass();
Code:
0: aload_0
1: getfield #27; //Field metaClass:Lgroovy/lang/MetaClass;
4: dup
5: ifnull 9
8: areturn
9: pop
10: aload_0
11: dup
12: invokevirtual #25; //Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
15: putfield #27; //Field metaClass:Lgroovy/lang/MetaClass;
18: aload_0
19: getfield #27; //Field metaClass:Lgroovy/lang/MetaClass;
22: areturn
答案 0 :(得分:2)
作为一种解决方法,您可以尝试在实现这些方法时复制GroovyObjectSupport
代码,例如:
public MetaClass getMetaClass() {
if (metaClass == null) {
metaClass = InvokerHelper.getMetaClass(getClass());
}
return metaClass;
}
并在您的班级中创建一个metaClass字段