use of fi.laverca.jaxb.mss.MSSStatusResp in project laverca by laverca.
the class MSS_StatusQueryBindingStub method MSS_StatusQuery.
@Override
public MSSStatusResp MSS_StatusQuery(MSSStatusReq req) throws java.rmi.RemoteException {
if (super.cachedEndpoint == null) {
throw new org.apache.axis.NoEndPointException();
}
Call _call1 = this.createCall(SOAPConstants.SOAP12_CONSTANTS, null, _operations[0]);
_call1.setProperty(Call.SEND_TYPE_ATTR, Boolean.FALSE);
_call1.setProperty(AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
_call1.setSOAPActionURI("#MSS_StatusQuery");
this.setRequestHeaders(_call1);
Object _resp = _call1.invoke(new Object[] { req });
if (_resp instanceof java.rmi.RemoteException) {
throw (java.rmi.RemoteException) _resp;
} else {
return (MSSStatusResp) _resp;
}
}
use of fi.laverca.jaxb.mss.MSSStatusResp in project laverca by laverca.
the class ClientBase method initializeTask.
/**
* Initializes a FutureTask for polling for the signature via StatusRequests.
*
* This is used by {@link #call(MssRequest, ResponseHandler)}.
*
* @param req The request object to send
* @param sigResp A response to the original signature request
* @param handler A response handler for receiving asynch responses.
* @return A FutureTask wrapping the StatusRequest poll logic
*
* @throws IOException if an HTTP communication error occurs or if the service returns a SOAP Fault
*/
protected FutureTask<Resp> initializeTask(final Req req, final MSSSignatureResp sigResp, final ResponseHandler<Req, Resp> handler) throws IOException {
Callable<Resp> callable = new Callable<Resp>() {
@Override
public Resp call() throws Exception {
long timeout = ClientBase.this.timeout;
long now = System.currentTimeMillis();
// Note that the transaction generally times out at the server at 180 s
long deadline = now + timeout;
Resp resp = null;
ProgressUpdate update = new ProgressUpdate(timeout, now);
MSSStatusResp statResp = null;
long waitPeriod = ClientBase.this.initialWait;
while (true) {
// Sleep for the rest of the interval
long timeToWait = waitPeriod - (System.currentTimeMillis() - now);
if (timeToWait > 0)
Thread.sleep(timeToWait);
now = System.currentTimeMillis();
waitPeriod = ClientBase.this.subsequentWait;
if (now > deadline) {
log.trace("Timed out");
handler.onError(req, new MssException("Timed out"));
break;
}
MSSStatusReq statReq = null;
try {
statReq = ClientBase.this.mssClient.createStatusRequest(sigResp, req.sigReq.getAPInfo().getAPTransID());
} catch (Throwable t) {
log.trace("Failed creating status request", t);
handler.onError(req, t);
break;
}
try {
log.trace("Sending statReq");
statResp = ClientBase.this.mssClient.send(statReq);
log.trace("Got statResp");
resp = ClientBase.this.createResp(req.sigReq, sigResp, statResp);
boolean done = isDone(resp);
boolean batchSignDone = resp.isBatchSignatureComplete();
long statusCode = parseStatus(statResp.getStatus());
if (StatusCodes.OUTSTANDING_TRANSACTION.equals(statusCode) || !batchSignDone) {
log.trace("Got an outstanding Status Response. Continuing to wait for a final answer.");
handler.onOutstandingProgress(req, update);
continue;
} else if (done) {
log.info("Got a final Status Response. Ending the wait.");
handler.onResponse(req, resp);
break;
} else {
log.warn("Got an abnormal Status Response. (" + statusCode + ") Ending the wait.");
MssException fe = new MssException("Abnormal status code " + statusCode);
handler.onError(req, fe);
break;
}
} catch (AxisFault af) {
log.trace("Got SOAP fault", af);
handler.onError(req, af);
break;
} catch (IOException ioe) {
log.trace("Got IOException", ioe);
throw ioe;
}
}
return resp;
}
};
return new FutureTask<Resp>(callable);
}
Aggregations