Package com.helger.phase4.sender
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.commons.traits.IGenericImplTrait<IMPLTYPE>
- Direct Known Subclasses:
AbstractAS4PullRequestBuilder,AbstractAS4UserMessageBuilder
@NotThreadSafe
public abstract class AbstractAS4MessageBuilder<IMPLTYPE extends AbstractAS4MessageBuilder<IMPLTYPE>>
extends Object
implements com.helger.commons.traits.IGenericImplTrait<IMPLTYPE>
Abstract builder base class with the requirements for all message types.
- Since:
- 0.10.0
- Author:
- Philip Helger
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Localeprotected IAS4ClientBuildMessageCallbackprotected IAS4CryptoFactoryprotected IAS4CryptoFactoryprotected final AS4CryptParamsprotected IHttpPosterprotected IAS4DecryptParameterModifierprotected com.helger.httpclient.HttpClientFactoryprotected HttpRetrySettingsprotected IAS4IncomingDumperprotected Localeprotected IAS4OutgoingDumperprotected IAS4RawResponseConsumerprotected IAS4RetryCallbackprotected OffsetDateTimeprotected IAS4SendingDateTimeConsumerprotected final AS4SigningParamsprotected ESoapVersionprotected Stringprotected String -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedCreate a new builder, with the following fields already set:
httpClientFactory(HttpClientFactory)
cryptoFactory(IAS4CryptoFactory)
soapVersion(ESoapVersion)pmodeResolver(IPModeResolver)
incomingAttachmentFactory(IAS4IncomingAttachmentFactory)
incomingProfileSelector(IAS4IncomingProfileSelector) -
Method Summary
Modifier and TypeMethodDescriptionprotected voidInternal method that is invoked after successful sending took place.final IMPLTYPEbuildMessageCallback(IAS4ClientBuildMessageCallback aBuildMessageCallback) Set a internal message callback.final IAS4CryptoFactoryDeprecated, for removal: This API element is subject to removal in a future version.final IMPLTYPEcryptoFactory(IAS4CryptoFactory aCryptoFactory) Set the crypto factory to be used for signing and crypting.final IAS4CryptoFactoryfinal IMPLTYPEcryptoFactoryCrypt(IAS4CryptoFactory aCryptoFactoryCrypt) Set the crypto factory to be used for crypting.final IAS4CryptoFactoryfinal IMPLTYPEcryptoFactorySign(IAS4CryptoFactory aCryptoFactorySign) Set the crypto factory to be used for signing.final AS4CryptParamsGet the mutable AS4 crypt parameters.final IHttpPosterfinal IMPLTYPEcustomHttpPoster(IHttpPoster aCustomHttpPoster) Set the HTTP poster to be used.protected voidInternal method that is invoked after the required fields are checked but before sending takes place.final IMPLTYPEdecryptRequestDataModifier(IAS4DecryptParameterModifier aDecryptParameterModifier) Set an optional customizing callback that is invoked when decrypting a message, to be able to modify the decryption configuration.protected com.helger.commons.state.ESuccessInternal method that is invoked before the required field check is performed.final com.helger.httpclient.HttpClientFactoryfinal IMPLTYPEhttpClientFactory(com.helger.httpclient.HttpClientFactory aHttpClientFactory) Set the HTTP client factory to be used.final IMPLTYPEhttpClientFactory(com.helger.httpclient.HttpClientSettings aHttpClientSettings) Set the HTTP client factory to be used.final IMPLTYPESet the HTTP retry settings to be used.final IMPLTYPESet the incoming attachment factory to be used.final IMPLTYPEincomingDumper(IAS4IncomingDumper aIncomingDumper) Set a specific incoming dumper for this builder.final IMPLTYPEincomingProfileSelector(IAS4IncomingProfileSelector aIncomingProfileSelector) Set the selector for the AS4 profile of incoming messages.booleanfinal IMPLTYPESet the locale to use.protected abstract voidSynchronously send the AS4 message.final IMPLTYPESet the optional AS4 message ID.final IMPLTYPEoutgoingDumper(IAS4OutgoingDumper aOutgoingDumper) Set a specific outgoing dumper for this builder.final IPModeResolverfinal IMPLTYPEpmodeResolver(IPModeResolver aPModeResolver) Set the PMode resolver to be used.final IMPLTYPErawResponseConsumer(IAS4RawResponseConsumer aResponseConsumer) Set an optional handler for the synchronous result message received from the other side.final IMPLTYPErefToMessageID(String sRefToMessageID) Set the optional AS4 reference to a previous message ID.final IMPLTYPEretryCallback(IAS4RetryCallback aRetryCallback) Set an optional handler that is notified if an http sending will be retried.final IAS4SenderInterruptfinal IMPLTYPEsenderInterrupt(IAS4SenderInterrupt aSenderInterrupt) Set the sender interrupt to be used.final IMPLTYPEsendingDateTime(OffsetDateTime aSendingDateTime) Set the optional sending date time.final IMPLTYPEsendingDateTimeConsumer(IAS4SendingDateTimeConsumer aSendingDTConsumer) Set the sending date time consumer to be used.final com.helger.commons.state.ESuccessSynchronously send the AS4 message.final AS4SigningParamsGet the mutable AS4 signing parameters.final ESoapVersionfinal IMPLTYPEsoapVersion(ESoapVersion eSoapVersion) Set the SOAP version to be used.final IMPLTYPEwithCryptParams(Consumer<? super AS4CryptParams> aConsumer) Modify the AS4 crypt parameters for this message.final IMPLTYPEwithSigningParams(Consumer<? super AS4SigningParams> aConsumer) Modify the AS4 signing parameters for this message.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface com.helger.commons.traits.IGenericImplTrait
thisAsT
-
Field Details
-
DEFAULT_LOCALE
-
m_aCustomHttpPoster
-
m_aHttpClientFactory
protected com.helger.httpclient.HttpClientFactory m_aHttpClientFactory -
m_aCryptoFactorySign
-
m_aCryptoFactoryCrypt
-
m_aSigningParams
-
m_aCryptParams
-
m_sMessageID
-
m_sRefToMessageID
-
m_aSendingDateTime
-
m_eSoapVersion
-
m_aHttpRetrySettings
-
m_aLocale
-
m_aSendingDTConsumer
-
m_aBuildMessageCallback
-
m_aOutgoingDumper
-
m_aIncomingDumper
-
m_aDecryptParameterModifier
-
m_aRetryCallback
-
m_aResponseConsumer
-
-
Constructor Details
-
AbstractAS4MessageBuilder
protected AbstractAS4MessageBuilder()Create a new builder, with the following fields already set:
httpClientFactory(HttpClientFactory)
cryptoFactory(IAS4CryptoFactory)
soapVersion(ESoapVersion)pmodeResolver(IPModeResolver)
incomingAttachmentFactory(IAS4IncomingAttachmentFactory)
incomingProfileSelector(IAS4IncomingProfileSelector)
-
-
Method Details
-
customHttpPoster
- Returns:
- The currently set
IHttpPoster. May benull. - Since:
- 1.3.10
-
customHttpPoster
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-nullparameter,httpClientFactory()becomes useless- Parameters:
aCustomHttpPoster- The new HTTP poster to be used. May benullwhich means "use the default" poster.- Returns:
- this for chaining
- Since:
- 1.3.10
-
httpClientFactory
- Returns:
- The currently set
HttpClientFactory. May benull.
-
httpClientFactory
@Nonnull public final IMPLTYPE httpClientFactory(@Nullable com.helger.httpclient.HttpClientSettings aHttpClientSettings) Set the HTTP client factory to be used. If the passed settings are non-null, a newHttpClientFactoryis created with them, else anull-HttpClientFactoryis set.- Parameters:
aHttpClientSettings- The new HTTP client settings to be used. May benull.- Returns:
- this for chaining
-
httpClientFactory
@Nonnull public final IMPLTYPE httpClientFactory(@Nullable com.helger.httpclient.HttpClientFactory aHttpClientFactory) Set the HTTP client factory to be used. By default a default instance ofHttpClientFactoryis 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 benull.- Returns:
- this for chaining
-
cryptoFactory
@Nullable @Deprecated(forRemoval=true, since="2.2.0") public final IAS4CryptoFactory cryptoFactory()Deprecated, for removal: This API element is subject to removal in a future version.Due to the fact, that the crypto factory was split for signing and crypting, this API is no longer feasible. It returns the crypto factory used for signing.- Returns:
- The currently set
IAS4CryptoFactory. May benull.
-
cryptoFactorySign
- Returns:
- The currently set
IAS4CryptoFactoryfor signing. May benull. - Since:
- 2.2.0
- See Also:
-
cryptoFactoryCrypt
- Returns:
- The currently set
IAS4CryptoFactoryfor crypting. May benull. - Since:
- 2.2.0
- See Also:
-
cryptoFactory
Set the crypto factory to be used for signing and crypting. The default crypto factory is set in the constructor toAS4CryptoFactoryProperties.getDefaultInstance().- Parameters:
aCryptoFactory- The crypto factory to be used. May benull.- Returns:
- this for chaining
- See Also:
-
cryptoFactorySign
Set the crypto factory to be used for signing. The default crypto factory is set in the constructor toAS4CryptoFactoryProperties.getDefaultInstance().- Parameters:
aCryptoFactorySign- The crypto factory to be used. May benull.- Returns:
- this for chaining
- Since:
- 2.2.0
-
cryptoFactoryCrypt
Set the crypto factory to be used for crypting. The default crypto factory is set in the constructor toAS4CryptoFactoryProperties.getDefaultInstance().- Parameters:
aCryptoFactoryCrypt- The crypto factory to be used. May benull.- Returns:
- this for chaining
- Since:
- 2.2.0
-
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
@Nonnull @ReturnsMutableObject public final 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 benull.- Returns:
- this for chaining
- Since:
- 2.1.4
- See Also:
-
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
@Nonnull @ReturnsMutableObject public final 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 benull.- Returns:
- this for chaining
- Since:
- 2.1.4
- See Also:
-
messageID
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 benull.- Returns:
- this for chaining
-
refToMessageID
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 benull.- Returns:
- this for chaining
- Since:
- 1.3.2
-
sendingDateTime
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 benull.- Returns:
- this for chaining
- Since:
- 0.12.0
-
soapVersion
- Returns:
- The SOAP version to be used. May be
null.
-
soapVersion
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 benull.- Returns:
- this for chaining
-
httpRetrySettings
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 benull.- Returns:
- this for chaining
-
locale
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 isDEFAULT_LOCALE.- Parameters:
a- The locale to use. May benull.- Returns:
- this for chaining
-
pmodeResolver
- Returns:
- The currently set
IPModeResolver. May not benull.
-
pmodeResolver
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 not benull.- Returns:
- this for chaining
-
incomingAttachmentFactory
- Returns:
- The currently set
IAS4IncomingAttachmentFactory. Nevernull.
-
incomingAttachmentFactory
@Nonnull public final 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 benull.- Returns:
- this for chaining
-
incomingProfileSelector
- Returns:
- The profile selector for incoming AS4 messages. Never
null. - Since:
- 0.13.0
-
incomingProfileSelector
@Nonnull public final 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 benull.- Returns:
- this for chaining
- Since:
- 0.13.0
-
senderInterrupt
- Returns:
- The currently set
IAS4SenderInterrupt. May benull. - Since:
- 0.13.0
-
senderInterrupt
Set the sender interrupt to be used. This is only needed in very specific cases, isnullby default and should be handled with care.- Parameters:
aSenderInterrupt- The sender interrupt to be used. May benull.- Returns:
- this for chaining
- Since:
- 0.13.0
-
sendingDateTimeConsumer
- Returns:
- The currently set
IAS4SendingDateTimeConsumer. May benull. - Since:
- 2.2.2
-
sendingDateTimeConsumer
@Nonnull public final 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 benull.- Returns:
- this for chaining
- Since:
- 2.2.2
-
buildMessageCallback
@Nonnull public final 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 benull.- Returns:
- this for chaining
-
outgoingDumper
Set a specific outgoing dumper for this builder.- Parameters:
aOutgoingDumper- An outgoing dumper to be used. Maybenull. Ifnullthe global outgoing dumper is used.- Returns:
- this for chaining
-
incomingDumper
Set a specific incoming dumper for this builder.- Parameters:
aIncomingDumper- An incoming dumper to be used. Maybenull. Ifnullthe global incoming dumper is used.- Returns:
- this for chaining
-
decryptRequestDataModifier
@Nonnull public final 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 benull.- Returns:
- this for chaining
- Since:
- 2.2.0
-
retryCallback
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 benull.- Returns:
- this for chaining
-
rawResponseConsumer
@Nonnull public final IMPLTYPE rawResponseConsumer(@Nullable IAS4RawResponseConsumer aResponseConsumer) 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.- Parameters:
aResponseConsumer- The optional response consumer. May benull.- Returns:
- this for chaining
-
isEveryRequiredFieldSet
-
finishFields
@OverrideOnDemand @OverridingMethodsMustInvokeSuper protected com.helger.commons.state.ESuccess finishFields() throws Phase4ExceptionInternal 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.- Returns:
ESuccess- nevernull. Returning failure here stops sending the message.- Throws:
Phase4Exception- if something goes wrong
-
customizeBeforeSending
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.- Throws:
Phase4Exception- if something goes wrong
-
mainSendMessage
Synchronously send the AS4 message. This method may only be called bysendMessage()- 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!- Since:
- 2.2.2
-
sendMessage
Synchronously send the AS4 message. First the internal "finishFields" method is called, to ensure all dynamic fields are filled - on failure this methods exits. AfterwardsisEveryRequiredFieldSet()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.FAILUREif not all mandatory parameters are set or if sending failed,ESuccess.SUCCESSupon success. Nevernull. 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:
-