<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="http://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    How to share session between web service calls?
</h3>
<span style="margin-bottom: 10px;">
    reply from <a href="http://community.jboss.org/people/anand201301">Anand Jayaraman</a> in <i>JBoss Web Services CXF</i> - <a href="http://community.jboss.org/message/557201#557201">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>Hi,</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>I needed one clarification, will this work if there are two separate instances of BindingProvider being used from client code. For e.g.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Greeter greeter = service.getGreeterPort();</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>BindingProvider bp = (BindingProvider)greeter;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; bp.getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Map&lt;String, List&lt;String&gt;&gt; headers= CastUtils.cast((Map)bp.getRequestContext().get("javax.xml.ws.http.request.headers"));</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>if (headers == null) {</p><p>&#160;&#160;&#160; headers = new HashMap&lt;String, List&lt;String&gt;&gt;();</p><p>&#160;&#160;&#160; bp.getRequestContext().put("javax.xml.ws.http.request.headers", headers);</p><p>}</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>List&lt;String&gt; cookies = Arrays.asList(new String[] {"a=a", "b=b"});</p><p>headers.put("Cookie", cookies);</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>String greeting = greeter.greetMe("Bonjour");</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p><strong style="font-weight: bold;">//After this invocation i am creating a brand new instance of binding provider .</strong></p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Greeter <strong>greeter1</strong> = <strong>service1</strong>.getGreeterPort();</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>BindingProvider <strong>bp1</strong> = (BindingProvider)<strong>greeter1</strong>;</p><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; bp.getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Map&lt;String, List&lt;String&gt;&gt; headers= CastUtils.cast((Map)<strong>bp1</strong>.getRequestContext().get("javax.xml.ws.http.request.headers"));</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>if (headers == null) {</p><p>&#160;&#160;&#160; headers = new HashMap&lt;String, List&lt;String&gt;&gt;();</p><p>&#160;&#160;&#160; bp.getRequestContext().put("javax.xml.ws.http.request.headers", headers);</p><p>}</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>List&lt;String&gt; cookies = Arrays.asList(new String[] {"a=a", "b=b"});</p><p>headers.put("Cookie", cookies);</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>String greeting = <strong>greeter1</strong>.greetMe("Bonjour");</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>-------------------------------------------------------------------------------------------------</p><p>The headers set in the first BindingProvider may not be same as the headers in the second binding provider because CXF would create a different cookie for the second BindingProvider instance.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>So is the solution to keep the header, cookie information in a local data structure in the client side and keep copying it back to all new BindingProvider instances created from client side so that the same cookie information is relayed back to the server?</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>But this way it would not be too different from the HttpConduit approach i had mentioned earlier.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Are there any changes on the server that also needs to be done?</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Regards,</p><p>Anand</p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="http://community.jboss.org/message/557201#557201">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in JBoss Web Services CXF at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2046">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>