2013-05-27 6 views
2

Я использую библиотеку под названием «SOA-Model» от «Predic8». Код можно найти here.Java Class extends Groovy Class

Некоторые коды библиотеки были написаны в Groovy, но я использую эту библиотеку из приложения Java. Я пытаюсь написать класс «ExternalResolver», который расширяет «ResourceResolver». Он похож на этот пример, код найден 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) 

Для большей части я могу просто уйти, просто вернув «нуль». Однако, если я это сделаю для getMetaClass, мой код не будет работать и возвращает исключение.

поэтому мне нужно знать:

  • Есть ли способ, я могу закрыть вниз это предупреждение о Intellij? ... OR
  • Что я могу добавить в getMetaClass, чтобы заставить его работать? То есть вид значения по умолчанию.

EDIT:

Как указывается в комментариях к декомпилировать 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 
+1

Какую версию IDEA вы используете? Вы испытываете эту проблему при компиляции или просто выделяете ее в редакторе? –

+0

Я использую последнюю версию; и это не просто подчеркивание ошибок, это не позволит мне скомпилировать. – Larry

+0

Не могли бы вы рассказать точную версию (Help | About)? У вас есть Настройки | Компилятор | Использовать внешнюю сборку? Помогает ли изменение этой опции? –

ответ

2

В качестве временного решения можно попытаться скопировать GroovyObjectSupport код в реализации этих методов, например:

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

и создать поле metaClass в вашем классе, а также

+0

Спасибо, но в этом решении я получаю: 'Поле ResourceResolver.metaClass не видно', любые идеи, пожалуйста? – Larry

+0

Я имел в виду, вы должны создать это поле в своем классе (отредактированный ответ). –

+0

Отлично, этот метод работает и позволяет мне выполнять свою программу по своему желанию. Хотя я знаю, что это решение для работы, это решает проблему - Спасибо большое! +1 – Larry