@Override для методов интерфейса приводит к сбою компиляции JSP - PullRequest
3 голосов
/ 23 августа 2010

По какой-то причине установка @Override на методы, переопределяющие методы интерфейса, приводит к сбою компиляции JSP в weblogic.Все, безусловно, работает на JDK 1.6.0_14, но этот Java 5'-прежнему сохраняется.

Как ни странно, JSP-компиляция иногда завершается неудачно с помощью трассировки стека, указывающей на код, не обязательно явно используемый самой JSP.1006 * Что здесь происходит?

Ответы [ 5 ]

3 голосов
/ 01 сентября 2010

@Override должен сохраняться только в исходном коде, поэтому не должен появляться в байт-коде. Возможно, вы можете играть под углом, чтобы гарантировать, что эти классы выполняются отдельно от JSP и просто доступны в пути к классам, а не к исходному пути.

Если это уже так, то это может быть проблема, отличная от той, которая отображается немедленно.

Раньше компилятором JSP была отдельная библиотека, поставляемая с сервером и не привязанная к виртуальной машине, на которой работает сервер. WLS, используемый для использования Javelin. Похоже, они переключили это в 10, чтобы использовать Java Compiler API . Так что он должен работать нормально, если у вас Sun vm Java 1.6. Но если в вашей трассировке стека есть что-нибудь «копье», определенно проверьте этот угол.

3 голосов
/ 28 августа 2010

Я сам много видел это.В Java 6 (предположительно) допустимо использовать @Override в методах реализации интерфейса.В Java 5 это ошибка.Однако в моем коде Java 6 иногда @Override принимается в методах реализации интерфейса, а иногда нет.

Чтобы сделать вещи более странными, некоторые IDE (например, NetBeans) подходят для этого, в то время как IntelliJ IDEA иногда в порядке, а иногда нет.Однако я обнаружил, что компиляция кода в любой IDE будет игнорировать предполагаемые ошибки, о которых сообщает IDE.

Другими словами, проявляется ли проблема в вашей IDE?Если это так, скомпилируйте код напрямую (при необходимости используйте командную строку) и посмотрите, что произойдет.IDE может сообщать о ложных ошибках.

1 голос
/ 04 сентября 2010

Возможным обходным путем может быть прекомпиляция JSP с использованием appc. Это могло бы, по крайней мере, позволить обойти проблему.

Что касается "настоящего" вопроса, я понимаю, что вы обновили домены, поэтому, возможно, посмотрите на следующие ресурсы:

Это дикое предположение, но, возможно, активирован некоторый флаг обратной совместимости, и WebLogic продолжает использовать «старый» подход.

0 голосов
/ 05 сентября 2010

Я согласен с вашим инстинктом и другими ответами, что WLS где-то использует Java 5. Представленные ниже пункты кажутся полезными лакомыми кусочками из ресурсов Oracle / WebLogic. У меня нет установки WebLogic Server 10.3, чтобы подтвердить следующее:

Weblogic Server 10.3

Согласно этому, по крайней мере Weblogic Server 10.3 требуется для использования Java 6, но я не вижу ничего, что подтверждает это как достоверную информацию:

Re: WebLogic 10.0 поддерживает Java 6?
Опубликовано: 9 апреля 2009 12:26 в ответ на: user8324142
Привет,
Weblogic 10 не будет поддерживать JDK6.
Пожалуйста, обновитесь до Weblogic 10.3 для работы с JDK 6.

Проверка версии Java

Определение используемой версии JDK

Вы можете определить, какую версию JDK вы используете, введя команду, следующим образом:

  1. Откройте окно командной строки и перейдите в соответствующий каталог:
    BEA_HOME \ WL_HOME \ server \ bin (Windows)
    BEA_HOME / WL_HOME / server / bin (UNIX)

    В обоих путях BEA_HOME представляет каталог, в который вы установили свое программное обеспечение, а WL_HOME представляет wlserver_ <версия>.

  2. Убедитесь, что ваша среда настроена правильно, введя в командной строке следующую команду: setWLSenv.cmd (Windows)
    setWLSenv.sh (UNIX)

  3. Введите в командной строке следующую команду: версия Java

Настройка версии Java:

Настройка параметров Java для запуска сервера WebLogic

... Параметры Java должны указываться при каждом запуске WebLogic Server. ... Oracle рекомендует включить команду в скрипт [startup] ...

Если вы использовали мастер настройки для создания своего домена, сценарии запуска WebLogic находятся в каталоге имени домена, где вы указали свой домен. По умолчанию этот каталог является BEA_HOME \ user_projects \ domain \ domain-name, где BEA_HOME - это каталог, в котором находится установка продукта, а domain-name - это имя каталога домена, определенного выбранным шаблоном конфигурации. ...

Измените значение переменной JAVA_HOME на местоположение вашего JDK. Например:
set JAVA_HOME=C:\bea\jdk150_03

...

0 голосов
/ 31 августа 2010

На мой взгляд, @Override имеет смысл для методов, которые переопределяют методы, а не реализуют методы.

Итак, если у вас есть интерфейс:

public interface MyInterface {
    public void doSomething();
}

Класс, который реализует , интерфейс которого находится ниже (MyClassA):

public MyClassA implements MyInterface {
    public void doSomething() {
        System.out.println("This is from MyClassA");
    }
}

Затем приведенный ниже класс расширяет MyClassA и переопределяет doSomething, и тогда я бы добавил аннотацию @Override.

public MyClassB extends MyClassA implements MyInterface {
    @Override
    public void doSomething() {
        System.out.println("This is from MyClassB");
    }
}

Я бы не стал делать следующее (независимо от того, допустимо ли это) в любом случае, так как это нарушает идею переопределения чего-либо - вы реализуете, а не перезаписываете интерфейс:

public MyClassA implements MyInterface {
    @Override
    public void doSomething() {
        System.out.println("This is from MyClassA");
    }
}
...