web-dev-qa-db-fra.com

Erreur Glassfish lors de la production de JSON

J'ai développé une application Android et maintenant je commence avec sa base de données externe et son serveur, la communication est effectuée par les services web RESTful.

Cette Android aplication ne fait que produire et consommer des informations dans JSON, donc dans mes façades de services Web, je veux juste effacer toute mention XML dans les méthodes CRUD, (généré automatiquement par NetBeans).

Je veux dire, à partir de cela:

@GET
@Override
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public List<Counselor> findAll() {
    return super.findAll();
}

Pour cela (sans le MediaType.APPLICATION_XML):

@GET
@Override
@Produces(MediaType.APPLICATION_JSON)
public List<Counselor> findAll() {
    return super.findAll();
}

Le fait est que lorsque je déploie ces modifications dans mon serveur GlassFish (4.1.1) et que je fais des tests avec mon navigateur (je veux juste voir mes données DB), j'obtiens une erreur avec ce stacktrace:

Java.lang.NoClassDefFoundError: Could not initialize class org.Eclipse.persistence.jaxb.BeanValidationHelper
    at org.Eclipse.persistence.jaxb.JAXBBeanValidator.isConstrainedObject(JAXBBeanValidator.Java:257)
    at org.Eclipse.persistence.jaxb.JAXBBeanValidator.shouldValidate(JAXBBeanValidator.Java:208)
    at org.Eclipse.persistence.jaxb.JAXBMarshaller.validateAndTransformIfNeeded(JAXBMarshaller.Java:587)
    at org.Eclipse.persistence.jaxb.JAXBMarshaller.marshal(JAXBMarshaller.Java:481)
    at org.Eclipse.persistence.jaxb.rs.MOXyJsonProvider.writeTo(MOXyJsonProvider.Java:949)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.Java:265)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.Java:250)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.Java:162)
    at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.Java:106)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.Java:162)
    at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.Java:86)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.Java:162)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.Java:1130)
    at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.Java:683)
    at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.Java:424)
    at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.Java:414)
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.Java:312)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.Java:271)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.Java:267)
    at org.glassfish.jersey.internal.Errors.process(Errors.Java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.Java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.Java:267)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.Java:317)
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.Java:292)
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.Java:1139)
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.Java:460)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.Java:386)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.Java:334)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.Java:221)
    at org.Apache.catalina.core.StandardWrapper.service(StandardWrapper.Java:1682)
    at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:318)
    at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:160)
    at org.Apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.Java:734)
    at org.Apache.catalina.core.StandardPipeline.invoke(StandardPipeline.Java:673)
    at com.Sun.enterprise.web.WebPipeline.invoke(WebPipeline.Java:99)
    at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:174)
    at org.Apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.Java:416)
    at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:283)
    at com.Sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.Java:459)
    at com.Sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.Java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.Java:206)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.Java:180)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.Java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.Java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.Java:283)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.Java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.Java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.Java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.Java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.Java:536)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.Java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.Java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.Java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.Java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.Java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.Java:571)
    at Java.lang.Thread.run(Thread.Java:745)

Une idée à ce sujet?

J'espère que je m'explique ... merci d'avance !!

C'est un bug dans Glassfish 4.1.1 https://Java.net/jira/browse/JERSEY-2888

J'ai pu le réparer d'une manière sale:

Dans glassfish/modules/org.Eclipse.persistence.moxy.jar, corrigez META-INF/MANIFEST.MF Ajoutez simplement ce qui suit à Import-Package:

,org.xml.sax.helpers,javax.xml.parsers;resolution:=optional,javax.naming;resolution:=optional

il ressemble donc à:

enter image description here

et redémarrez GF

btw: vous pouvez facilement éditer des pots dans le terminal avec

emacs org.Eclipse.persistence.moxy.jar
35
hannes ach

La réponse de Jack est vraiment utile.
Il identifie le problème et est utile lorsqu'il n'y a pas de patch.

Mais je suggère au lieu de modifier le pot , puisque le bogue est corrigé dans 2.6.1, de téléchargez-le sur: org.Eclipse.persistence.moxy-2.6.1 depuis MVNRepository

OU obtenez la dernière version de MVNRepository: https://mvnrepository.com/artifact/org.Eclipse.persistence/org.Eclipse.persistence.moxy

et le remplacer.
N'oubliez pas de fermer et de rouvrir votre IDE.

8
Leon