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.MessageType; import org.jentrata.ebms.cpa.pmode.Security; import org.jentrata.ebms.messaging.MessageStore; /** * Generates and Ebms Signal Message based on a given soap message * * @author aaronwalker */ public class EbmsSignalMessageRouteBuilder extends RouteBuilder { private String inboundEbmsQueue = "activemq:queue:jentrata_internal_ebms_inbound"; private String outboundEbmsQueue = "activemq:queue:jentrata_internal_ebms_outbound"; private String wsseAddSecurityToHeader = "direct:wsseAddSecurityToHeader"; private String messgeStoreEndpoint = MessageStore.DEFAULT_MESSAGE_STORE_ENDPOINT; private String messageInsertEndpoint = MessageStore.DEFAULT_MESSAGE_INSERT_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(inboundEbmsQueue) .convertBodyTo(String.class) .to("direct:receiptRequired") .choice() .when(header(EbmsConstants.EBMS_RECEIPT_REQUIRED).isEqualTo(true)) .log(LoggingLevel.INFO, "Generating receipt message for from:${headers.jentrataFrom} - to:${headers.jentrataTo} - ${headers.jentrataMessageId}") .to("direct:lookupCpaId") .setHeader(EbmsConstants.MESSAGE_RECEIPT_PATTERN,simple("${headers.JentrataCPA.security.sendReceiptReplyPattern.name()}")) .setHeader("messageid", simple("${bean:uuidGenerator.generateId}")) .setHeader("timestamp",simple("${date:now:yyyy-MM-dd'T'HH:mm:ss.S'Z'}")) .to("xslt:signalMessage.xsl") .convertBodyTo(String.class) .setHeader(EbmsConstants.MESSAGE_DIRECTION, constant(EbmsConstants.MESSAGE_DIRECTION_OUTBOUND)) .setHeader(EbmsConstants.CONTENT_TYPE,constant(EbmsConstants.SOAP_XML_CONTENT_TYPE)) .setHeader(EbmsConstants.MESSAGE_ID,header("messageid")) .setHeader(EbmsConstants.MESSAGE_TYPE,constant(MessageType.SIGNAL_MESSAGE)) .setHeader(EbmsConstants.REF_TO_MESSAGE_ID,ns.xpath("//eb3:RefToMessageId/text()",String.class)) .to(wsseAddSecurityToHeader) .to(messgeStoreEndpoint) //store the outbound signal message .to(messageInsertEndpoint) //create message entry for tracking .to("direct:deliveryReceipt") .otherwise() .log(LoggingLevel.INFO,"No receipt required for from:${headers.jentrataFrom} - to:${headers.jentrataTo} - ${headers.jentrataMessageId}") .routeId("_jentrataEbmsGenerateSignalMessage"); from("direct:receiptRequired") .setHeader(EbmsConstants.EBMS_RECEIPT_REQUIRED,constant("true")) .routeId("_jentrataEbmsReceiptRequired"); from("direct:deliveryReceipt") .choice() .when(header(EbmsConstants.MESSAGE_RECEIPT_PATTERN).isEqualTo(Security.ReplyPatternType.Callback.name())) .to(outboundEbmsQueue) .otherwise() .log(LoggingLevel.DEBUG,"receipt returned on response") .routeId("_jentrataEbmsDeliveryReceipt"); } public String getInboundEbmsQueue() { return inboundEbmsQueue; } public void setInboundEbmsQueue(String inboundEbmsQueue) { this.inboundEbmsQueue = inboundEbmsQueue; } public String getOutboundEbmsQueue() { return outboundEbmsQueue; } public void setOutboundEbmsQueue(String outboundEbmsQueue) { this.outboundEbmsQueue = outboundEbmsQueue; } public String getMessgeStoreEndpoint() { return messgeStoreEndpoint; } public void setMessgeStoreEndpoint(String messgeStoreEndpoint) { this.messgeStoreEndpoint = messgeStoreEndpoint; } public String getMessageInsertEndpoint() { return messageInsertEndpoint; } public void setMessageInsertEndpoint(String messageInsertEndpoint) { this.messageInsertEndpoint = messageInsertEndpoint; } public String getWsseAddSecurityToHeader() { return wsseAddSecurityToHeader; } public void setWsseAddSecurityToHeader(String wsseAddSecurityToHeader) { this.wsseAddSecurityToHeader = wsseAddSecurityToHeader; } }