проверка бина - ошибка гибернации - PullRequest
1 голос
/ 19 июля 2010

При попытке запустить приложение из командной строки появляется следующее исключение:

java.lang.ExceptionInInitializerError
        at org.hibernate.validator.engine.ConfigurationImpl.<clinit>(ConfigurationImpl.java:52)
        at org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:43)
        at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:269)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -2
        at java.lang.String.substring(String.java:1937)
        at org.hibernate.validator.util.Version.<clinit>(Version.java:39)
        ... 34 more

Я что-то не так делаю?Пожалуйста, предложите.

Ответы [ 2 ]

1 голос
/ 19 июля 2010

Это странно.Я вставил соответствующие части static блока инициализации o.h.v.u.Version в класс с main и добавил следы регистрации некоторых бедняков:

public class VersionTest {
    public static void main(String[] args) {
        Class clazz = org.hibernate.validator.util.Version.class;

        String classFileName = clazz.getSimpleName() + ".class";
        System.out.println(String.format("%-16s: %s", "classFileName", classFileName));

        String classFilePath = clazz.getCanonicalName().replace('.', '/') + ".class";
        System.out.println(String.format("%-16s: %s", "classFilePath", classFilePath));

        String pathToThisClass = clazz.getResource(classFileName).toString();
        System.out.println(String.format("%-16s: %s", "pathToThisClass", pathToThisClass));

        // This is line 39 of `org.hibernate.validator.util.Version`
        String pathToManifest = pathToThisClass.substring(0, pathToThisClass.indexOf(classFilePath) - 1)
            + "/META-INF/MANIFEST.MF";
        System.out.println(String.format("%-16s: %s", "pathToManifest", pathToManifest));
    }
}

И вот результат, который я получаю при его запуске:

classFileName   : Version.class
classFilePath   : org/hibernate/validator/util/Version.class
pathToThisClass : jar:file:/home/pascal/.m2/repository/org/hibernate/hibernate-validator/4.0.2.GA/hibernate-validator-4.0.2.GA.jar!/org/hibernate/validator/util/Version.class
pathToManifest  : jar:file:/home/pascal/.m2/repository/org/hibernate/hibernate-validator/4.0.2.GA/hibernate-validator-4.0.2.GA.jar!/META-INF/MANIFEST.MF

В вашем случае StringIndexOutOfBoundsException: String index out of range: -2 предполагает, что:

pathToThisClass.indexOf( classFilePath )

возвращает -1, что делает вызов pathToThisClass.substring(0, -2) действительно ошибочным.

А это значит, что org/hibernate/validator/util/Version.class как-то не является частью pathToThisClass, который вы получаете.У меня нет полного объяснения, но это должно быть связано с тем, что вы используете One-Jar.

Не могли бы вы запустить тестовый класс выше и обновить свой вопрос с выводом?

0 голосов
/ 19 июля 2010

Таким образом, при использовании One-JAR проблема, вероятно, заключается в несовместимости One-JAR и Hibernate Validator. Однако в последней версии One-JAR (0.97) он работает отлично, поэтому используйте последнюю версию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...