LOGGER.trace("timeout receive publication timer datapointer subscriptionId " + subscriptionId);
subscription = subscriptionRegistry.getSubscription(subscriptionId);
if (subscription == null) {
LOGGER.trace("subscription not found - already deleted subscriptionId=" + subscriptionId);
// subscription has already been deleted
SCMPMessageFault fault = new SCMPMessageFault(reqMsg.getSCMPVersion(), SCMPError.SUBSCRIPTION_NOT_FOUND,
subscriptionId);
fault.setMessageType(reqMsg.getMessageType());
response.setSCMP(fault);
} else {
// tries polling from queue
SCMPMessage message = this.publishMessageQueue.getMessage(subscriptionId);
if (message == null) {
LOGGER.trace("no message found on queue - subscription timeout set up no data message subscriptionId="
+ subscriptionId);
// no message found on queue - subscription timeout set up no data message
reqMsg.setHeaderFlag(SCMPHeaderAttributeKey.NO_DATA);
reqMsg.setIsReply(true);
this.response.setSCMP(reqMsg);
} else {
// message polling successful
LOGGER.trace("message found on queue - subscription timeout set up reply message subscriptionId="
+ subscriptionId);
// set up reply
SCMPMessage reply = null;
if (message.isPart()) {
// message from queue is of type part - outgoing must be part too, no poll request
reply = new SCMPPart(message.getSCMPVersion(), false, message.getHeader());
} else {
reply = new SCMPMessage(message.getSCMPVersion(), message.getHeader());
}
reply.setSessionId(subscriptionId);
reply.setMessageType(reqMsg.getMessageType());
reply.setIsReply(true);
reply.setBody(message.getBody());
this.response.setSCMP(reply);
}
}
} catch (Exception ex) {
LOGGER.warn("timeout expired procedure failed, " + ex.getMessage());
SCMPMessageFault scmpFault = new SCMPMessageFault(reqMsg.getSCMPVersion(), SCMPError.SERVER_ERROR, ex.getMessage());
scmpFault.setMessageType(SCMPMsgType.RECEIVE_PUBLICATION);
scmpFault.setLocalDateTime();
response.setSCMP(scmpFault);
} finally {
if (subscription != null) {
// reset subscription timeout to ECI
subscriptionRegistry.resetSubscriptionTimeout(subscription, subscription.getSubscriptionTimeoutMillis());