private void logRouteStart(Exchange exchange) { //UnitOfWork -> getRouteContext -> Route -> Id. String routeId = exchange.getUnitOfWork().getRouteContext().getRoute().getId(); WonMessage message = (WonMessage) exchange.getIn().getHeader(WonCamelConstants.MESSAGE_HEADER); if (message == null){ logger.debug("starting route {}: [no WoNMessage]", routeId); return; } logger.debug("starting route {}: {} type:{}, dir:{}, resp:{}, rem: {}", new String[]{ routeId, message.getMessageURI().toString(), message.getMessageType().toString(), message.getEnvelopeType().toString(), message.getIsResponseToMessageURI() == null ? "[not a response]" : message.getIsResponseToMessageURI().toString(), message.getCorrespondingRemoteMessageURI() == null ? "[no remote message uri]" : message.getCorrespondingRemoteMessageURI().toString() }); }
@Override public void onSuccessResponse(final Exchange exchange) throws Exception { WonMessage responseMessage = (WonMessage) exchange.getIn().getHeader(WonCamelConstants.MESSAGE_HEADER); MessageEventPlaceholder mep = this.messageEventRepository.findOneByCorrespondingRemoteMessageURI( responseMessage .getIsResponseToMessageURI()); //update the connection database: set the remote connection URI just obtained from the response Connection con = this.connectionRepository.findOneByConnectionURIForUpdate(mep.getSenderURI()); con.setRemoteConnectionURI(responseMessage.getSenderURI()); this.connectionRepository.save(con); }
/** * If the message is a ResponseMessage (SuccessResponse or FailureResponse) * this method returns the message that was responded to and that belongs to the same parent as * the specified message. * @param message * @return the URI of the message that was responded to, or null if the specified message is not a ResponseMessage. */ public static URI getLocalIsResponseToURI(WonMessage message){ WonMessageType messageType = message.getMessageType(); if (messageType == SUCCESS_RESPONSE || messageType == FAILURE_RESPONSE) { WonMessageDirection direction = message.getEnvelopeType(); if (direction == WonMessageDirection.FROM_EXTERNAL){ return message.getIsRemoteResponseToMessageURI(); } else { return message.getIsResponseToMessageURI(); } }else { return null; } } }
@Override protected void doRun(Event event, EventListener executingListener) throws Exception { WonMessage responseWonMessage = null; if (event instanceof SuccessResponseEvent) { responseWonMessage = ((SuccessResponseEvent)event).getMessage(); } else if (event instanceof FailureResponseEvent) { responseWonMessage = ((FailureResponseEvent)event).getMessage(); } else { //can't process any other events return; } logger.debug("eagerly caching data in reaction to event {}", event); //put received message into cache LinkedDataSource linkedDataSource = context.getLinkedDataSource(); if (linkedDataSource instanceof CachingLinkedDataSource) { URI requester = responseWonMessage.getReceiverNeedURI(); ((CachingLinkedDataSource) linkedDataSource).addToCache(responseWonMessage.getCompleteDataset(), responseWonMessage.getMessageURI(), requester); //load the original message(s) into cache, too Set<URI> toLoad = new HashSet<URI>(); addIfNotNull(toLoad, responseWonMessage.getIsRemoteResponseToMessageURI()); addIfNotNull(toLoad, responseWonMessage.getIsResponseToMessageURI()); addIfNotNull(toLoad, responseWonMessage.getCorrespondingRemoteMessageURI()); List<URI> previous = WonRdfUtils.MessageUtils.getPreviousMessageUrisIncludingRemote(responseWonMessage); addIfNotNull(toLoad, previous); toLoad.forEach(uri -> linkedDataSource.getDataForResource(uri, requester)); } }
/** * If we are saving response message, update original massage with the * information about response message uri * @param message response message */ private void updateResponseInfo(final WonMessage message) { // find a message it responds to URI originalMessageURI = message.getIsResponseToMessageURI(); if (originalMessageURI != null) { // update the message it responds to with the uri of the response messageEventRepository.lockConnectionAndEventContainerByContainedMessageForUpdate(originalMessageURI); messageEventRepository.lockNeedAndEventContainerByContainedMessageForUpdate(originalMessageURI); MessageEventPlaceholder event = messageEventRepository.findOneByMessageURIforUpdate(originalMessageURI); if (event != null){ //we may not have saved the event yet if the current message is a FailureResponse //and the error causing the response happened before saving the original message. event.setResponseMessageURI(message.getMessageURI()); messageEventRepository.save(event); } } }
equalsOrBothNull(processedMessage.getIsResponseToMessageURI(), message.getIsResponseToMessageURI()) && processedMessage.getContentGraphURIs().containsAll(message.getContentGraphURIs())
/** * Copies the envelope properties from the specified message to this message. * * Note that this does not copy the original envelope graph, only the * standard envelope properties. * * @param wonMessage * @return */ public static WonMessageBuilder copyEnvelopeFromWonMessage(final WonMessage wonMessage) { WonMessageBuilder builder = new WonMessageBuilder(wonMessage.getMessageURI()) .setWonMessageType(wonMessage.getMessageType()) .setReceiverURI(wonMessage.getReceiverURI()) .setReceiverNeedURI(wonMessage.getReceiverNeedURI()) .setReceiverNodeURI(wonMessage.getReceiverNodeURI()) .setSenderURI(wonMessage.getSenderURI()) .setSenderNeedURI(wonMessage.getSenderNeedURI()) .setSenderNodeURI(wonMessage.getSenderNodeURI()); if (wonMessage.getIsResponseToMessageType() != null){ builder.setIsResponseToMessageType(wonMessage.getIsResponseToMessageType()); } if (wonMessage.getIsResponseToMessageURI() != null){ builder.setIsResponseToMessageURI(wonMessage.getIsResponseToMessageURI()); } if (wonMessage.getIsRemoteResponseToMessageURI() != null){ builder.setIsRemoteResponseToMessageURI(wonMessage.getIsRemoteResponseToMessageURI()); } return builder; }
public static WonMessage forwardReceivedNodeToNodeMessageAsNodeToNodeMessage(final URI newMessageUri, final WonMessage wonMessage, final URI connectionURI, final URI needURI, final URI wonNodeUri, final URI remoteConnectionURI, final URI remoteNeedURI, final URI remoteWonNodeUri) { WonMessageBuilder builder = new WonMessageBuilder(newMessageUri) .setWonMessageType(wonMessage.getMessageType()) .forward(wonMessage) .setForwardedMessageURI(wonMessage.getMessageURI()) .setSenderNeedURI(needURI) .setSenderURI(connectionURI) .setSenderNodeURI(wonNodeUri) .setSentTimestamp(System.currentTimeMillis()) .setReceiverURI(remoteConnectionURI) .setReceiverNeedURI(remoteNeedURI) .setReceiverNodeURI(remoteWonNodeUri) .setIsRemoteResponseToMessageURI(wonMessage.getIsRemoteResponseToMessageURI()) .setIsResponseToMessageURI(wonMessage.getIsResponseToMessageURI()) .setIsResponseToMessageType(wonMessage.getIsResponseToMessageType()) .setWonMessageDirection(WonMessageDirection.FROM_SYSTEM); return builder.build(); }