Class AbstractAS4MessageBuilder<IMPLTYPE extends AbstractAS4MessageBuilder<IMPLTYPE>>

java.lang.Object
com.helger.phase4.sender.AbstractAS4MessageBuilder<IMPLTYPE>
Type Parameters:
IMPLTYPE - The implementation type
All Implemented Interfaces:
com.helger.base.trait.IGenericImplTrait<IMPLTYPE>
Direct Known Subclasses:
AbstractAS4PullRequestBuilder, AbstractAS4UserMessageBuilder

@NotThreadSafe public abstract class AbstractAS4MessageBuilder<IMPLTYPE extends AbstractAS4MessageBuilder<IMPLTYPE>> extends Object implements com.helger.base.trait.IGenericImplTrait<IMPLTYPE>
Abstract builder base class with the requirements for all message types.
Since:
0.10.0
Author:
Philip Helger
  • Field Details

  • Constructor Details

  • Method Details

    • customHttpPoster

      public final @Nullable IHttpPoster customHttpPoster()
      Returns:
      The currently set IHttpPoster. May be null.
      Since:
      1.3.10
    • customHttpPoster

      public final @NonNull IMPLTYPE customHttpPoster(@Nullable IHttpPoster aCustomHttpPoster)
      Set the HTTP poster to be used. This is a very low level API and should only be used if you know what you are doing! It allows you to overwrite how the message is sent over the wire.
      Note: if this method is used with a non-null parameter, httpClientFactory() becomes useless
      Parameters:
      aCustomHttpPoster - The new HTTP poster to be used. May be null which means "use the default" poster.
      Returns:
      this for chaining
      Since:
      1.3.10
    • httpClientFactory

      public final @Nullable com.helger.httpclient.HttpClientFactory httpClientFactory()
      Returns:
      The currently set HttpClientFactory. May be null.
    • httpClientFactory

      public final @NonNull IMPLTYPE httpClientFactory(@Nullable com.helger.httpclient.HttpClientSettings aHttpClientSettings)
      Set the HTTP client factory to be used. If the passed settings are non-null, a new HttpClientFactory is created with them, else a null-HttpClientFactory is set.
      Parameters:
      aHttpClientSettings - The new HTTP client settings to be used. May be null.
      Returns:
      this for chaining
    • httpClientFactory

      public final @NonNull IMPLTYPE httpClientFactory(@Nullable com.helger.httpclient.HttpClientFactory aHttpClientFactory)
      Set the HTTP client factory to be used. By default a default instance of HttpClientFactory is used (set in the constructor) and there is no need to invoke this method.
      Parameters:
      aHttpClientFactory - The new HTTP client factory to be used. May be null.
      Returns:
      this for chaining
    • cryptoFactorySign

      public final @Nullable IAS4CryptoFactory cryptoFactorySign()
      Returns:
      The currently set IAS4CryptoFactory for signing. May be null.
      Since:
      2.2.0
      See Also:
    • cryptoFactorySign

      public final @NonNull IMPLTYPE cryptoFactorySign(@Nullable IAS4CryptoFactory aCryptoFactorySign)
      Set the crypto factory to be used for signing. The default crypto factory is set in the constructor to AS4CryptoFactoryConfiguration.getDefaultInstance().
      Parameters:
      aCryptoFactorySign - The crypto factory to be used. May be null.
      Returns:
      this for chaining
      Since:
      2.2.0
    • cryptoFactoryCrypt

      public final @Nullable IAS4CryptoFactory cryptoFactoryCrypt()
      Returns:
      The currently set IAS4CryptoFactory for crypting. May be null.
      Since:
      2.2.0
      See Also:
    • cryptoFactoryCrypt

      public final @NonNull IMPLTYPE cryptoFactoryCrypt(@Nullable IAS4CryptoFactory aCryptoFactoryCrypt)
      Set the crypto factory to be used for crypting. The default crypto factory is set in the constructor to AS4CryptoFactoryConfiguration.getDefaultInstanceOrNull().
      Parameters:
      aCryptoFactoryCrypt - The crypto factory to be used. May be null.
      Returns:
      this for chaining
      Since:
      2.2.0
    • cryptoFactory

      public final @NonNull IMPLTYPE cryptoFactory(@Nullable IAS4CryptoFactory aCryptoFactory)
      Set the crypto factory to be used for signing and crypting. The default crypto factory is set in the constructor to AS4CryptoFactoryConfiguration.getDefaultInstanceOrNull().
      Parameters:
      aCryptoFactory - The crypto factory to be used. May be null.
      Returns:
      this for chaining
      See Also:
    • signingParams

      @ReturnsMutableObject public final @NonNull AS4SigningParams signingParams()
      Get the mutable AS4 signing parameters.
      Returns:
      The AS4 signing parameters to use for this message. Never null.
      Since:
      2.1.4
      See Also:
    • withSigningParams

      @ReturnsMutableObject public final @NonNull IMPLTYPE withSigningParams(@NonNull Consumer<? super AS4SigningParams> aConsumer)
      Modify the AS4 signing parameters for this message. This is a version that maintains chainability of the API.
      Parameters:
      aConsumer - Consumer for the AS4 signing parameters to use for this message. Must not be null.
      Returns:
      this for chaining
      Since:
      2.1.4
      See Also:
    • cryptParams

      @ReturnsMutableObject public final @NonNull AS4CryptParams cryptParams()
      Get the mutable AS4 crypt parameters.
      Returns:
      The AS4 crypt parameters to use for this message. Never null.
      Since:
      2.1.4
      See Also:
    • withCryptParams

      @ReturnsMutableObject public final @NonNull IMPLTYPE withCryptParams(@NonNull Consumer<? super AS4CryptParams> aConsumer)
      Modify the AS4 crypt parameters for this message. This is a version that maintains chainability of the API.
      Parameters:
      aConsumer - Consumer for the AS4 crypt parameters to use for this message. Must not be null.
      Returns:
      this for chaining
      Since:
      2.1.4
      See Also:
    • messageID

      public final @Nullable String messageID()
      Returns:
      The specific AS4 message ID to use. May be null if a random one should be generated.
      Since:
      3.0.0
    • messageID

      public final @NonNull IMPLTYPE messageID(@Nullable String sMessageID)
      Set the optional AS4 message ID. If this field is not set, a random message ID is created.
      Parameters:
      sMessageID - The optional AS4 message ID to be used. May be null.
      Returns:
      this for chaining
    • refToMessageID

      public final @Nullable String refToMessageID()
      Returns:
      The optional AS4 reference to a previous message ID. May be null.
      Since:
      3.0.0
    • refToMessageID

      public final @NonNull IMPLTYPE refToMessageID(@Nullable String sRefToMessageID)
      Set the optional AS4 reference to a previous message ID. If this field is not set, it will not be emitted in the message.
      Parameters:
      sRefToMessageID - The optional AS4 reference to a previous message ID to be used. May be null.
      Returns:
      this for chaining
      Since:
      1.3.2
    • sendingDateTime

      public final @Nullable OffsetDateTime sendingDateTime()
      Returns:
      The optional sending date time. May be null.
      Since:
      3.0.0
    • sendingDateTime

      public final @NonNull IMPLTYPE sendingDateTime(@Nullable OffsetDateTime aSendingDateTime)
      Set the optional sending date time. If no time is specified, the current date time will be used.
      Parameters:
      aSendingDateTime - The sending date time to set. May be null.
      Returns:
      this for chaining
      Since:
      0.12.0
    • soapVersion

      public final @Nullable ESoapVersion soapVersion()
      Returns:
      The SOAP version to be used. May be null.
    • soapVersion

      public final @NonNull IMPLTYPE soapVersion(@Nullable ESoapVersion eSoapVersion)
      Set the SOAP version to be used. The default is SOAP 1.2 and is set in the constructor. Usually you don't need to call that method.
      Parameters:
      eSoapVersion - The SOAP version to be used. May be null.
      Returns:
      this for chaining
    • httpRetrySettings

      public final @Nullable HttpRetrySettings httpRetrySettings()
      Returns:
      The HTTP retry settings to be used. May be null.
      Since:
      3.0.0
    • httpRetrySettings

      public final @NonNull IMPLTYPE httpRetrySettings(@Nullable HttpRetrySettings a)
      Set the HTTP retry settings to be used. If none are set, the default values are used.
      Parameters:
      a - The HTTP retry settings to be used. May be null.
      Returns:
      this for chaining
    • locale

      public final @Nullable Locale locale()
      Returns:
      The locale to be used. May be null.
      Since:
      3.0.0
    • locale

      public final @NonNull IMPLTYPE locale(@Nullable Locale a)
      Set the locale to use. The main purpose is to use the correct language for processing error message in response messages. This field must be set. The default value is DEFAULT_LOCALE.
      Parameters:
      a - The locale to use. May be null.
      Returns:
      this for chaining
    • as4ProfileID

      public final @Nullable String as4ProfileID()
      Returns:
      The selected AS4 profile to use. May be null.
      Since:
      2.8.2
    • as4ProfileID

      public final @NonNull IMPLTYPE as4ProfileID(@Nullable String sAS4ProfileID)
      Set the AS4 profile to be used. Must be provided for the builder to work.
      Parameters:
      sAS4ProfileID - The AS4 profile ID to be used.
      Returns:
      this for chaining
      Since:
      2.8.2
    • pmodeResolver

      public final @Nullable IAS4PModeResolver pmodeResolver()
      Returns:
      The currently set IAS4PModeResolver. May be null.
    • pmodeResolver

      public final @NonNull IMPLTYPE pmodeResolver(@Nullable IAS4PModeResolver aPModeResolver)
      Set the PMode resolver to be used. This is only used to determine the PMode of an eventually received synchronous response message.
      Parameters:
      aPModeResolver - The PMode resolver to be used. May be null.
      Returns:
      this for chaining
    • incomingAttachmentFactory

      public final @NonNull IAS4IncomingAttachmentFactory incomingAttachmentFactory()
      Returns:
      The currently set IAS4IncomingAttachmentFactory. Never null.
    • incomingAttachmentFactory

      public final @NonNull IMPLTYPE incomingAttachmentFactory(@NonNull IAS4IncomingAttachmentFactory aIAF)
      Set the incoming attachment factory to be used. This is only used for an eventually received synchronous response message.
      Parameters:
      aIAF - The incoming attachment factory to be used. May not be null.
      Returns:
      this for chaining
    • incomingProfileSelector

      public final @NonNull IAS4IncomingProfileSelector incomingProfileSelector()
      Returns:
      The profile selector for incoming AS4 messages. Never null.
      Since:
      0.13.0
    • incomingProfileSelector

      public final @NonNull IMPLTYPE incomingProfileSelector(@NonNull IAS4IncomingProfileSelector aIncomingProfileSelector)
      Set the selector for the AS4 profile of incoming messages. This is only used for an eventually received synchronous response message.
      Parameters:
      aIncomingProfileSelector - The profile selector to use. May not be null.
      Returns:
      this for chaining
      Since:
      0.13.0
    • senderInterrupt

      public final @Nullable IAS4SenderInterrupt senderInterrupt()
      Returns:
      The currently set IAS4SenderInterrupt. May be null.
      Since:
      0.13.0
    • senderInterrupt

      public final @NonNull IMPLTYPE senderInterrupt(@Nullable IAS4SenderInterrupt aSenderInterrupt)
      Set the sender interrupt to be used. This is only needed in very specific cases, is null by default and should be handled with care.
      Parameters:
      aSenderInterrupt - The sender interrupt to be used. May be null.
      Returns:
      this for chaining
      Since:
      0.13.0
    • sendingDateTimeConsumer

      public final @Nullable IAS4SendingDateTimeConsumer sendingDateTimeConsumer()
      Returns:
      The currently set IAS4SendingDateTimeConsumer. May be null.
      Since:
      2.2.2
    • sendingDateTimeConsumer

      public final @NonNull IMPLTYPE sendingDateTimeConsumer(@Nullable IAS4SendingDateTimeConsumer aSendingDTConsumer)
      Set the sending date time consumer to be used. This may e.g. be needed to get the effective sending date time for Peppol reporting.
      Parameters:
      aSendingDTConsumer - The sender date time consumer to be used. May be null.
      Returns:
      this for chaining
      Since:
      2.2.2
    • buildMessageCallback

      public final @Nullable IAS4ClientBuildMessageCallback buildMessageCallback()
      Returns:
      The internal message callback. Usually this method is NOT needed. Use only when you know what you are doing.
      Since:
      3.0.0
    • buildMessageCallback

      public final @NonNull IMPLTYPE buildMessageCallback(@Nullable IAS4ClientBuildMessageCallback aBuildMessageCallback)
      Set a internal message callback. Usually this method is NOT needed. Use only when you know what you are doing.
      Parameters:
      aBuildMessageCallback - An internal to be used for the created message. May be null.
      Returns:
      this for chaining
    • outgoingDumper

      public final @Nullable IAS4OutgoingDumper outgoingDumper()
      Returns:
      The specific outgoing dumper of this builder. May be null.
      Since:
      3.0.0
    • outgoingDumper

      public final @NonNull IMPLTYPE outgoingDumper(@Nullable IAS4OutgoingDumper aOutgoingDumper)
      Set a specific outgoing dumper for this builder.
      Parameters:
      aOutgoingDumper - An outgoing dumper to be used. Maybe null. If null the global outgoing dumper is used.
      Returns:
      this for chaining
    • incomingDumper

      public final @Nullable IAS4IncomingDumper incomingDumper()
      Returns:
      The specific incoming dumper of this builder. May be null.
      Since:
      3.0.0
    • incomingDumper

      public final @NonNull IMPLTYPE incomingDumper(@Nullable IAS4IncomingDumper aIncomingDumper)
      Set a specific incoming dumper for this builder.
      Parameters:
      aIncomingDumper - An incoming dumper to be used. Maybe null. If null the global incoming dumper is used.
      Returns:
      this for chaining
    • decryptRequestDataModifier

      public final @Nullable IAS4DecryptParameterModifier decryptRequestDataModifier()
      Returns:
      The decrypting customizing callback. May be null.
      Since:
      3.0.0
    • decryptRequestDataModifier

      public final @NonNull IMPLTYPE decryptRequestDataModifier(@Nullable IAS4DecryptParameterModifier aDecryptParameterModifier)
      Set an optional customizing callback that is invoked when decrypting a message, to be able to modify the decryption configuration. This is an edge case e.g. to allow RSA 1.5 algorithm names.
      Parameters:
      aDecryptParameterModifier - The modifier callback. May be null.
      Returns:
      this for chaining
      Since:
      2.2.0
    • retryCallback

      public final @Nullable IAS4RetryCallback retryCallback()
      Returns:
      The HTTP retry callback to be invoked. May be null.
      Since:
      3.0.0
    • retryCallback

      public final @NonNull IMPLTYPE retryCallback(@Nullable IAS4RetryCallback aRetryCallback)
      Set an optional handler that is notified if an http sending will be retried. This method is optional and must not be called prior to sending.
      Parameters:
      aRetryCallback - The optional retry callback. May be null.
      Returns:
      this for chaining
    • rawResponseConsumer

      public final @Nullable IAS4RawResponseConsumer rawResponseConsumer()
      Returns:
      The optional handler for the received raw response, very similar to the dumper. May be null.
      Since:
      3.0.0
    • rawResponseConsumer

      public final @NonNull IMPLTYPE rawResponseConsumer(@Nullable IAS4RawResponseConsumer aRaweResponseConsumer)
      Set an optional handler for the synchronous result message received from the other side. This method is optional and must not be called prior to sending. This method is very similar to using an incomingDumper(IAS4IncomingDumper) so you usually only need one or the other.
      Parameters:
      aRaweResponseConsumer - The optional response consumer. May be null.
      Returns:
      this for chaining
    • finishFields

      @OverrideOnDemand @OverridingMethodsMustInvokeSuper protected com.helger.base.state.ESuccess finishFields(@NonNull AS4ResourceHelper aResHelper) throws Phase4Exception
      Internal method that is invoked before the required field check is performed. Override to set additional dynamically created fields if necessary.
      Don't add message properties in here, because if the required fields check fails than this method would be called again.
      This is called before isEveryRequiredFieldSet()
      Parameters:
      aResHelper - The AS4 resource helper to use. Never null.
      Returns:
      ESuccess - never null. Returning failure here stops sending the message.
      Throws:
      Phase4Exception - if something goes wrong
    • isEveryRequiredFieldSet

      @OverridingMethodsMustInvokeSuper public boolean isEveryRequiredFieldSet()
      Check if all mandatory fields are set. This method is called after finishFields(AS4ResourceHelper) and before customizeBeforeSending()
      Returns:
      true if all mandatory fields are set, and sending can continue.
    • customizeBeforeSending

      @OverrideOnDemand protected void customizeBeforeSending() throws Phase4Exception
      Internal method that is invoked after the required fields are checked but before sending takes place. This is e.g. the perfect place to add custom message properties. This method is called after isEveryRequiredFieldSet() and before mainSendMessage().
      Throws:
      Phase4Exception - if something goes wrong
    • mainSendMessage

      protected abstract void mainSendMessage() throws Phase4Exception
      Synchronously send the AS4 message. This method is called after customizeBeforeSending(). This method may only be called by sendMessage().
      Throws:
      Phase4Exception - In case of any error
    • afterSuccessfulSending

      @OverrideOnDemand protected void afterSuccessfulSending()
      Internal method that is invoked after successful sending took place. This can e.g. be used to fulfill reporting requirements etc. This method must not throw an exception. This method is called after mainSendMessage().
      Since:
      2.2.2
    • sendMessage

      public final @NonNull com.helger.base.state.ESuccess sendMessage() throws Phase4Exception
      Synchronously send the AS4 message. First the internal "finishFields" method is called, to ensure all dynamic fields are filled - on failure this methods exits. Afterwards isEveryRequiredFieldSet() is called to check that all mandatory elements are set - on failure this methods exits. Afterwards "customizeBeforeSending" is called to make final adjustments to the message. As the very last step, the customizable sender interrupt is invoked which may prevent the main message sending. As the last step "mainSendMessage" is invoked and "SUCCESS" is returned.
      Note: since 0.13.0 this common implementation is in place.
      Returns:
      ESuccess.FAILURE if not all mandatory parameters are set or if sending failed, ESuccess.SUCCESS upon success. Never null. This result code does not reflect the semantics of a semantically correct message exchange or not. It just states, if the message was sent or nor. The rest needs to be determined separately.
      Throws:
      Phase4Exception - In case of any error
      See Also: