Problème avec @HttpSessionScope
Bonjour,
Je souhaiterais garder des informations en session lors d'un appel à mon service Web. D'après ce que j'ai lu on peut effectuer facilement cette tâche en utilisant l'annotation @HttpSessionScope dans le service Web, seulement quand j'utilise cette annotation le serveur me renvoi une exception lorsque j'essaie d'accéder aux méthodes du service Web. Si je commente l'annotation tout se déroule normalement mais je n'ai évidemment plus un "scope session".
Je suis sous NetBeans 6.7.1 avec le JDK 1.6. Le serveur d'application utilisé est GlassFish v2.1.
Le code du service web:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
import com.sun.xml.ws.developer.servlet.HttpSessionScope;
import javax.jws.WebMethod;
import javax.jws.WebService;
@HttpSessionScope
@WebService
public class WsTestContext {
private int value;
@WebMethod
public void addAmount(int amount) {
value += amount;
}
@WebMethod
public int getValue() {
return value;
}
} |
Le code du client:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
import javax.xml.ws.BindingProvider;
import planning.ws.WsTestContext;
import planning.ws.WsTestContextService;
public class TestWs {
public static void main(String[] args) {
WsTestContextService service = new WsTestContextService();
WsTestContext port = service.getWsTestContextPort();
((BindingProvider) port).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
port.addAmount(100); // Throw une exception côté serveur
port.addAmount(200);
System.out.println("value = " + port.getValue());
}
} |
L'exception:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
The log message is null.
java.lang.NullPointerException
at com.sun.xml.ws.server.AbstractMultiInstanceResolver.prepare(AbstractMultiInstanceResolver.java:78)
at com.sun.xml.ws.server.AbstractMultiInstanceResolver.create(AbstractMultiInstanceResolver.java:87)
at com.sun.xml.ws.server.servlet.HttpSessionInstanceResolver.resolve(HttpSessionInstanceResolver.java:70)
at com.sun.enterprise.webservice.InstanceResolverImpl.resolve(InstanceResolverImpl.java:74)
at com.sun.enterprise.webservice.InstanceResolverImpl$1.invoke(InstanceResolverImpl.java:112)
at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146)
at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257)
at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:93)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:554)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:436)
at com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:106)
at com.sun.enterprise.webservice.MonitoringPipe.process(MonitoringPipe.java:147)
at com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:554)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:436)
at com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:106)
at com.sun.enterprise.webservice.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:222)
at com.sun.enterprise.webservice.CommonServerSecurityPipe.process(CommonServerSecurityPipe.java:133)
at com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:554)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:436)
at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:243)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:444)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244)
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:135)
at com.sun.enterprise.webservice.JAXWSServlet.doPost(JAXWSServlet.java:177)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:315)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1093)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1093)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:291)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:666)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:597)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:872)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:264)
at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106) |
Cela fait maintenant plusieurs heures que j'essaie de trouver d'où vient le problème :cry:. C'est peut être lié aux versions des librairies utilisées par les ws i.e. jaxb-api.jar et jaxws-api.jar mais je n'en suis vraiment pas sûr.
Si quelqu'un a déjà rencontré ce problème et peux m'aider à le résoudre ou le contourner, je le remercie d'avance ;)
Problème avec @HttpSessionScope
bonjour,
avez-vous résolu ce problème d'utilisation de HttpSessionScope pour rendre un Web Service Stateful ? Je rencontre la même erreur. J'ai pourtant suivi les recommandations faîtes sur le site de metro.
- Côté serveur j'utilise Glassfish 2.1.1 avec le JDK 1.6.0_20. J'ai installé Métro 2.1 dans Glassfish pour que les librairies JAXWS 2.2 soient présentes (@HttpSessionScope dépend de JAXWS 2.1 EA2 d'après ce que j'ai pu lire).
- Côté client, l'application est lancé grâce à Java Web Start. J'ai testé avec une JVM 1.6.0_21 et une JVM 1.5, rien ne fonctionne.
Merci d'avance.