Search in sources :

Example 1 with MSSStatusResp

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;
    }
}
Also used : Call(org.apache.axis.client.Call) MSSStatusResp(fi.laverca.jaxb.mss.MSSStatusResp)

Example 2 with MSSStatusResp

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);
}
Also used : AxisFault(org.apache.axis.AxisFault) MssException(fi.laverca.mss.MssException) IOException(java.io.IOException) Callable(java.util.concurrent.Callable) MSSStatusReq(fi.laverca.jaxb.mss.MSSStatusReq) MSSStatusResp(fi.laverca.jaxb.mss.MSSStatusResp) FutureTask(java.util.concurrent.FutureTask) MSSSignatureResp(fi.laverca.jaxb.mss.MSSSignatureResp) MSSReceiptResp(fi.laverca.jaxb.mss.MSSReceiptResp) MSSStatusResp(fi.laverca.jaxb.mss.MSSStatusResp)

Aggregations

MSSStatusResp (fi.laverca.jaxb.mss.MSSStatusResp)2 MSSReceiptResp (fi.laverca.jaxb.mss.MSSReceiptResp)1 MSSSignatureResp (fi.laverca.jaxb.mss.MSSSignatureResp)1 MSSStatusReq (fi.laverca.jaxb.mss.MSSStatusReq)1 MssException (fi.laverca.mss.MssException)1 IOException (java.io.IOException)1 Callable (java.util.concurrent.Callable)1 FutureTask (java.util.concurrent.FutureTask)1 AxisFault (org.apache.axis.AxisFault)1 Call (org.apache.axis.client.Call)1