GWT 2.4: «Произошло внутреннее исключение компилятора» в проекте, который использует Hibernate для проверки бина - PullRequest
1 голос
/ 09 марта 2012

Прошло около 5 часов с тех пор, как я решил использовать JSR 303 Bean Validation в своем проекте GWT, и я должен сказать, что даже не могу выразить (вежливо), насколько глубоко я недоволен плохой документацией на тема на сайте Google.

Я очень надеюсь, что вы, ребята, сможете мне помочь.

Я подписался на эту запись в блоге , чтобы добавить проверку бина на стороне клиента в свой проект. К сожалению, это сработало только один раз и выдало исключение во время выполнения, сказав, что мне нужно добавить источники проверки Hibernate в путь к классам. Я исправил это и решил немного перераспределить свои зависимости (самая большая ошибка в моей жизни), но я больше не мог заставить это работать.

Я не могу поиграть с примером Validation из GWT SDK, потому что он не компилируется, потому что он имеет две реализации класса ServerValidator. Weird.

Итак, чтобы упростить мой вопрос, я создал фиктивное приложение GWT с помощью мастера проектов IntelliJ IDEA.

Я добавил следующие элементы в модуль xml:

<inherits name="org.hibernate.validator.HibernateValidator"/>
<replace-with class="com.mySampleApplication.client.ClientValidatorFactory">
    <when-type-is class="javax.validation.ValidatorFactory"/>
</replace-with>

Создано ClientValidatorFactory:

package com.mySampleApplication.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.validation.client.AbstractGwtValidatorFactory;
import com.google.gwt.validation.client.GwtValidation;
import com.google.gwt.validation.client.impl.AbstractGwtValidator;

import javax.validation.Validator;
import javax.validation.groups.Default;

public class ClientValidatorFactory extends AbstractGwtValidatorFactory
{
    @GwtValidation(value = {Organization.class}, groups = {Default.class, ClientGroup.class})
    public interface GwtValidator extends Validator
    {
    }

    @Override
    public AbstractGwtValidator createValidator()
    {
        return GWT.create(GwtValidator.class);
    }
}

И в методе onModuleLoad() я добавил эту единственную строку, которая приводит к взрыву компилятора

Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

И, наконец, я использовал следующие jar-файлы, которые скопировал из образца GWT SDK .

.
hibernate-validator-4.1.0.Final-sources.jar
hibernate-validator-4.1.0.Final.jar
log4j-1.2.16.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
validation-api-1.0.0.GA-sources.jar
validation-api-1.0.0.GA.jar

Но когда я компилирую свой проект, он выдает следующую бессмысленную ошибку:

enter image description here

В подробном журнале компилятора GWT я вижу это:

Loaded 2315 units from persistent store.
   Found 2282 cached units.  Used 2282 / 2282 units from cache.
   Added 0 units to persistent cache.
   Validating newly compiled units
      Errors in 'jar:file:/C:/work/externals/gwt/gwt-user.jar!/org/hibernate/validator/engine/ConstraintViolationImpl_CustomFieldSerializer.java'
         Line 33: No source code is available for type org.hibernate.validator.engine.ConstraintViolationImpl<T>; did you forget to inherit a required module?
      Errors in 'jar:file:/C:/work/externals/gwt/gwt-user.jar!/org/hibernate/validator/engine/ValidationSupport.java'
         Line 43: No source code is available for type org.hibernate.validator.engine.ConstraintViolationImpl<T>; did you forget to inherit a required module?
      Errors in 'jar:file:/C:/work/externals/gwt/gwt-user.jar!/org/hibernate/validator/super/org/hibernate/validator/constraints/impl/EmailValidator.java'
         Line 25: No source code is available for type org.hibernate.validator.constraints.Email; did you forget to inherit a required module?
      Errors in 'jar:file:/C:/work/externals/gwt/gwt-user.jar!/org/hibernate/validator/super/org/hibernate/validator/constraints/impl/ScriptAssertValidator.java'
         Line 26: No source code is available for type org.hibernate.validator.constraints.Email; did you forget to inherit a required module?
      Errors in 'jar:file:/C:/work/externals/gwt/gwt-user.jar!/org/hibernate/validator/super/org/hibernate/validator/constraints/impl/URLValidator.java'
         Line 26: No source code is available for type org.hibernate.validator.constraints.URL; did you forget to inherit a required module?
      Errors in 'jar:file:/C:/work/externals/gwt/gwt-user.jar!/org/hibernate/validator/super/org/hibernate/validator/engine/PathImpl.java'
         Line 72: No source code is available for type org.hibernate.validator.engine.NodeImpl; did you forget to inherit a required module?

Почему он не может найти классы? У меня hibernate-validator-4.1.0.Final-sources.jar в моем классе.

Есть мысли?

Я загрузил свой проект здесь , если вы, ребята, хотите поиграть с ним.

1 Ответ

1 голос
/ 09 марта 2012

Дело закрыто, ребята.Ошибка была вызвана отсутствием источников проверки гибернации в classpath из-за ошибки в IntelliJ IDEA.Подробности здесь .

...