UIMA AS service should release a CAS back to its CAS pool when deserializer throws an exception. The method in question is deserializeCASandRegisterWithCache() in ProcessRequestHandler.java. It fetches CAS from a CAS pool before deserializing. If deserializer throws an exception, the deserializeCASandRegisterWithCache() returns that exception but never releases the CAS. Add try ... catch
and release the CAS if exception is thrown.