diff --git a/phase4-euctp-client/src/main/java/com/helger/phase4/euctp/EuCtpPullRequestBuilder.java b/phase4-euctp-client/src/main/java/com/helger/phase4/euctp/AbstractEuCtpPullRequestBuilder.java similarity index 74% rename from phase4-euctp-client/src/main/java/com/helger/phase4/euctp/EuCtpPullRequestBuilder.java rename to phase4-euctp-client/src/main/java/com/helger/phase4/euctp/AbstractEuCtpPullRequestBuilder.java index 2cb621e4a..53ee34d4a 100644 --- a/phase4-euctp-client/src/main/java/com/helger/phase4/euctp/EuCtpPullRequestBuilder.java +++ b/phase4-euctp-client/src/main/java/com/helger/phase4/euctp/AbstractEuCtpPullRequestBuilder.java @@ -27,9 +27,19 @@ import com.helger.phase4.profile.euctp.AS4EuCtpProfileRegistarSPI; import com.helger.phase4.sender.AbstractAS4PullRequestBuilder; -public class EuCtpPullRequestBuilder extends AbstractAS4PullRequestBuilder +/** + * Abstract EuCTP PullRequest builder class with sanity methods + * + * @param + * The implementation type + * @author Ulrik Stehling + * @author Philip Helger + */ +public abstract class AbstractEuCtpPullRequestBuilder > + extends + AbstractAS4PullRequestBuilder { - public EuCtpPullRequestBuilder () + public AbstractEuCtpPullRequestBuilder () { try { @@ -43,9 +53,9 @@ public EuCtpPullRequestBuilder () // Other signing parameters are located in the PMode security part signingParams ().setKeyIdentifierType (AbstractEuCtpUserMessageBuilder.DEFAULT_KEY_IDENTIFIER_TYPE_SIGN); signingParams ().setAlgorithmC14N (ECryptoAlgorithmC14N.C14N_EXCL_OMIT_COMMENTS); - // Use the BST value type "#X509PKIPathv1" signingParams ().setUseSingleCertificate (false); + } catch (final Exception ex) { @@ -54,8 +64,8 @@ public EuCtpPullRequestBuilder () } @Nonnull - public EuCtpPullRequestBuilder httpClientFactory (@Nullable final KeyStore aKeyStore, - @Nullable final char [] aKeyPassword) throws GeneralSecurityException + public IMPLTYPE httpClientFactory (@Nullable final KeyStore aKeyStore, @Nullable final char [] aKeyPassword) + throws GeneralSecurityException { return httpClientFactory (new Phase4EuCtpHttpClientSettings (aKeyStore, aKeyPassword)); } diff --git a/phase4-euctp-client/src/main/java/com/helger/phase4/euctp/EuCtpUserMessageBuilder.java b/phase4-euctp-client/src/main/java/com/helger/phase4/euctp/EuCtpUserMessageBuilder.java deleted file mode 100644 index f973e94b0..000000000 --- a/phase4-euctp-client/src/main/java/com/helger/phase4/euctp/EuCtpUserMessageBuilder.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2015-2024 Philip Helger (www.helger.com) - * philip[at]helger[dot]com - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.helger.phase4.euctp; - -/** - * Instancable version of {@link AbstractEuCtpUserMessageBuilder}. - * - * @author Philip Helger - * @since 3.0.0 - */ -public class EuCtpUserMessageBuilder extends AbstractEuCtpUserMessageBuilder -{ - public EuCtpUserMessageBuilder () - {} -} diff --git a/phase4-euctp-client/src/main/java/com/helger/phase4/euctp/Phase4EuCtpSender.java b/phase4-euctp-client/src/main/java/com/helger/phase4/euctp/Phase4EuCtpSender.java index a205c648b..eda51b03d 100644 --- a/phase4-euctp-client/src/main/java/com/helger/phase4/euctp/Phase4EuCtpSender.java +++ b/phase4-euctp-client/src/main/java/com/helger/phase4/euctp/Phase4EuCtpSender.java @@ -33,25 +33,50 @@ private Phase4EuCtpSender () {} /** - * @return Create a new Builder for AS4 messages if the payload is present. - * Never null. + * @return Create a new Builder for AS4 User Messages if the payload is + * present. Never null. */ @Nonnull - public static EuCtpUserMessageBuilder builder () + public static EuCtpUserMessageBuilder builderUserMessage () { - return new EuCtpUserMessageBuilder(); + return new EuCtpUserMessageBuilder (); } /** - * The builder class for sending AS4 messages using EuCTP profile specifics. - * Use {@link #sendMessage()} or {@link #sendMessageAndCheckForReceipt()} to - * trigger the main transmission. + * @return Create a new Builder for AS4 Pull Requests. Never + * null. + * @since 3.0.0 + */ + @Nonnull + public static EuCtpPullRequestBuilder builderPullRequest () + { + return new EuCtpPullRequestBuilder (); + } + + /** + * The builder class for sending AS4 User Messages using EuCTP profile + * specifics. Use {@link #sendMessage()} or + * {@link #sendMessageAndCheckForReceipt()} to trigger the main transmission. * * @author Ulrik Stehling */ public static class EuCtpUserMessageBuilder extends AbstractEuCtpUserMessageBuilder { - public EuCtpUserMessageBuilder() + public EuCtpUserMessageBuilder () + { + super (); + } + } + + /** + * The builder class for sending AS4 Pull Requests using EuCTP profile + * specifics. Use {@link #sendMessage()} to trigger the main transmission. + * + * @author Philip Helger + */ + public static class EuCtpPullRequestBuilder extends AbstractEuCtpPullRequestBuilder + { + public EuCtpPullRequestBuilder () { super (); } diff --git a/phase4-euctp-client/src/test/java/com/helger/phase4/euctp/MainPhase4EuCtpSenderExample.java b/phase4-euctp-client/src/test/java/com/helger/phase4/euctp/MainPhase4EuCtpSenderExample.java index 83cd945be..e67251f60 100644 --- a/phase4-euctp-client/src/test/java/com/helger/phase4/euctp/MainPhase4EuCtpSenderExample.java +++ b/phase4-euctp-client/src/test/java/com/helger/phase4/euctp/MainPhase4EuCtpSenderExample.java @@ -138,30 +138,32 @@ private static void _sendPullRequest (final Phase4EuCtpHttpClientSettings aHttpC } final List attachmentsAsString = new ArrayList <> (); - final ESuccess eSuccess = new EuCtpPullRequestBuilder ().httpClientFactory (aHttpClientSettings) - .endpointURL ("https://conformance.customs.ec.europa.eu:8445/domibus/services/msh") - .mpc (sMPC) - .userMsgConsumer ( (aUserMsg, aMessageMetadata, aState) -> { - aUserMessageHolder.set (aUserMsg); - - if (aState.hasDecryptedAttachments ()) - { - // Remember all - // attachments - // here - for (final WSS4JAttachment attachment : aState.getDecryptedAttachments ()) - { - final String parsedFile = StreamHelper.getAllBytesAsString (attachment.getSourceStream (), - StandardCharsets.UTF_8); - attachmentsAsString.add (parsedFile); - } - } - }) - .signalMsgConsumer ( (aSignalMsg, aMMD, aState) -> { - aSignalMessageHolder.set (aSignalMsg); - }) - .cryptoFactory (cryptoFactoryProperties) - .sendMessage (); + final ESuccess eSuccess = Phase4EuCtpSender.builderPullRequest () + .httpClientFactory (aHttpClientSettings) + .endpointURL ("https://conformance.customs.ec.europa.eu:8445/domibus/services/msh") + .mpc (sMPC) + .userMsgConsumer ( (aUserMsg, aMessageMetadata, aState) -> { + aUserMessageHolder.set (aUserMsg); + + if (aState.hasDecryptedAttachments ()) + { + /* + * Remember all attachments + * here + */ + for (final WSS4JAttachment attachment : aState.getDecryptedAttachments ()) + { + final String parsedFile = StreamHelper.getAllBytesAsString (attachment.getSourceStream (), + StandardCharsets.UTF_8); + attachmentsAsString.add (parsedFile); + } + } + }) + .signalMsgConsumer ( (aSignalMsg, aMMD, aState) -> { + aSignalMessageHolder.set (aSignalMsg); + }) + .cryptoFactory (cryptoFactoryProperties) + .sendMessage (); // LOGGER.info ("euctp pull request result: " + eSuccess); LOGGER.info ("Pulled User Message: " + aUserMessageHolder.get ()); @@ -175,7 +177,7 @@ private static void _sendConnectionTest (final Phase4EuCtpHttpClientSettings aHt final AS4CryptoFactoryProperties cryptoFactoryProperties) { EAS4UserMessageSendResult eResult; - eResult = Phase4EuCtpSender.builder () + eResult = Phase4EuCtpSender.builderUserMessage () .httpClientFactory (aHttpClientSettings) .fromPartyID (fromPartyID) .fromPartyIDType (EuCtpPMode.DEFAULT_PARTY_TYPE_ID) @@ -204,7 +206,7 @@ private static void _sendENSFilling (final Phase4EuCtpHttpClientSettings aHttpCl final Wrapper aSignalMsgHolder = new Wrapper <> (); EAS4UserMessageSendResult eResult; - eResult = Phase4EuCtpSender.builder () + eResult = Phase4EuCtpSender.builderUserMessage () .httpClientFactory (aHttpClientSettings) .fromPartyID (fromPartyID) .fromPartyIDType (EuCtpPMode.DEFAULT_PARTY_TYPE_ID)