Je jetée intégrée en tant que fournisseur SPI pour le service Web n'envoie pas WebFault au client

StackOverflow https://stackoverflow.com/questions/9391804

Question

Je travaille sur un projet où j'ai un serveur de jetée intégré pour servir des pages d'administration HTML et j'ai besoin d'intégrer certains services Web. J'utilise les annotations JAX-WS et Javax XML pour créer des services de théâtre et utiliser l'implémentation SPI de Jetty (Jetty-Jaxws2-SPI) pour remplacer HttpServerProvider par défaut:

...
System.setProperty("com.sun.net.httpserver.HttpServerProvider","org.eclipse.jetty.jaxws2spi.JettyHttpServerProvider");
HttpsServer httpsServer = HttpsServer.create(new InetSocketAddress(serverPort),0);
...
HttpContext httpContext = httpsServer.createContext("/ws/myservice");
Endpoint endpoint = Endpoint.create(new AuthenticateImpl());
endpoint.publish(httpContext);
...

Le service Web fonctionne correctement, mais lorsque je lève une exception Webfault, le client n'obtient que le code de résultat HTTP 200 sans contenu corporel. Je révise le HTTPServerProvider à l'implémentation par défaut, et le défaut est envoyé correctement au client.

Je pense que quelque chose manque dans la mise en œuvre de Jetty-Jaxws2-SPI, mais je ne sais pas quoi.

une idée ?

mettre à jour: Cela semble être un problème de compatibilité entre Java Version et Jax Libs.

Avec Java7 et Jaxb-API et Jaxb-Impl (2.1.12) dans DIR approuvé, je reçois:

java.lang.ExceptionInInitializerError
at com.sun.xml.internal.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:254)
at com.sun.xml.internal.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:85)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:626)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:585)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:570)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:467)
at com.sun.xml.internal.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:299)
at com.sun.xml.internal.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:593)
at com.sun.xml.internal.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244)
at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:95)
at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handle(WSHttpHandler.java:80)
at org.eclipse.jetty.jaxws2spi.JAXWS2ContextHandler.doScope(JAXWS2ContextHandler.java:75)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:247)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
at org.eclipse.jetty.server.Server.handle(Server.java:346)
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:589)
at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1065)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:823)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:214)
at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:411)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:535)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:529)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassCastException: com.sun.xml.bind.v2.runtime.JAXBContextImpl cannot be cast to com.sun.xml.internal.bind.api.JAXBRIContext
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.<clinit>(SOAPFaultBuilder.java:550)
... 25 more

et conduire à une réponse HTTP par défaut (200) ...

MISE À JOUR 2

Je fais fonctionner Webfault lorsque je supprime JAXB-IMPL et JAXB-API de mon répertoire approuvé. Mais si je fais cela, je ne peux pas obtenir la notation JSON naturelle de Jersey, JAXB 2.1.12 requis. Zut ...

Était-ce utile?

La solution

Résolu:

Ajoutez JAX-WS RI 2.1.7 et JAXB 2.1.12 pots dans mon Dir approuvé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top