Comment résoudre NoSuchMethodError pour javax.validation lors du déploiement d'un printemps de démarrage de l'application dans weblogic server?
Je suis en train de déployer un simple ressort de démarrage de l'application qui va exposer quelques api rest et j'utilise hibernate entity manager pour manipuler les objets de l'entité. Lorsque j'essaie de déployer cette application sur Oracle Weblogic 12c, j'obtiens l'exception suivante:
<Jan 11, 2016 6:20:14 PM BDT> <Error> <Console> <BEA-240003> <Administration Console encountered the following error: weblogic.application.ModuleException: java.lang.NoSuchMethodError: javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider;
at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140)
at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:216)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:211)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42)
at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:73)
at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:24)
at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:729)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42)
at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:258)
at weblogic.application.internal.SingleModuleDeployment.activate(SingleModuleDeployment.java:48)
at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165)
at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:80)
at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:587)
at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:150)
at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:116)
at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:339)
at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:846)
at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1275)
at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:442)
at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:176)
at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:195)
at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:13)
at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:68)
at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:548)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)
Caused by: java.lang.NoSuchMethodError: javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider;
at org.hibernate.validator.internal.engine.ValidatorFactoryImpl.<init>(ValidatorFactoryImpl.java:142)
at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at weblogic.validation.validator.ValidationProvider.invoke(ValidationProvider.java:75)
at weblogic.validation.validator.ValidationProvider.buildValidatorFactory(ValidationProvider.java:66)
at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:302)
.... rest of the stack trace has been omitted ....
En bref, je suis
java.lang.NoSuchMethodError:
javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider;
Je suis passé par les mêmes questions à propos de ce problème de débordement de pile (comme cette, et, cette), mais n'a pas pu résoudre le problème. J'ai essayé de bidouiller les dépendances sur hibernate validator et javax api de validation, mais il n'a pas beaucoup d'aide. Voici la partie pertinente de mon pom fichier:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.6.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.0.6.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.2.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>5.2.2.Final</version>
</dependency>
Et mon WEB-INF/weblogic.xml fichier:
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/90
http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
<show-archived-real-path-enabled>true</show-archived-real-path-enabled>
</container-descriptor>
</weblogic-web-app>
La seule validation annotation j'ai utilisé jusqu'à présent est @NotNull (javax.la validation.des contraintes.NotNull). WebLogic Server Version: 12.1.3.0.0 en cours d'exécution sur Java7.
PS: Le projet s'exécute correctement dans Tomcat 8.
J'ai essayé mvn clean package. Même erreur. Qu'entendez-vous par l'activation des annotations?
Vous devez configurer votre projet pour le Printemps d'utiliser des annotations, par exemple, en ajoutant qu'à votre contexte d'application fichier xml suivant
<context:annotation-config />
...c'est si vous êtes à l'aide d'annotations. En outre vérifier si vous avez toutes les dépendances nécessaires, que l'exception indique que vous n'êtes pas certains de la dépendance et de vérifier, dans le depedency si la méthode de votre application à l'aide de n'existent pas.Je suis à l'aide de printemps de démarrage. Ces configurations sont construits avec elle. Le projet s'exécute correctement dans Tomcat, juste ne peut pas obtenir en cours d'exécution dans Weblogic.
OriginalL'auteur Zobayer Hasan | 2016-01-11
Vous devez vous connecter pour publier un commentaire.
J'ai finalement réussi à résoudre le problème. Je n'étais pas conscient du fait que si préférez-web-inf-classes est désactivé à partir de la console d'administration Weblogic, puis weblogic ignore la directive spécifié dans weblogic.xml fichier.
À partir de la documentation Oracle:
Donc, au lieu de cela, j'ai eu de spécifier préférez-application-paquets dans weblogic.xml fichier. Voici le contenu mis à jour de la fiche:
Cette stackoverflow post a été très utile.
Merci à tous ceux qui ont essayé de l'aider.
OriginalL'auteur Zobayer Hasan
Ma conjecture est que Weblogic est à l'aide de Fèves de Validation 1.0 qui s'aligne avec Hibernate Validator 4.x. Je ne suis pas sûr de savoir comment obtenir Weblogic à utiliser Bean Validation livré dans votre application (peut-être que c'est ce que vous essayez de faire avec
prefer-web-inf-classes
) ou comment mettre à niveau l'ensemble de l'application serveur de Bean Validation 1.1. Sauf si vous utilisez la méthode de validation, vous pouvez essayer d'utiliser la dernière 4.x release (4.3.2.Final). Vous pouvez alors supprimer levalidation-api
dépendance à partir du pom (sera tiré dans transitivement de toute façon) ou que vous avez mis à1.0.0.GA
.OriginalL'auteur Hardy
plus de ci-dessous dans wblogic-application travaillé
si l'utilisation d'Hibernate 5.x et au-dessus, ajouter le ci-dessus dans weblogic-application.xml
Merci,
OriginalL'auteur Hemanta Gogoi