use of iso.std.iso_iec._24727.tech.schema.Terminate in project open-ecard by ecsec.
the class IFD method releaseContext.
@Override
public synchronized ReleaseContextResponse releaseContext(ReleaseContext parameters) {
ReleaseContextResponse response;
if (ByteUtils.compare(ctxHandle, parameters.getContextHandle())) {
if (numClients.decrementAndGet() == 0) {
// last client detaches
env.removeIFDCtx(ctxHandle);
ctxHandle = null;
numClients = null;
// terminate thread pool
// wait for threads to die and block new requests
threadPool.shutdownNow();
// just assume it worked ... and don't wait
threadPool = null;
asyncWaitThreads = null;
}
evManager.terminate();
response = WSHelper.makeResponse(ReleaseContextResponse.class, WSHelper.makeResultOK());
return response;
} else {
String msg = "Invalid context handle specified.";
Result r = WSHelper.makeResultError(ECardConstants.Minor.IFD.INVALID_CONTEXT_HANDLE, msg);
response = WSHelper.makeResponse(ReleaseContextResponse.class, r);
return response;
}
}
use of iso.std.iso_iec._24727.tech.schema.Terminate in project open-ecard by ecsec.
the class SelectorSAL method initialize.
@Override
public InitializeResponse initialize(Initialize init) {
InitializeResponse response = WSHelper.makeResponse(InitializeResponse.class, WSHelper.makeResultOK());
// only initialize one time
if (initializedSals.isEmpty()) {
LinkedList<SAL> sals = new LinkedList<>();
sals.add(main);
sals.addAll(special);
for (SAL next : sals) {
try {
InitializeResponse res = next.initialize(init);
WSHelper.checkResult(res);
if (!WSHelper.resultsInWarn(res)) {
if (next instanceof SpecializedSAL) {
initializedSpecializedSals.add((SpecializedSAL) next);
} else {
initializedSals.add(next);
}
}
} catch (WSHelper.WSException ex) {
String msg = "One of the SAL instances failed to initialize:\n" + ex.getMessage();
terminate(new Terminate());
response.setResult(WSHelper.makeResultError(ECardConstants.Minor.Disp.COMM_ERROR, msg));
return response;
}
}
}
return response;
}
use of iso.std.iso_iec._24727.tech.schema.Terminate in project open-ecard by ecsec.
the class RichClient method teardown.
public void teardown() {
try {
if (eventDispatcher != null) {
eventDispatcher.terminate();
}
// TODO: shutdown addon manager and related components?
if (manager != null) {
manager.shutdown();
}
// shutdown control modules
if (httpBinding != null) {
httpBinding.stop();
}
// shutdown SAL
if (sal != null) {
Terminate terminate = new Terminate();
sal.terminate(terminate);
}
// shutdown IFD
if (ifd != null && contextHandle != null) {
ReleaseContext releaseContext = new ReleaseContext();
releaseContext.setContextHandle(contextHandle);
ifd.releaseContext(releaseContext);
}
} catch (Exception ex) {
LOG.error("Failed to stop Richclient.", ex);
}
System.exit(0);
}
use of iso.std.iso_iec._24727.tech.schema.Terminate in project open-ecard by ecsec.
the class SelectorSAL method terminate.
@Override
public TerminateResponse terminate(Terminate terminate) {
TerminateResponse response = WSHelper.makeResponse(TerminateResponse.class, WSHelper.makeResultOK());
// only terminate if initialized
if (!initializedSals.isEmpty()) {
boolean errorHit = false;
for (SAL next : initializedSals) {
try {
TerminateResponse res = next.terminate(terminate);
WSHelper.checkResult(res);
} catch (WSHelper.WSException ex) {
// in case of an error, take the error code from the first SAL
if (!errorHit) {
response.setResult(ex.getResult());
}
}
}
initializedSals.clear();
}
return response;
}
use of iso.std.iso_iec._24727.tech.schema.Terminate in project open-ecard by ecsec.
the class TinySALTest method testTerminate.
/**
* Test of terminate method, of class TinySAL.
*/
@Test(enabled = TESTS_ENABLED)
public void testTerminate() {
System.out.println("terminate");
Terminate parameters = new Terminate();
TerminateResponse result = instance.terminate(parameters);
assertEquals(ECardConstants.Major.ERROR, result.getResult().getResultMajor());
}
Aggregations