public SampleClientResult statefulClient(String addUrl, String trpUrl, int iterations) {
boolean infinite = false;
String session = null;
SampleClientResult clientResult = new SampleClientResult();
try {
SOAPEnvelope env1 = buildSoapEnvelope("c1", "v1");
SOAPEnvelope env2 = buildSoapEnvelope("c2", "v1");
SOAPEnvelope env3 = buildSoapEnvelope("c3", "v1");
SOAPEnvelope[] envelopes = {env1, env2, env3};
init(addUrl, trpUrl, null, null, 10000);
serviceClient.getOptions().setAction("urn:sampleOperation");
int i = 0;
int sessionNumber;
String[] cookies = new String[3];
boolean httpSession = session != null && "http".equals(session);
int cookieNumber;
while (i < iterations || infinite) {
i++;
MessageContext messageContext = new MessageContext();
sessionNumber = getSessionTurn(envelopes.length);
messageContext.setEnvelope(envelopes[sessionNumber]);
cookieNumber = getSessionTurn(cookies.length);
String cookie = cookies[cookieNumber];
if (httpSession) {
setSessionID(messageContext, cookie);
}
try {
OperationClient op = serviceClient.createClient(ServiceClient.ANON_OUT_IN_OP);
op.addMessageContext(messageContext);
op.execute(true);
MessageContext responseContext =
op.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
String receivedCookie = extractSessionID(responseContext);
String receivedSetCookie = getSetCookieHeader(responseContext);
if (httpSession) {
if (receivedSetCookie != null && !"".equals(receivedSetCookie)) {
cookies[cookieNumber] = receivedCookie;
}
}
SOAPEnvelope responseEnvelope = responseContext.getEnvelope();
OMElement vElement =
responseEnvelope.getBody().getFirstChildWithName(new QName("Value"));
clientResult.incrementResponseCount();
log.info("Request: " + i + " with Session ID: " +
(httpSession ? cookie : sessionNumber) + " ---- " +
"Response : with " + (httpSession && receivedCookie != null ?
(receivedSetCookie != null ? receivedSetCookie :
receivedCookie) : " ") + " " + vElement.getText());
} catch (AxisFault axisFault) {
log.error("Request with session id " +
(httpSession ? cookie : sessionNumber) + " " +
"- Get a Fault : " + axisFault.getMessage(), axisFault);
}
}
} catch (Exception e) {
log.error("Error invoking service", e);
clientResult.setException(e);
}
terminate();
return clientResult;
}