2

我正在使用“Predic8”的名为“SOA-Model”的库。代码可以在这里找到。

该库的一些代码是用 Groovy 编写的,但我正在使用 Java 应用程序中的这个库。我正在尝试编写一个扩展“ResourceResolver”的类“ExternalResolver”。它与此处的示例代码类似。我相信可以在这里找到 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
4

1 回答 1

2

作为一种解决方法,您可以尝试GroovyObjectSupport在实现这些方法时复制代码,例如:

    public MetaClass getMetaClass() {
        if (metaClass == null) {
            metaClass = InvokerHelper.getMetaClass(getClass());
        }
        return metaClass;
    }

并在您的班级中创建一个 metaClass 字段

于 2013-05-29T14:07:13.567 回答