Hi,
I tried the above approach. It didn't work for me. I can clearly see two different JSESSIONIDs between the request/response. However when i use the HttpConduit approach the JSESSIONIDs are exactuly the same between the two request/responses.I am pasting the code i am trying out below:
String target =
"http://localhost:9090/CXFDemo";
IHelloService service =
new IHelloService();IHello stub = service.getIHelloPort();
BindingProvider bp = (BindingProvider)stub;
bp.getRequestContext().put(BindingProvider.
ENDPOINT_ADDRESS_PROPERTY, target);bp.getRequestContext().put(BindingProvider.
SESSION_MAINTAIN_PROPERTY, true);
Map<String, List<String>> headers= CastUtils.cast((Map)bp.getRequestContext().get(
"javax.xml.ws.http.request.headers"));
// This turns out to be null.
if (headers == null) {headers =
new HashMap<String, List<String>>();bp.getRequestContext().put(
"javax.xml.ws.http.request.headers", headers);}
List<String> cookies = Arrays.asList(
new String[] {"a=a","b=b"});headers.put(
"Cookie", cookies); String str = stub.hello(
"hello world!!");
//Creating a second service instance IHelloService service1 =
new IHelloService();IHello stub1 = service1.getIHelloPort();
BindingProvider provider1 = (BindingProvider)stub1;
provider1.getRequestContext().put(BindingProvider.
ENDPOINT_ADDRESS_PROPERTY, target);provider1.getRequestContext().put(BindingProvider.
SESSION_MAINTAIN_PROPERTY, true);
Map<String, List<String>> headers1= CastUtils.cast((Map)provider1.getRequestContext().get(
"javax.xml.ws.http.request.headers"));
if (headers1 == null) {headers1 =
new HashMap<String, List<String>>();
// Putting back the headers from the first request.provider1.getRequestContext().put(
"javax.xml.ws.http.request.headers", headers);}
String greeting = stub1.hello(
"Bonjour");
Please let me know if i need to correct something?
Regards,
Anand