use of com.helger.phase4.messaging.mime.AS4MimeMessage in project phase4 by phax.
the class AS4eSENSCEFOneWayFuncTest method testEsens_TA04.
/**
* Prerequisite:<br>
* SMSH and RMSH are configured to exchange AS4 messages according to the
* e-SENS profile. (One-Way/Push MEP) SMSH is simulated to produce
* uncompressed payloads. The SMSH sends the AS4 message to the RMSH.<br>
* <br>
* Predicate: <br>
* The RMSH returns a non-repudiation receipt and delivers the message to the
* consumer. <br>
* <br>
* k Goal: Do not throw an error if a uncompressed payload gets sent, also
* check if compressed payloads are acceptable aswell.
*
* @throws Exception
* In case of error
*/
@Test
public void testEsens_TA04() throws Exception {
final ICommonsList<WSS4JAttachment> aAttachments = new CommonsArrayList<>();
aAttachments.add(WSS4JAttachment.createOutgoingFileAttachment(Phase4OutgoingAttachment.builder().data(ClassPathResource.getAsFile(AS4TestConstants.ATTACHMENT_SHORTXML_XML)).mimeTypeXML().build(), s_aResMgr));
final AS4MimeMessage aMsg = MimeMessageCreator.generateMimeMessage(m_eSoapVersion, createTestSignedUserMessage(m_eSoapVersion, m_aPayload, aAttachments, s_aResMgr), aAttachments);
final String sResponse = sendMimeMessage(new HttpMimeMessageEntity(aMsg), true, null);
assertTrue(sResponse.contains(AS4TestConstants.RECEIPT_ASSERTCHECK));
assertTrue(sResponse.contains(AS4TestConstants.NON_REPUDIATION_INFORMATION));
}
use of com.helger.phase4.messaging.mime.AS4MimeMessage in project phase4 by phax.
the class AS4eSENSCEFTwoWayFuncTest method testEsens_TA16_PushPush.
/**
* Prerequisite:<br>
* SMSH and RMSH are configured to exchange AS4 messages according to the
* e-SENS profile (Two-Way/Push-and-Push MEP). SMSH sends an AS4 User Message
* to the RMSH.<br>
* <br>
* Predicate: <br>
* The RMSH returns a non-repudiation receipt within a HTTP response with
* status code 2XX.
*
* @throws Exception
* In case of error
*/
@Test
public void testEsens_TA16_PushPush() throws Exception {
final ICommonsList<WSS4JAttachment> aAttachments = new CommonsArrayList<>();
aAttachments.add(WSS4JAttachment.createOutgoingFileAttachment(Phase4OutgoingAttachment.builder().data(ClassPathResource.getAsFile(AS4TestConstants.ATTACHMENT_SHORTXML_XML)).mimeTypeXML().compressionGZIP().build(), s_aResMgr));
final AS4MimeMessage aMsg = MimeMessageCreator.generateMimeMessage(m_eSoapVersion, testSignedUserMessage(m_eSoapVersion, m_aPayload, aAttachments, s_aResMgr), aAttachments);
final String sResponse = sendMimeMessage(new HttpMimeMessageEntity(aMsg), true, null);
assertTrue(sResponse.contains(AS4TestConstants.RECEIPT_ASSERTCHECK));
assertTrue(sResponse.contains(AS4TestConstants.NON_REPUDIATION_INFORMATION));
// Wait for async response to come in
// Otherwise indeterministic errors
ThreadHelper.sleepSeconds(2);
}
use of com.helger.phase4.messaging.mime.AS4MimeMessage in project phase4 by phax.
the class AS4CEFOneWayFuncTest method testAS4_TA17.
/**
* Prerequisite:<br>
* eSENS_TA13.<br>
* The SMSH is simulated to send an AS4 User message with a compressed then
* signed payload to the RMSH.<br>
* <br>
* Predicate: <br>
* The RMSH sends back an AS4 non-repudiation receipt.
*
* @throws Exception
* In case of error
*/
@Test
public void testAS4_TA17() throws Exception {
final ICommonsList<WSS4JAttachment> aAttachments = new CommonsArrayList<>();
aAttachments.add(WSS4JAttachment.createOutgoingFileAttachment(Phase4OutgoingAttachment.builder().data(ClassPathResource.getAsFile(AS4TestConstants.ATTACHMENT_SHORTXML_XML)).mimeTypeXML().compressionGZIP().build(), s_aResMgr));
final Document aDoc = createTestSignedUserMessage(m_eSoapVersion, m_aPayload, aAttachments, s_aResMgr);
final AS4MimeMessage aMsg = MimeMessageCreator.generateMimeMessage(m_eSoapVersion, aDoc, aAttachments);
final String sResponse = sendMimeMessage(new HttpMimeMessageEntity(aMsg), true, null);
assertTrue(sResponse.contains(AS4TestConstants.NON_REPUDIATION_INFORMATION));
}
use of com.helger.phase4.messaging.mime.AS4MimeMessage in project phase4 by phax.
the class MainOldAS4Client method main.
/**
* Starting point for the SAAJ - SOAP Client Testing
*
* @param args
* ignored
*/
public static void main(final String[] args) {
try (final AS4ResourceHelper aResHelper = new AS4ResourceHelper()) {
String sURL = "http://127.0.0.1:8080/as4";
if (false)
sURL = "http://msh.holodeck-b2b.org:8080/msh";
// Deactivate if not sending to local holodeck
if (false)
sURL = "http://localhost:8080/msh/";
final HttpClientSettings aHCS = new HttpClientSettings();
if (sURL.startsWith("https"))
aHCS.setSSLContextTrustAll();
if (false) {
aHCS.setProxyHost(new HttpHost("172.30.9.6", 8080));
aHCS.addNonProxyHostsFromPipeString("localhost|127.0.0.1");
}
final CloseableHttpClient aClient = new HttpClientFactory(aHCS).createHttpClient();
LOGGER.info("Sending to " + sURL);
final HttpPost aPost = new HttpPost(sURL);
final ICommonsList<WSS4JAttachment> aAttachments = new CommonsArrayList<>();
final Node aPayload = DOMReader.readXMLDOM(new ClassPathResource("SOAPBodyPayload.xml"));
final ESoapVersion eSoapVersion = ESoapVersion.SOAP_12;
final IAS4CryptoFactory aCryptoFactory = AS4CryptoFactoryProperties.getDefaultInstance();
if (true) {
// No Mime Message Not signed or encrypted, just SOAP + Payload in SOAP
// -
// Body
// final Document aDoc = TestMessages.testSignedUserMessage
// (ESOAPVersion.SOAP_11, aPayload, aAttachments);
final AS4UserMessage aMsg = MockClientMessages.createUserMessageNotSigned(eSoapVersion, aPayload, aAttachments);
final Document aDoc = aMsg.getAsSoapDocument(aPayload);
aPost.setEntity(new HttpXMLEntity(aDoc, eSoapVersion.getMimeType()));
} else if (false) {
// BodyPayload SIGNED
final Document aDoc = MockClientMessages.createUserMessageSigned(eSoapVersion, aPayload, aAttachments, aResHelper);
aPost.setEntity(new HttpXMLEntity(aDoc, eSoapVersion.getMimeType()));
} else if (false) {
// BodyPayload ENCRYPTED
final AS4UserMessage aMsg = MockClientMessages.createUserMessageNotSigned(eSoapVersion, aPayload, aAttachments);
Document aDoc = aMsg.getAsSoapDocument(aPayload);
aDoc = AS4Encryptor.encryptSoapBodyPayload(aCryptoFactory, eSoapVersion, aDoc, false, AS4CryptParams.createDefault().setAlias("dummy"));
aPost.setEntity(new HttpXMLEntity(aDoc, eSoapVersion.getMimeType()));
} else if (true) {
aAttachments.add(WSS4JAttachment.createOutgoingFileAttachment(Phase4OutgoingAttachment.builder().data(ClassPathResource.getAsFile("attachment/test.xml.gz")).mimeType(CMimeType.APPLICATION_GZIP).build(), aResHelper));
final AS4UserMessage aMsg = MockClientMessages.createUserMessageNotSigned(eSoapVersion, null, aAttachments);
final AS4MimeMessage aMimeMsg = MimeMessageCreator.generateMimeMessage(eSoapVersion, AS4Signer.createSignedMessage(aCryptoFactory, aMsg.getAsSoapDocument(null), eSoapVersion, aMsg.getMessagingID(), aAttachments, aResHelper, false, AS4SigningParams.createDefault()), aAttachments);
// Move all global mime headers to the POST request
MessageHelperMethods.forEachHeaderAndRemoveAfterwards(aMimeMsg, aPost::addHeader, true);
aPost.setEntity(new HttpMimeMessageEntity(aMimeMsg));
} else if (false) {
Document aDoc = MockClientMessages.createUserMessageSigned(eSoapVersion, aPayload, aAttachments, aResHelper);
aDoc = AS4Encryptor.encryptSoapBodyPayload(aCryptoFactory, eSoapVersion, aDoc, false, AS4CryptParams.createDefault().setAlias("dummy"));
aPost.setEntity(new HttpXMLEntity(aDoc, eSoapVersion.getMimeType()));
} else
throw new IllegalStateException("Some test message should be selected :)");
// re-instantiate if you want to see the request that is getting sent
LOGGER.info(EntityUtils.toString(aPost.getEntity()));
final CloseableHttpResponse aHttpResponse = aClient.execute(aPost);
LOGGER.info("GET Response Status:: " + aHttpResponse.getStatusLine().getStatusCode());
// print result
LOGGER.info(EntityUtils.toString(aHttpResponse.getEntity()));
} catch (final Exception e) {
LOGGER.error("Error occurred while sending SOAP Request to Server", e);
}
}
use of com.helger.phase4.messaging.mime.AS4MimeMessage in project phase4 by phax.
the class AS4Encryptor method _encryptMimeMessage.
@Nonnull
private static AS4MimeMessage _encryptMimeMessage(@Nonnull final ESoapVersion eSoapVersion, @Nonnull final Document aDoc, @Nullable final ICommonsList<WSS4JAttachment> aAttachments, @Nonnull final IAS4CryptoFactory aCryptoFactory, final boolean bMustUnderstand, @Nonnull @WillNotClose final AS4ResourceHelper aResHelper, @Nonnull final AS4CryptParams aCryptParams) throws WSSecurityException {
if (LOGGER.isInfoEnabled())
LOGGER.info("Now encrypting AS4 MIME message");
final WSSecHeader aSecHeader = new WSSecHeader(aDoc);
aSecHeader.insertSecurityHeader();
final WSSecEncrypt aBuilder = _createEncrypt(aSecHeader, aCryptParams);
// "cid:Attachments" is a predefined ID
aBuilder.getParts().add(new WSEncryptionPart(MessageHelperMethods.PREFIX_CID + "Attachments", "Content"));
WSS4JAttachmentCallbackHandler aAttachmentCallbackHandler = null;
if (CollectionHelper.isNotEmpty(aAttachments)) {
aAttachmentCallbackHandler = new WSS4JAttachmentCallbackHandler(aAttachments, aResHelper);
aBuilder.setAttachmentCallbackHandler(aAttachmentCallbackHandler);
}
// Ensure mustUnderstand value
final Attr aMustUnderstand = aSecHeader.getSecurityHeaderElement().getAttributeNodeNS(eSoapVersion.getNamespaceURI(), "mustUnderstand");
if (aMustUnderstand != null)
aMustUnderstand.setValue(eSoapVersion.getMustUnderstandValue(bMustUnderstand));
// Generate a session key
final KeyGenerator aKeyGen = KeyUtils.getKeyGenerator(WSS4JConstants.AES_128);
final SecretKey aSymmetricKey = aKeyGen.generateKey();
// Main sign and/or encrypt
final Document aEncryptedDoc = aBuilder.build(aCryptoFactory.getCrypto(), aSymmetricKey);
// The attachment callback handler contains the encrypted attachments
// Important: read the attachment stream only once!
ICommonsList<WSS4JAttachment> aEncryptedAttachments = null;
if (aAttachmentCallbackHandler != null) {
aEncryptedAttachments = aAttachmentCallbackHandler.getAllResponseAttachments();
// MIME Type and CTE must be set for encrypted attachments!
for (final WSS4JAttachment aAttachment : aEncryptedAttachments) {
aAttachment.overwriteMimeType(CMimeType.APPLICATION_OCTET_STREAM.getAsString());
aAttachment.setContentTransferEncoding(EContentTransferEncoding.BINARY);
}
}
// Use the encrypted attachments!
try {
return MimeMessageCreator.generateMimeMessage(eSoapVersion, aEncryptedDoc, aEncryptedAttachments);
} catch (final MessagingException ex) {
throw new WSSecurityException(ErrorCode.FAILURE, ex, "Failed to generate MIME message");
}
}
Aggregations