我正在使用“ 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字段

08-26 13:06