我正在使用“ Predic8”的名为“ SOA-Model”的库。可以找到代码here。
该库的一些代码已用Groovy编写,但是我正在Java应用程序中使用该库。我正在尝试编写扩展“ ResourceResolver”的“ ExternalResolver”类。它类似于在here中找到的示例代码。我相信可以在here中找到ResourceResolver的源代码。
但是,我正在用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执行此操作,则我的代码将无法工作,并返回异常。
因此,我需要知道:
有什么办法可以关闭Intellij上的这些警告? ... 要么
我可以在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
最佳答案
作为一种解决方法,您可以尝试在实现这些方法时复制GroovyObjectSupport
代码,例如:
public MetaClass getMetaClass() {
if (metaClass == null) {
metaClass = InvokerHelper.getMetaClass(getClass());
}
return metaClass;
}
并在您的课程中也创建一个metaClass字段