package org.jentrata.ebms.as4.internal.routes;
import org.apache.camel.EndpointInject;
import org.apache.camel.Exchange;
import org.apache.camel.LoggingLevel;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.impl.DefaultExchange;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.apache.commons.io.IOUtils;
import org.jentrata.ebms.EbmsConstants;
import org.jentrata.ebms.MessageType;
import org.jentrata.ebms.cpa.PartnerAgreement;
import org.jentrata.ebms.cpa.pmode.Party;
import org.jentrata.ebms.cpa.pmode.Security;
import org.jentrata.ebms.cpa.pmode.Signature;
import org.jentrata.ebms.cpa.pmode.UsernameToken;
import org.jentrata.ebms.internal.messaging.MessageDetector;
import org.jentrata.ebms.internal.messaging.PartPropertiesPayloadProcessor;
import org.jentrata.ebms.messaging.MessageStore;
import org.jentrata.ebms.messaging.XmlSchemaValidator;
import org.jentrata.ebms.utils.EbmsUtils;
import org.junit.Test;
import org.w3c.dom.Document;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPMessage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.zip.GZIPOutputStream;
import static org.hamcrest.Matchers.*;
/**
* Unit tests for org.jentrata.ebms.as4.internal.routes.EbMS3InboundRouteBuilder
*
* @author aaronwalker
*/
public class EbMS3InboundRouteBuilderTest extends CamelTestSupport {
@EndpointInject(uri = "mock:mockEbmsInbound")
protected MockEndpoint mockEbmsInbound;
@EndpointInject(uri = "mock:mockEbmsInboundPayload")
protected MockEndpoint mockEbmsInboundPayload;
@EndpointInject(uri = "mock:mockEbmsInboundSignals")
protected MockEndpoint mockEbmsInboundSignals;
@EndpointInject(uri = "mock:mockEbmsErrors")
protected MockEndpoint mockEbmsErrors;
@Test
public void testValidMultipartEBM3UserMessage() throws Exception {
mockEbmsInbound.setExpectedMessageCount(1);
mockEbmsInboundPayload.setExpectedMessageCount(1);
mockEbmsInboundSignals.setExpectedMessageCount(0);
mockEbmsErrors.setExpectedMessageCount(0);
Exchange request = new DefaultExchange(context());
request.getIn().setHeader(Exchange.CONTENT_TYPE,"Multipart/Related; boundary=\"----=_Part_7_10584188.1123489648993\"; type=\"application/soap+xml\"; start=\"<soapPart@jentrata.org>\"");
request.getIn().setHeader(Exchange.HTTP_METHOD,"POST");
request.getIn().setBody(new FileInputStream(fileFromClasspath("simple-as4-user-message.txt")));
Exchange response = context().createProducerTemplate().send("direct:testEbmsInbound",request);
assertMockEndpointsSatisfied();
//assert the response from the route
assertThat("should have gotten http 204 response code",response.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE,Integer.class),equalTo(204));
assertThat("should have gotten no content in the http response",response.getIn().getBody(),nullValue());
Message msg = mockEbmsInbound.getExchanges().get(0).getIn();
assertThat(msg.getBody(), notNullValue());
assertThat(msg.getBody(),instanceOf(String.class));
assertThat(msg.getHeader(EbmsConstants.SOAP_VERSION, String.class),equalTo(SOAPConstants.SOAP_1_2_PROTOCOL));
assertThat(msg.getHeader(EbmsConstants.EBMS_VERSION,String.class),equalTo(EbmsConstants.EBMS_V3));
assertThat(msg.getHeader(EbmsConstants.MESSAGE_TYPE,MessageType.class), equalTo(MessageType.USER_MESSAGE));
assertThat(msg.getHeader(EbmsConstants.MESSAGE_ID,String.class),equalTo("2011-921@5209999001264.jentrata.org"));
assertThat(msg.getHeader(EbmsConstants.REF_TO_MESSAGE_ID,String.class),nullValue());
assertThat(msg.getHeader(EbmsConstants.MESSAGE_TO,String.class),equalTo("5209999001295"));
assertThat(msg.getHeader(EbmsConstants.MESSAGE_FROM,String.class),equalTo("5209999001264"));
assertThat(msg.getHeader(EbmsConstants.MESSAGE_SERVICE,String.class),equalTo("http://docs.oasis-open.org/ebxml-msg/as4/200902/service"));
assertThat(msg.getHeader(EbmsConstants.MESSAGE_ACTION,String.class),equalTo("http://docs.oasis-open.org/ebxml-msg/as4/200902/action"));
assertThat(msg.getHeader(EbmsConstants.MESSAGE_CONVERSATION_ID,String.class),equalTo("2011-921"));
String message = msg.getBody(String.class);
assertThat(message,notNullValue());
assertStringContains(message, "<S12:Envelope xmlns:S12=\"http://www.w3.org/2003/05/soap-envelope\"");
assertThat(msg.hasAttachments(), is(Boolean.TRUE));
assertThat(msg.getAttachmentNames().size(), equalTo(1));
assertThat(msg.getAttachmentNames(),contains("attachmentPart@jentrata.org"));
}
@Test
public void testValidEBM3ReceiptMessage() throws Exception {
mockEbmsInbound.setExpectedMessageCount(0);
mockEbmsInboundPayload.setExpectedMessageCount(0);
mockEbmsInboundSignals.setExpectedMessageCount(1);
mockEbmsErrors.setExpectedMessageCount(0);
Exchange request = new DefaultExchange(context());
request.getIn().setHeader(Exchange.CONTENT_TYPE,"application/soap+xml");
request.getIn().setHeader(Exchange.HTTP_METHOD,"POST");
request.getIn().setBody(new FileInputStream(fileFromClasspath("simple-as4-receipt.xml")));
Exchange response = context().createProducerTemplate().send("direct:testEbmsInbound",request);
assertMockEndpointsSatisfied();
//assert the response from the route
assertThat("should have gotten http 204 response code",response.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE,Integer.class),equalTo(204));
assertThat("should have gotten no content in the http response",response.getIn().getBody(),nullValue());
Message msg = mockEbmsInboundSignals.getExchanges().get(0).getIn();
assertThat(msg.getBody(), notNullValue());
assertThat(msg.getBody(),instanceOf(String.class));
assertThat(msg.getHeader(EbmsConstants.SOAP_VERSION, String.class),equalTo(SOAPConstants.SOAP_1_2_PROTOCOL));
assertThat(msg.getHeader(EbmsConstants.EBMS_VERSION, String.class),equalTo(EbmsConstants.EBMS_V3));
assertThat(msg.getHeader(EbmsConstants.MESSAGE_TYPE,MessageType.class),equalTo(MessageType.SIGNAL_MESSAGE_WITH_USER_MESSAGE));
assertThat(msg.getHeader(EbmsConstants.MESSAGE_ID,String.class),equalTo("someuniqueid@receiver.jentrata.org"));
assertThat(msg.getHeader(EbmsConstants.REF_TO_MESSAGE_ID,String.class),equalTo("orders123@buyer.jentrata.org"));
assertThat(msg.getHeader(EbmsConstants.MESSAGE_FROM,String.class),equalTo("123456789"));
assertThat(msg.getHeader(EbmsConstants.MESSAGE_TO,String.class),equalTo("192837465"));
assertThat(msg.getHeader(EbmsConstants.MESSAGE_SERVICE,String.class),equalTo("Sales"));
assertThat(msg.getHeader(EbmsConstants.MESSAGE_ACTION,String.class),equalTo("ProcessPurchaseOrder"));
assertThat(msg.getHeader(EbmsConstants.MESSAGE_CONVERSATION_ID,String.class),equalTo("ecae53d4-7473-45a6-ad70-61970dd7c4b0"));
String message = msg.getBody(String.class);
assertThat(message,notNullValue());
assertStringContains(message, "<S12:Envelope xmlns:S12=\"http://www.w3.org/2003/05/soap-envelope\"");
}
@Test
public void testSOAPMessageWithABodyBody() throws Exception{
mockEbmsInbound.setExpectedMessageCount(1);
mockEbmsInboundPayload.setExpectedMessageCount(1);
mockEbmsInboundSignals.setExpectedMessageCount(0);
mockEbmsErrors.setExpectedMessageCount(0);
Exchange request = new DefaultExchange(context());
request.getIn().setHeader(Exchange.CONTENT_TYPE,"application/soap+xml");
request.getIn().setHeader(Exchange.HTTP_METHOD,"POST");
request.getIn().setBody(new FileInputStream(fileFromClasspath("simple-as4-with-soap-body.xml")));
Exchange response = context().createProducerTemplate().send("direct:testEbmsInbound",request);
assertMockEndpointsSatisfied();
//assert the response from the route
assertThat("should have gotten http 204 response code",response.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE,Integer.class),equalTo(204));
assertThat("should have gotten no content in the http response",response.getIn().getBody(),nullValue());
}
@Test
public void testInvalidHttpMethod() throws Exception {
Exchange request = new DefaultExchange(context());
request.getIn().setHeader(Exchange.CONTENT_TYPE, "application/soap+xml");
request.getIn().setHeader(Exchange.HTTP_METHOD, "GET");
request.getIn().setBody(new FileInputStream(fileFromClasspath("simple-as4-receipt.xml")));
Exchange response = context().createProducerTemplate().send("direct:testEbmsInbound",request);
assertThat("should have gotten http 405 response code",response.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE,Integer.class),equalTo(405));
assertThat("should have gotten no content in the http response",response.getIn().getBody(String.class),notNullValue());
}
@Test
public void testWSSecurityErrorWithCallbackMEP() throws Exception {
mockEbmsInbound.setExpectedMessageCount(0);
mockEbmsInboundPayload.setExpectedMessageCount(0);
mockEbmsInboundSignals.setExpectedMessageCount(0);
mockEbmsErrors.setExpectedMessageCount(1);
Exchange request = new DefaultExchange(context());
request.getIn().setHeader(Exchange.CONTENT_TYPE,"Multipart/Related; boundary=\"----=_Part_7_10584188.1123489648993\"; type=\"application/soap+xml\"; start=\"<soapPart@jentrata.org>\"");
request.getIn().setHeader(Exchange.HTTP_METHOD,"POST");
request.getIn().setHeader("testSecurity","fail");
request.getIn().setHeader("cpaMEP","callback");
request.getIn().setBody(new FileInputStream(fileFromClasspath("simple-as4-user-message.txt")));
Exchange response = context().createProducerTemplate().send("direct:testEbmsInbound",request);
assertMockEndpointsSatisfied();
assertThat("should have gotten http 204 response code",response.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE,Integer.class),equalTo(204));
assertThat("should have gotten no content in the http response",response.getIn().getBody(),nullValue());
}
@Test
public void testWSSecurityErrorWithResponseMEP() throws Exception {
mockEbmsInbound.setExpectedMessageCount(0);
mockEbmsInboundPayload.setExpectedMessageCount(0);
mockEbmsInboundSignals.setExpectedMessageCount(0);
mockEbmsErrors.setExpectedMessageCount(1);
Exchange request = new DefaultExchange(context());
request.getIn().setHeader(Exchange.CONTENT_TYPE,"Multipart/Related; boundary=\"----=_Part_7_10584188.1123489648993\"; type=\"application/soap+xml\"; start=\"<soapPart@jentrata.org>\"");
request.getIn().setHeader(Exchange.HTTP_METHOD,"POST");
request.getIn().setHeader("testSecurity","fail");
request.getIn().setHeader("cpaMEP","response");
request.getIn().setBody(new FileInputStream(fileFromClasspath("simple-as4-user-message.txt")));
Exchange response = context().createProducerTemplate().send("direct:testEbmsInbound",request);
assertMockEndpointsSatisfied();
assertThat("should have gotten http 500 response code",response.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE,Integer.class),equalTo(500));
assertThat("should have gotten error http response",response.getIn().getBody(),notNullValue());
assertThat(request.getIn().getBody(Document.class),hasXPath("//*[local-name()='Error']"));
}
@Test
public void testInboundErrorMessage() throws Exception {
mockEbmsInbound.setExpectedMessageCount(0);
mockEbmsInboundPayload.setExpectedMessageCount(0);
mockEbmsInboundSignals.setExpectedMessageCount(1);
mockEbmsInboundSignals.expectedHeaderReceived(EbmsConstants.MESSAGE_TYPE, MessageType.SIGNAL_MESSAGE_ERROR);
mockEbmsInboundSignals.expectedHeaderReceived(EbmsConstants.MESSAGE_ID,"9e81f6b8-c02c-4d43-91cf-d160983fa957@jentrata.org");
mockEbmsInboundSignals.expectedHeaderReceived(EbmsConstants.CPA_ID, "testCPAId");
mockEbmsErrors.setExpectedMessageCount(0);
Exchange request = new DefaultExchange(context());
request.getIn().setHeader(Exchange.CONTENT_TYPE,"application/soap+xml");
request.getIn().setHeader(Exchange.HTTP_METHOD, "POST");
request.getIn().setBody(new FileInputStream(fileFromClasspath("simple-as4-error.xml")));
Exchange response = context().createProducerTemplate().send("direct:testEbmsInbound",request);
assertMockEndpointsSatisfied();
//assert the response from the route
assertThat("should have gotten http 204 response code",response.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class),equalTo(204));
assertThat("should have gotten no content in the http response",response.getIn().getBody(),nullValue());
}
@Test
public void testErrorHandler() throws Exception {
mockEbmsInbound.setExpectedMessageCount(0);
mockEbmsInboundPayload.setExpectedMessageCount(0);
mockEbmsInboundSignals.setExpectedMessageCount(0);
mockEbmsErrors.setExpectedMessageCount(0);
Exchange request = new DefaultExchange(context());
request.getIn().setHeader(Exchange.CONTENT_TYPE, "Multipart/Related; boundary=\"----=_Part_7_10584188.1123489648993\"; type=\"application/soap+xml\"; start=\"<soapPart@jentrata.org>\"");
request.getIn().setHeader(Exchange.HTTP_METHOD, "POST");
request.getIn().setHeader("cpaMEP","callback");
request.getIn().setBody(new FileInputStream(fileFromClasspath("simple-as4-user-message.txt")));
request.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE,500);
Exchange response = context().createProducerTemplate().send("direct:testErrorHandler",request);
assertMockEndpointsSatisfied();
System.out.println(response.getIn().getBody(String.class));
assertThat("should have gotten http 500 response code", response.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class), equalTo(500));
assertThat("should have gotten error http response",response.getIn().getBody(),notNullValue());
assertThat(response.getIn().getBody(Document.class),hasXPath("//*[local-name()='Text' and text()='failed doing something']"));
}
@Test
public void test405ErrorHandler() throws Exception {
mockEbmsInbound.setExpectedMessageCount(0);
mockEbmsInboundPayload.setExpectedMessageCount(0);
mockEbmsInboundSignals.setExpectedMessageCount(0);
mockEbmsErrors.setExpectedMessageCount(0);
Exchange request = new DefaultExchange(context());
request.getIn().setHeader(Exchange.CONTENT_TYPE,"Multipart/Related; boundary=\"----=_Part_7_10584188.1123489648993\"; type=\"application/soap+xml\"; start=\"<soapPart@jentrata.org>\"");
request.getIn().setHeader(Exchange.HTTP_METHOD,"POST");
request.getIn().setHeader("cpaMEP","callback");
request.getIn().setBody(new FileInputStream(fileFromClasspath("simple-as4-user-message.txt")));
request.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE,405);
Exchange response = context().createProducerTemplate().send("direct:testErrorHandler",request);
assertMockEndpointsSatisfied();
assertThat("should have gotten http 405 response code",response.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class),equalTo(405));
assertThat("should have gotten error http response",response.getIn().getBody(),notNullValue());
assertThat(response.getIn().getBody(String.class),containsString("Http Method Not Allowed"));
}
@Test
public void testInboundCompressedPayload()throws Exception {
SOAPMessage soapMessage = EbmsUtils.createSOAP12MessageFromClasspath("sample-user-message.xml");
Map<String,String> headers = new HashMap<>();
headers.put(EbmsConstants.CONTENT_TRANSFER_ENCODING, "binary");
EbmsUtils.addAttachment(soapMessage, "attachment1234@jentrata.org", "application/gzip", getCompressedPayload("sample-payload.xml"), headers);
mockEbmsInbound.setExpectedMessageCount(1);
mockEbmsInboundPayload.setExpectedMessageCount(1);
mockEbmsInboundPayload.expectedBodiesReceived(IOUtils.toByteArray((new FileInputStream(fileFromClasspath("sample-payload.xml")))));
mockEbmsInboundPayload.expectedHeaderReceived(EbmsConstants.COMPRESSION_TYPE, "application/gzip");
mockEbmsInboundPayload.expectedHeaderReceived(EbmsConstants.CONTENT_TYPE, "application/xml");
mockEbmsInboundPayload.expectedHeaderReceived(EbmsConstants.CONTENT_ID, "attachment1234@jentrata.org");
mockEbmsInboundPayload.expectedHeaderReceived("PartID","attachment1234@jentrata.org");
mockEbmsInboundSignals.setExpectedMessageCount(0);
mockEbmsErrors.setExpectedMessageCount(0);
Exchange request = new DefaultExchange(context());
request.getIn().setHeader(Exchange.CONTENT_TYPE, soapMessage.getMimeHeaders().getHeader(EbmsConstants.CONTENT_TYPE)[0]);
request.getIn().setHeader(Exchange.HTTP_METHOD, "POST");
request.getIn().setBody(new ByteArrayInputStream(EbmsUtils.toByteArray(soapMessage)));
Exchange response = context().createProducerTemplate().send("direct:testEbmsInbound",request);
assertMockEndpointsSatisfied();
}
@Test
public void testInboundUserMessageWithResponseMEP() throws Exception {
final String exceptedResponse = EbmsUtils.toStringFromClasspath("simple-as4-receipt.xml");
mockEbmsInbound.setExpectedMessageCount(1);
mockEbmsInbound.whenAnyExchangeReceived(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setBody(exceptedResponse);
}
});
mockEbmsInboundPayload.setExpectedMessageCount(1);
mockEbmsInboundSignals.setExpectedMessageCount(0);
mockEbmsErrors.setExpectedMessageCount(0);
Exchange request = new DefaultExchange(context());
request.getIn().setHeader(Exchange.CONTENT_TYPE, "Multipart/Related; boundary=\"----=_Part_7_10584188.1123489648993\"; type=\"application/soap+xml\"; start=\"<soapPart@jentrata.org>\"");
request.getIn().setHeader(Exchange.HTTP_METHOD, "POST");
request.getIn().setHeader("cpaMEP", "response");
request.getIn().setBody(new FileInputStream(fileFromClasspath("simple-as4-user-message.txt")));
Exchange response = context().createProducerTemplate().send("direct:testEbmsInbound",request);
assertMockEndpointsSatisfied();
//assert the response from the route
assertThat("should have gotten http 200 response code", response.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class), equalTo(200));
assertThat(response.getIn().getBody(String.class), equalTo(exceptedResponse));
}
@Test
public void testInvalidEbmsUserMessage() throws Exception {
mockEbmsInbound.setExpectedMessageCount(0);
mockEbmsInboundPayload.setExpectedMessageCount(0);
mockEbmsInboundSignals.setExpectedMessageCount(0);
mockEbmsErrors.setExpectedMessageCount(1);
mockEbmsErrors.expectedHeaderReceived(EbmsConstants.EBMS_ERROR_CODE, "EBMS:0001");
Exchange request = new DefaultExchange(context());
request.getIn().setHeader(Exchange.CONTENT_TYPE,"Multipart/Related; boundary=\"----=_Part_7_10584188.1123489648993\"; type=\"application/soap+xml\"; start=\"<soapPart@jentrata.org>\"");
request.getIn().setHeader(Exchange.HTTP_METHOD,"POST");
request.getIn().setBody(new FileInputStream(fileFromClasspath("simple-invalid-as4-user-message.txt")));
Exchange response = context().createProducerTemplate().send("direct:testEbmsInbound",request);
assertMockEndpointsSatisfied();
assertThat(mockEbmsErrors.getExchanges().get(0).getIn().getHeader(EbmsConstants.EBMS_ERROR_DESCRIPTION,String.class),containsString("Element 'eb:PartyId' must have no element"));
}
private InputStream getCompressedPayload(String filename) throws Exception {
byte [] payload = IOUtils.toByteArray(new FileInputStream(fileFromClasspath(filename)));
ByteArrayOutputStream bos = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(bos);
gzip.write(payload);
gzip.close();
return new ByteArrayInputStream(bos.toByteArray());
}
@Override
protected RouteBuilder[] createRouteBuilders() throws Exception {
org.apache.xml.security.Init.init();
EbMS3InboundRouteBuilder routeBuilder = new EbMS3InboundRouteBuilder();
routeBuilder.setEbmsHttpEndpoint("direct:testEbmsInbound");
routeBuilder.setEbmsResponseInbound("direct:testEbmsResponseInbound");
routeBuilder.setInboundEbmsQueue(mockEbmsInbound.getEndpointUri());
routeBuilder.setInboundEbmsPayloadQueue(mockEbmsInboundPayload.getEndpointUri());
routeBuilder.setInboundEbmsSignalsQueue(mockEbmsInboundSignals.getEndpointUri());
routeBuilder.setSecurityErrorQueue(mockEbmsErrors.getEndpointUri());
routeBuilder.setMessageDetector(new MessageDetector());
routeBuilder.setPayloadProcessor(new PartPropertiesPayloadProcessor());
XmlSchemaValidator xmlSchemaValidator = new XmlSchemaValidator(EbmsUtils.fileFromClasspath("schemas/ebms-header-3_0-200704.xsd"));
routeBuilder.setXmlSchemaValidator(xmlSchemaValidator);
return new RouteBuilder[] {
routeBuilder,
new RouteBuilder() {
@Override
public void configure() throws Exception {
from(MessageStore.DEFAULT_MESSAGE_STORE_ENDPOINT)
.log(LoggingLevel.INFO, "Storing message no where ${headers}")
.routeId("mockStoreMessage");
from(MessageStore.DEFAULT_MESSAGE_INSERT_ENDPOINT)
.choice()
.when(header("testOnException").isNotNull())
.throwException(new IOException("failed to insert message"))
.otherwise()
.log(LoggingLevel.INFO, "Inserting message no where ${headers}")
.routeId("mockInsertStoreMessage");
from(MessageStore.DEFAULT_MESSAGE_UPDATE_ENDPOINT)
.log(LoggingLevel.INFO, "Updating message no where ${headers}")
.routeId("mockUpdateStoreMessage");
from(EventNotificationRouteBuilder.SEND_NOTIFICATION_ENDPOINT)
.log(LoggingLevel.INFO, "mock event notification: ${headers}")
.routeId("mockEventNotification");
from("direct:validatePartner")
.setHeader("JentrataIsValidTradingPartner", constant(Boolean.TRUE))
.setHeader("JentrataMEP", constant("One-Way"))
.routeId("mockValidatePartner");
from("direct:wsseSecurityCheck")
.log(LoggingLevel.INFO, "Mock WSSE Security Check")
.choice()
.when(header("testSecurity").isEqualTo("fail"))
.log(LoggingLevel.INFO, "testing WSSecurityException handling")
.setHeader(EbmsConstants.SECURITY_CHECK, constant(Boolean.FALSE))
.setBody(constant(fileFromClasspath("simple-as4-error.xml")))
.otherwise()
.setHeader(EbmsConstants.SECURITY_CHECK, constant(Boolean.TRUE))
.routeId("mockWsseSecurityCheck");
PartnerAgreement partnerAgreement = generateAgreement("jentrata",true);
from("direct:lookupCpaId")
.setHeader(EbmsConstants.CPA_ID, constant(partnerAgreement.getCpaId()))
.setHeader(EbmsConstants.CPA,constant(partnerAgreement))
.choice()
.when(header("cpaMEP").isEqualTo("response"))
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
PartnerAgreement agreement = exchange.getIn().getHeader(EbmsConstants.CPA,PartnerAgreement.class);
agreement.getSecurity().setSendReceiptReplyPattern(Security.ReplyPatternType.Response);
}
})
.end()
.routeId("mockLookupCpaId");
from("direct:testErrorHandler")
.onException(Exception.class)
.log(LoggingLevel.ERROR,"${exception.message}")
.handled(true)
.to("direct:errorHandler")
.end()
.choice()
.when(header(Exchange.HTTP_RESPONSE_CODE).isEqualTo(405))
.log(LoggingLevel.WARN,"here")
.throwException(new UnsupportedOperationException("Http Method Not Allowed"))
.otherwise()
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(500))
.throwException(new IOException("failed doing something"))
.routeId("testErrorHandler");
}
}
};
}
private PartnerAgreement generateAgreement(String username, boolean signatureEnabled) {
PartnerAgreement agreement = new PartnerAgreement();
agreement.setCpaId("testCPAId");
Party party = new Party();
UsernameToken authorization = new UsernameToken();
authorization.setUsername(username);
authorization.setPassword("gocDv4SEXRDxNjucDDfo7I7ACTc=");
party.setAuthorization(authorization);
agreement.setInitiator(party);
agreement.setResponder(party);
Security security = new Security();
security.setSendReceiptReplyPattern(Security.ReplyPatternType.Callback);
agreement.setSecurity(security);
if(signatureEnabled) {
Signature signature = new Signature();
signature.setKeyStoreAlias(username);
signature.setKeyStorePass("security");
security.setSignature(signature);
}
return agreement;
}
protected static File fileFromClasspath(String filename) {
File file = new File(Thread.currentThread().getContextClassLoader().getResource(filename).getFile());
return file;
}
}