package org.jentrata.ebms.as4.internal.routes;
import org.apache.camel.LoggingLevel;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.builder.xml.Namespaces;
import org.jentrata.ebms.EbmsConstants;
import org.jentrata.ebms.MessageStatusType;
import org.jentrata.ebms.MessageType;
import org.jentrata.ebms.messaging.MessageStore;
/**
* Processing incoming ebms3 Signal Messages
*
* @author aaronwalker
*/
public class EbmsSignalMessageHandlerRouteBuilder extends RouteBuilder {
private String inboundEbmsSignalsQueue = "activemq:queue:jentrata_internal_ebms_inbound_signals";
private String messageUpdateEndpoint = MessageStore.DEFAULT_MESSAGE_UPDATE_ENDPOINT;
@Override
public void configure() throws Exception {
final Namespaces ns = new Namespaces("S12", "http://www.w3.org/2003/05/soap-envelope")
.add("eb3", "http://docs.oasis-open.org/ebxml-msg/ebms/v3.0/ns/core/200704/");
from(inboundEbmsSignalsQueue)
.choice()
.when(header(EbmsConstants.CPA_ID).isEqualTo(EbmsConstants.CPA_ID_UNKNOWN))
.log(LoggingLevel.WARN,"Received SignalMessage from unknown partner - msgId:${headers.JentrataMessageID} - type:${headers.JentrataMessageType}")
.when(header(EbmsConstants.MESSAGE_TYPE).isEqualTo(MessageType.SIGNAL_MESSAGE))
.log(LoggingLevel.INFO,"Received Signal Message for - cpaId:${headers.JentrataCPAId} - msgId:${headers.JentrataMessageID} - refMsgId:${headers.JentrataRefMessageID}")
.setHeader("JentrataOriginalMessageID",header(EbmsConstants.MESSAGE_ID))
.setHeader(EbmsConstants.MESSAGE_ID,header(EbmsConstants.REF_TO_MESSAGE_ID))
.setHeader(EbmsConstants.MESSAGE_DIRECTION,constant(EbmsConstants.MESSAGE_DIRECTION_OUTBOUND))
.setHeader(EbmsConstants.MESSAGE_STATUS, constant(MessageStatusType.DONE))
.to(messageUpdateEndpoint)
.when(header(EbmsConstants.MESSAGE_TYPE).isEqualTo(MessageType.SIGNAL_MESSAGE_WITH_USER_MESSAGE))
.log(LoggingLevel.INFO,"Received Signal Message for - cpaId:${headers.JentrataCPAId} - msgId:${headers.JentrataMessageID} - refMsgId:${headers.JentrataRefMessageID}")
.setHeader("JentrataOriginalMessageID",header(EbmsConstants.MESSAGE_ID))
.setHeader(EbmsConstants.MESSAGE_ID,header(EbmsConstants.REF_TO_MESSAGE_ID))
.setHeader(EbmsConstants.MESSAGE_DIRECTION,constant(EbmsConstants.MESSAGE_DIRECTION_OUTBOUND))
.setHeader(EbmsConstants.MESSAGE_STATUS, constant(MessageStatusType.DONE))
.to(messageUpdateEndpoint)
.when(header(EbmsConstants.MESSAGE_TYPE).isEqualTo(MessageType.SIGNAL_MESSAGE_ERROR))
.setHeader("JentrataOriginalMessageID", header(EbmsConstants.MESSAGE_ID))
.setHeader(EbmsConstants.REF_TO_MESSAGE_ID, ns.xpath("//eb3:Error/@refToMessageInError",String.class))
.log(LoggingLevel.INFO, "Received Error Signal Message for - cpaId:${headers.JentrataCPAId} - msgId:${headers.JentrataMessageID} - refMsgId:${headers.JentrataRefMessageID}")
.setHeader(EbmsConstants.MESSAGE_ID, header(EbmsConstants.REF_TO_MESSAGE_ID))
.setHeader(EbmsConstants.MESSAGE_DIRECTION,constant(EbmsConstants.MESSAGE_DIRECTION_OUTBOUND))
.setHeader(EbmsConstants.MESSAGE_STATUS,constant(MessageStatusType.ERROR))
.setHeader(EbmsConstants.MESSAGE_STATUS_DESCRIPTION,xpath("//*[local-name()='Description'][1]/text()").stringResult())
.to(messageUpdateEndpoint)
.otherwise()
.log(LoggingLevel.WARN,"Received unknown message type - msgId:${headers.JentrataMessageID} - type:${headers.JentrataMessageType}")
.end()
.routeId("_jentrataSignalMessageHandler");
}
public String getInboundEbmsSignalsQueue() {
return inboundEbmsSignalsQueue;
}
public void setInboundEbmsSignalsQueue(String inboundEbmsSignalsQueue) {
this.inboundEbmsSignalsQueue = inboundEbmsSignalsQueue;
}
public String getMessageUpdateEndpoint() {
return messageUpdateEndpoint;
}
public void setMessageUpdateEndpoint(String messageUpdateEndpoint) {
this.messageUpdateEndpoint = messageUpdateEndpoint;
}
}