Hi, the simple session handler adds the session id only if there exists the right property in MessageContext. If this property doesn't exists the session header will not be craeted.
Hi,
I fiddled around with session management in Axis for a few days now and I
encountered some problems, mainly related to the client configuration.
The following explanation is quite long but I think necessary to get the
whole background.
OK
First I tested the example test.session.TestSimpleSession and it worked
fine.
Then I tried to make my service session enabled, adding a method that works
more or less similar to the one in the example (just for testing purposes).
The server part is generated with the Java2WSDL and WSDL2Java tools and I
added the SimpleSessionHandler to the server .wsdd like that
...
<handler name="SimpleSessionHandler"
type="java:org.apache.axis.handlers.SimpleSessionHandler"></handler>
<!-- Services from FMConnectorService WSDL service -->
<service name="FMConnector" provider="java:RPC">
<requestFlow>
<handler type="SimpleSessionHandler"/>
<handler type="soapmonitor"/>
</requestFlow>
<responseFlow>
<handler type="SimpleSessionHandler"/>
<handler type="soapmonitor"/>
</responseFlow>
...
Session management on the server seems to work because I see (in the
SOAPMonitor) a response with session ID
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
<ns1:sessionID soapenv:actor="" soapenv:mustUnderstand="0"
xsi:type="xsd:long"
xmlns:ns1="http://xml.apache.org/axis/session">6254954670844961902</ns1:sess
ionID>
</soapenv:Header>
<soapenv:Body>
<ns2:commitReceiptResponse
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns2="FMConnector">
<commitReceiptReturn
xsi:type="xsd:string">org.apache.axis.session.SimpleSession@87e704
1</commitReceiptReturn>
</ns2:commitReceiptResponse>
</soapenv:Body>
</soapenv:Envelope>
My client app is simple and again a modification of the
SimpleSessionHandler.
import org.apache.axis.client.Service;
import org.apache.axis.client.Call;
import org.apache.axis.configuration.XMLStringProvider;
public class TestClient {
static final String clientWSDD =
"<deployment xmlns=\"http://xml.apache.org/axis/wsdd/\"
" +
"xmlns:java=\"http://xml.apache.org/axis/wsdd/providers/java\">\n" +
" <handler
type=\"java:org.apache.axis.handlers.SimpleSessionHandler\" " +
"name=\"SimpleSessionHandler\"/>\n" +
"<globalConfiguration>\n" +
" <requestFlow><handler
type=\"SimpleSessionHandler\"/></requestFlow>\n" +
" <responseFlow><handler
type=\"SimpleSessionHandler\"/></responseFlow>\n" +
"</globalConfiguration>\n" +
" <transport name=\"http\" " +
"pivot=\"java:org.apache.axis.transport.http.HTTPSender\"/>\n" +
"</deployment>";
static XMLStringProvider clientProvider = new
XMLStringProvider(clientWSDD);
public static void main(String[] args) {
try {
String FMConnector_address =
"http://localhost:8080/axis/services/FMConnector";
Service svc = new Service(clientProvider);
svc.setMaintainSession(true);
Call call = (Call)svc.createCall();
call.setTargetEndpointAddress(new
java.net.URL(FMConnector_address));
System.out.println(call.invoke("FMConnector",
"commitReceipt", null));
System.out.println(call.invoke("FMConnector",
"commitReceipt", null));
System.out.println(call.invoke("FMConnector",
"commitReceipt", null));
System.out.println(call.invoke("FMConnector",
"commitReceipt", null));
} catch (Exception e) {
e.printStackTrace();
}
}
}
I'm just calling the service method four times. That works but there is no
session ID in the request (!?)
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:commitReceipt xmlns:ns1="FMConnector"/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
So what's wrong ?
A few words to the wsdd in the client app. I used that bit in the originally
example and it works fine.
I tried also variations with <requestFlow> and <responseFlow> inside the
<transport> tag.
Another question:
How can I set e.g. the timeout for the SessionHandler ? Is there a way to
put it in server wsdd ?
As I mentioned before, the server bits are generated. In which part can I
put handler related stuff like changing the timeout programmatically (in the
skeleton ?).
Thanks
Sven
-----Urspr�ngliche Nachricht-----
Von: Sven Dilsen [mailto:[EMAIL PROTECTED]]
Gesendet: Mo 10.02.2003 11.51 Uhr
An: '[EMAIL PROTECTED]'
Cc:
Betreff: sessions and client config
<<winmail.dat>>
