Share JSESSIONID between multiple services
nias Oct 7, 2008 9:51 AMi'm trying to share a session between more then one webservice endpoint for statefull webservices (via seam to use conversations).
i've tried to get each port via:
URL wsdlLocation = new URL("..."); QName serviceName = new QName(..., ...); Service service = Service.create(wsdlLocation, serviceName); port1 res = (port1)service.getPort(port1.class); BindingProvider bp = (BindingProvider)res; bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "admin"); bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "admin"); bp.getRequestContext().put(StubExt.PROPERTY_AUTH_TYPE, StubExt.PROPERTY_AUTH_TYPE_WSSE); URL securityURL = new File("src/test/webservices/META-INF/jboss-wsse-client.xml").toURL(); ((StubExt)bp).setSecurityConfig(securityURL.toExternalForm()); ((StubExt)bp).setConfigName("Standard WSSecurity Client"); bp.getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
all calls from one port are working fine inside the session but now i wan't to take the JSESSIONID from port1 after first call and use them for port2 with the following code:
final Map responseMap = ((BindingProvider)port1).getResponseContext(); final Map headerValues = (Map)responseMap.get(MessageContext.HTTP_RESPONSE_HEADERS); final List<String> cookieHeaders = (List<String>) headerValues.get("Set-Cookie"); for(String x : cookieHeaders) { if(xl[0].equals("JSESSIONID")) { Map<String, List<String>> headers = (Map<String, List<String>>) ((BindingProvider)port2).getRequestContext().get(MessageContext.HTTP_REQUEST_HEADERS); if (headers == null) { headers = new HashMap<String, List<String>>(); ((BindingProvider)port2).getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS, headers); } else { System.out.println("headers exists"); } List<String> cookie = headers.get("Cookie"); if (cookie == null) { cookie = new ArrayList<String>(); headers.put("Cookie", cookie); } else { System.out.println("cookies exists"); } cookie.add("JSESSIONID="+xl[1]);
The cookie would be extracted but ignored on first call for port2, therefore a new session starts on port2.
how can i solve this?