Search in sources :

Example 16 with Ebms3MessageInfo

use of com.helger.phase4.ebms3header.Ebms3MessageInfo in project phase4 by phax.

the class SOAPHeaderElementProcessorExtractEbms3Messaging method processHeaderElement.

@Nonnull
public ESuccess processHeaderElement(@Nonnull final Document aSOAPDoc, @Nonnull final Element aElement, @Nonnull final ICommonsList<WSS4JAttachment> aAttachments, @Nonnull final AS4MessageState aState, @Nonnull final ErrorList aErrorList) {
    final IMPCManager aMPCMgr = MetaAS4Manager.getMPCMgr();
    IPMode aPMode = null;
    final ICommonsMap<String, EAS4CompressionMode> aCompressionAttachmentIDs = new CommonsHashMap<>();
    IMPC aEffectiveMPC = null;
    String sInitiatorID = null;
    String sResponderID = null;
    final Locale aLocale = aState.getLocale();
    // Parse EBMS3 Messaging object
    final CollectingValidationEventHandler aCVEH = new CollectingValidationEventHandler();
    final Ebms3Messaging aMessaging = Ebms3ReaderBuilder.ebms3Messaging().setValidationEventHandler(aCVEH).read(aElement);
    // wellformed
    if (aMessaging == null) {
        // Invalid Header == not wellformed/invalid xml
        for (final IError aError : aCVEH.getErrorList()) {
            LOGGER.error("Header error: " + aError.getAsString(aLocale));
            aErrorList.add(SingleError.builder(aError).errorID(EEbmsError.EBMS_INVALID_HEADER.getErrorCode()).build());
        }
        return ESuccess.FAILURE;
    }
    // Remember in state
    aState.setMessaging(aMessaging);
    // 0 or 1 are allowed
    final int nUserMessages = aMessaging.getUserMessageCount();
    if (nUserMessages > 1) {
        LOGGER.error("Too many UserMessage objects (" + nUserMessages + ") contained.");
        aErrorList.add(EEbmsError.EBMS_VALUE_INCONSISTENT.getAsError(aLocale));
        return ESuccess.FAILURE;
    }
    // 0 or 1 are allowed
    final int nSignalMessages = aMessaging.getSignalMessageCount();
    if (nSignalMessages > 1) {
        LOGGER.error("Too many SignalMessage objects (" + nSignalMessages + ") contained.");
        aErrorList.add(EEbmsError.EBMS_VALUE_INCONSISTENT.getAsError(aLocale));
        return ESuccess.FAILURE;
    }
    if (nUserMessages + nSignalMessages == 0) {
        // No Message was found
        LOGGER.error("Neither UserMessage nor SignalMessage object contained.");
        aErrorList.add(EEbmsError.EBMS_VALUE_INCONSISTENT.getAsError(aLocale));
        return ESuccess.FAILURE;
    }
    // Check if the usermessage has a PMode in the collaboration info
    final Ebms3UserMessage aUserMessage = CollectionHelper.getAtIndex(aMessaging.getUserMessage(), 0);
    if (aUserMessage != null) {
        final Ebms3MessageInfo aMsgInfo = aUserMessage.getMessageInfo();
        if (aMsgInfo != null) {
            // Set this is as early as possible, so that eventually occurring error
            // messages can use the "RefToMessageId" element properly
            aState.setMessageID(aMsgInfo.getMessageId());
            aState.setRefToMessageID(aMsgInfo.getRefToMessageId());
            aState.setMessageTimestamp(aMsgInfo.getTimestamp());
        }
        // PartyInfo is mandatory in UserMessage
        // From is mandatory in PartyInfo
        // To is mandatory in PartyInfo
        final List<Ebms3PartyId> aFromPartyIdList = aUserMessage.getPartyInfo().getFrom().getPartyId();
        final List<Ebms3PartyId> aToPartyIdList = aUserMessage.getPartyInfo().getTo().getPartyId();
        if (aFromPartyIdList.size() > 1 || aToPartyIdList.size() > 1) {
            LOGGER.error("More than one PartyId is containted in From or To Recipient please check the message.");
            aErrorList.add(EEbmsError.EBMS_VALUE_INCONSISTENT.getAsError(aLocale));
            return ESuccess.FAILURE;
        }
        // Setting Initiator and Responder id, Required values or else xsd will
        // throw an error
        sInitiatorID = aFromPartyIdList.get(0).getValue();
        sResponderID = aToPartyIdList.get(0).getValue();
        final Ebms3CollaborationInfo aCollaborationInfo = aUserMessage.getCollaborationInfo();
        if (aCollaborationInfo != null) {
            // Find PMode
            String sPModeID = null;
            String sAgreementRef = null;
            if (aCollaborationInfo.getAgreementRef() != null) {
                sPModeID = aCollaborationInfo.getAgreementRef().getPmode();
                sAgreementRef = aCollaborationInfo.getAgreementRef().getValue();
            }
            // Get responder address from properties file (may be null)
            final String sAddress = AS4Configuration.getThisEndpointAddress();
            aPMode = m_aPModeResolver.getPModeOfID(sPModeID, aCollaborationInfo.getService().getValue(), aCollaborationInfo.getAction(), sInitiatorID, sResponderID, sAgreementRef, sAddress);
            // Should be screened by the XSD conversion already
            if (aPMode == null) {
                LOGGER.error("Failed to resolve PMode '" + sPModeID + "' using resolver " + m_aPModeResolver);
                aErrorList.add(EEbmsError.EBMS_PROCESSING_MODE_MISMATCH.getAsError(aLocale));
                return ESuccess.FAILURE;
            }
        }
        // to use the configuration for leg2
        PModeLeg aPModeLeg1 = null;
        PModeLeg aPModeLeg2 = null;
        // Needed for the compression check: it is not allowed to have a
        // compressed attachment and a SOAPBodyPayload
        boolean bHasSoapBodyPayload = false;
        if (aPMode != null) {
            aPModeLeg1 = aPMode.getLeg1();
            aPModeLeg2 = aPMode.getLeg2();
            // both are present
            if (aPMode.getMEPBinding().getRequiredLegs() == 2 && aPModeLeg2 == null) {
                LOGGER.error("Error processing the UserMessage, PMode does not contain leg 2.");
                aErrorList.add(EEbmsError.EBMS_PROCESSING_MODE_MISMATCH.getAsError(aLocale));
                return ESuccess.FAILURE;
            }
            final boolean bUseLeg1 = _isUseLeg1(aUserMessage);
            final PModeLeg aEffectiveLeg = bUseLeg1 ? aPModeLeg1 : aPModeLeg2;
            final int nLegNum = bUseLeg1 ? 1 : 2;
            if (aEffectiveLeg == null) {
                LOGGER.error("Error processing the UserMessage, PMode does not contain effective leg " + nLegNum + ".");
                aErrorList.add(EEbmsError.EBMS_PROCESSING_MODE_MISMATCH.getAsError(aLocale));
                return ESuccess.FAILURE;
            }
            aState.setEffectivePModeLeg(nLegNum, aEffectiveLeg);
            if (_checkMPCOfPMode(aEffectiveLeg, aMPCMgr, aLocale, aErrorList).isFailure())
                return ESuccess.FAILURE;
            bHasSoapBodyPayload = _checkSOAPBodyHasPayload(aEffectiveLeg, aSOAPDoc);
            final String sEffectiveMPCID = _getMPCIDOfUserMsg(aUserMessage, aEffectiveLeg);
            // PMode is valid
            // Now Check if MPC valid
            aEffectiveMPC = aMPCMgr.getMPCOrDefaultOfID(sEffectiveMPCID);
            if (aEffectiveMPC == null) {
                LOGGER.error("Error processing the UserMessage, effective MPC ID '" + sEffectiveMPCID + "' is unknown!");
                aErrorList.add(EEbmsError.EBMS_VALUE_INCONSISTENT.getAsError(aLocale));
                return ESuccess.FAILURE;
            }
        }
        // Remember in state
        aState.setSoapBodyPayloadPresent(bHasSoapBodyPayload);
        final Ebms3PayloadInfo aEbms3PayloadInfo = aUserMessage.getPayloadInfo();
        if (aEbms3PayloadInfo == null || aEbms3PayloadInfo.getPartInfo().isEmpty()) {
            if (bHasSoapBodyPayload) {
                LOGGER.error("No PayloadInfo/PartInfo is specified, so no SOAP body payload is allowed.");
                aErrorList.add(EEbmsError.EBMS_VALUE_INCONSISTENT.getAsError(aLocale));
                return ESuccess.FAILURE;
            }
            // attachments in the message
            if (aAttachments.isNotEmpty()) {
                LOGGER.error("No PayloadInfo/PartInfo is specified, so no attachments are allowed.");
                aErrorList.add(EEbmsError.EBMS_EXTERNAL_PAYLOAD_ERROR.getAsError(aLocale));
                return ESuccess.FAILURE;
            }
        } else {
            // Check if there are more Attachments then specified
            if (aAttachments.size() > aEbms3PayloadInfo.getPartInfoCount()) {
                LOGGER.error("Error processing the UserMessage, the amount of specified attachments does not correlate with the actual attachments in the UserMessage. Expected " + aEbms3PayloadInfo.getPartInfoCount() + " but having " + aAttachments.size() + " attachments.");
                aErrorList.add(EEbmsError.EBMS_EXTERNAL_PAYLOAD_ERROR.getAsError(aLocale));
                return ESuccess.FAILURE;
            }
            int nSpecifiedAttachments = 0;
            for (final Ebms3PartInfo aPartInfo : aEbms3PayloadInfo.getPartInfo()) {
                // If href is null or empty there has to be a SOAP Payload
                if (StringHelper.hasNoText(aPartInfo.getHref())) {
                    // Check if there is a BodyPayload as specified in the UserMessage
                    if (!bHasSoapBodyPayload) {
                        LOGGER.error("Error processing the UserMessage. Expected a SOAPBody Payload but there is none present.");
                        aErrorList.add(EEbmsError.EBMS_VALUE_INCONSISTENT.getAsError(aLocale));
                        return ESuccess.FAILURE;
                    }
                } else {
                    // Attachment
                    // To check attachments which are specified in the usermessage and
                    // the real amount in the mime message
                    nSpecifiedAttachments++;
                    final String sAttachmentID = StringHelper.trimStart(aPartInfo.getHref(), MessageHelperMethods.PREFIX_CID);
                    final WSS4JAttachment aIncomingAttachment = aAttachments.findFirst(x -> EqualsHelper.equals(x.getId(), sAttachmentID));
                    if (aIncomingAttachment == null) {
                        LOGGER.warn("Failed to resolve MIME attachment '" + sAttachmentID + "' in list of " + aAttachments.getAllMapped(WSS4JAttachment::getId));
                    }
                    boolean bMimeTypePresent = false;
                    boolean bCompressionTypePresent = false;
                    if (aPartInfo.getPartProperties() != null)
                        for (final Ebms3Property aEbms3Property : aPartInfo.getPartProperties().getProperty()) {
                            final String sPropertyName = aEbms3Property.getName();
                            final String sPropertyValue = aEbms3Property.getValue();
                            if (sPropertyName.equalsIgnoreCase(MessageHelperMethods.PART_PROPERTY_MIME_TYPE)) {
                                bMimeTypePresent = StringHelper.hasText(sPropertyValue);
                            } else if (sPropertyName.equalsIgnoreCase(MessageHelperMethods.PART_PROPERTY_COMPRESSION_TYPE)) {
                                // Only needed check here since AS4 does not support another
                                // CompressionType
                                // http://wiki.ds.unipi.gr/display/ESENS/PR+-+AS4
                                final EAS4CompressionMode eCompressionMode = EAS4CompressionMode.getFromMimeTypeStringOrNull(sPropertyValue);
                                if (eCompressionMode == null) {
                                    LOGGER.error("Error processing the UserMessage, CompressionType '" + sPropertyValue + "' of attachment '" + sAttachmentID + "' is not supported.");
                                    aErrorList.add(EEbmsError.EBMS_VALUE_INCONSISTENT.getAsError(aLocale));
                                    return ESuccess.FAILURE;
                                }
                                aCompressionAttachmentIDs.put(sAttachmentID, eCompressionMode);
                                bCompressionTypePresent = true;
                            } else if (sPropertyName.equalsIgnoreCase(MessageHelperMethods.PART_PROPERTY_CHARACTER_SET)) {
                                if (StringHelper.hasText(sPropertyValue)) {
                                    final Charset aCharset = CharsetHelper.getCharsetFromNameOrNull(sPropertyValue);
                                    if (aCharset == null) {
                                        LOGGER.error("Value '" + sPropertyValue + "' of property '" + MessageHelperMethods.PART_PROPERTY_CHARACTER_SET + "' of attachment '" + sAttachmentID + "' is not supported");
                                        aErrorList.add(EEbmsError.EBMS_VALUE_INCONSISTENT.getAsError(aLocale));
                                        return ESuccess.FAILURE;
                                    } else if (aIncomingAttachment != null)
                                        aIncomingAttachment.setCharset(aCharset);
                                }
                            }
                        // else we don't care about the property
                        }
                    // got compressed
                    if (bCompressionTypePresent && !bMimeTypePresent) {
                        LOGGER.error("Error processing the UserMessage, MimeType for a compressed attachment ('" + sAttachmentID + "') is not present.");
                        aErrorList.add(EEbmsError.EBMS_VALUE_INCONSISTENT.getAsError(aLocale));
                        return ESuccess.FAILURE;
                    }
                }
            }
            // This may also be an indicator for "external payloads"
            if (nSpecifiedAttachments != aAttachments.size()) {
                LOGGER.error("Error processing the UserMessage: the amount of specified attachments does not correlate with the actual attachments in the UserMessage. Expected " + aEbms3PayloadInfo.getPartInfoCount() + " but having " + aAttachments.size() + " attachments. This is an indicator, that an external attached was provided.");
                aErrorList.add(EEbmsError.EBMS_EXTERNAL_PAYLOAD_ERROR.getAsError(aLocale));
                return ESuccess.FAILURE;
            }
        }
    } else {
        // Must be a SignalMessage
        // all vars stay null
        final Ebms3SignalMessage aSignalMessage = aMessaging.getSignalMessageAtIndex(0);
        final Ebms3MessageInfo aMsgInfo = aSignalMessage.getMessageInfo();
        if (aMsgInfo != null) {
            // Set this is as early as possible, so that eventually occurring error
            // messages can use the "RefToMessageId" element properly
            aState.setMessageID(aMsgInfo.getMessageId());
            aState.setRefToMessageID(aMsgInfo.getRefToMessageId());
            aState.setMessageTimestamp(aMsgInfo.getTimestamp());
        }
        final Ebms3PullRequest aEbms3PullRequest = aSignalMessage.getPullRequest();
        final Ebms3Receipt aEbms3Receipt = aSignalMessage.getReceipt();
        if (aEbms3PullRequest != null) {
            final String sMPC = aEbms3PullRequest.getMpc();
            final IMPC aMPC = aMPCMgr.getMPCOfID(sMPC);
            if (aMPC == null) {
                LOGGER.error("Failed to resolve the PullRequest MPC '" + sMPC + "'");
                // Return value not recognized when MPC is not currently saved
                aErrorList.add(EEbmsError.EBMS_VALUE_NOT_RECOGNIZED.getAsError(aLocale));
                return ESuccess.FAILURE;
            }
            // Create SPI which returns a PMode
            for (final IAS4ServletPullRequestProcessorSPI aProcessor : AS4ServletPullRequestProcessorManager.getAllProcessors()) {
                aPMode = aProcessor.findPMode(aSignalMessage);
                if (aPMode != null) {
                    LOGGER.info("Found PMode '" + aPMode.getID() + "' for MPC '" + sMPC + "' in SignalMessage " + aSignalMessage);
                    break;
                }
            }
            if (aPMode == null) {
                LOGGER.error("Failed to resolve PMode for PullRequest with MPC '" + sMPC + "'");
                aErrorList.add(EEbmsError.EBMS_VALUE_NOT_RECOGNIZED.getAsError(aLocale));
                return ESuccess.FAILURE;
            }
        } else if (aEbms3Receipt != null) {
            final String sRefToMessageID = aSignalMessage.getMessageInfo().getRefToMessageId();
            if (StringHelper.hasNoText(sRefToMessageID)) {
                LOGGER.error("The Receipt does not contain a RefToMessageId");
                aErrorList.add(EEbmsError.EBMS_INVALID_RECEIPT.getAsError(aLocale));
                return ESuccess.FAILURE;
            }
        } else {
            // Error Message
            if (!aSignalMessage.getError().isEmpty()) {
                for (final Ebms3Error aError : aSignalMessage.getError()) {
                    /*
               * Ebms 3 spec 6.2.6: This OPTIONAL attribute indicates the
               * MessageId of the message in error, for which this error is
               * raised.
               */
                    if (false)
                        if (StringHelper.hasNoText(aError.getRefToMessageInError())) {
                            aErrorList.add(EEbmsError.EBMS_VALUE_INCONSISTENT.getAsError(aLocale));
                            return ESuccess.FAILURE;
                        }
                }
            }
        }
    }
    // Remember in state
    aState.setPMode(aPMode);
    aState.setOriginalSoapDocument(aSOAPDoc);
    aState.setOriginalAttachments(aAttachments);
    aState.setCompressedAttachmentIDs(aCompressionAttachmentIDs);
    aState.setMPC(aEffectiveMPC);
    aState.setInitiatorID(sInitiatorID);
    aState.setResponderID(sResponderID);
    return ESuccess.SUCCESS;
}
Also used : Locale(java.util.Locale) Ebms3SignalMessage(com.helger.phase4.ebms3header.Ebms3SignalMessage) PModeLeg(com.helger.phase4.model.pmode.leg.PModeLeg) EAS4CompressionMode(com.helger.phase4.attachment.EAS4CompressionMode) Ebms3PartyId(com.helger.phase4.ebms3header.Ebms3PartyId) Ebms3PayloadInfo(com.helger.phase4.ebms3header.Ebms3PayloadInfo) Ebms3PullRequest(com.helger.phase4.ebms3header.Ebms3PullRequest) CommonsHashMap(com.helger.commons.collection.impl.CommonsHashMap) Ebms3MessageInfo(com.helger.phase4.ebms3header.Ebms3MessageInfo) Ebms3Property(com.helger.phase4.ebms3header.Ebms3Property) Ebms3Receipt(com.helger.phase4.ebms3header.Ebms3Receipt) CollectingValidationEventHandler(com.helger.jaxb.validation.CollectingValidationEventHandler) Charset(java.nio.charset.Charset) Ebms3PartInfo(com.helger.phase4.ebms3header.Ebms3PartInfo) Ebms3Error(com.helger.phase4.ebms3header.Ebms3Error) IError(com.helger.commons.error.IError) IAS4ServletPullRequestProcessorSPI(com.helger.phase4.servlet.spi.IAS4ServletPullRequestProcessorSPI) IMPC(com.helger.phase4.model.mpc.IMPC) Ebms3CollaborationInfo(com.helger.phase4.ebms3header.Ebms3CollaborationInfo) IMPCManager(com.helger.phase4.model.mpc.IMPCManager) IPMode(com.helger.phase4.model.pmode.IPMode) Ebms3UserMessage(com.helger.phase4.ebms3header.Ebms3UserMessage) Ebms3Messaging(com.helger.phase4.ebms3header.Ebms3Messaging) WSS4JAttachment(com.helger.phase4.attachment.WSS4JAttachment) Nonnull(javax.annotation.Nonnull)

Example 17 with Ebms3MessageInfo

use of com.helger.phase4.ebms3header.Ebms3MessageInfo in project phase4 by phax.

the class AS4ClientErrorMessage method buildMessage.

@Override
public AS4ClientBuiltMessage buildMessage(@Nonnull @Nonempty final String sMessageID, @Nullable final IAS4ClientBuildMessageCallback aCallback) throws IOException {
    _checkMandatoryAttributes();
    final Ebms3MessageInfo aEbms3MessageInfo = MessageHelperMethods.createEbms3MessageInfo(sMessageID, getRefToMessageID(), getSendingDateTimeOrNow());
    final AS4ErrorMessage aErrorMsg = AS4ErrorMessage.create(getSoapVersion(), aEbms3MessageInfo, m_aErrorMessages);
    if (aCallback != null)
        aCallback.onAS4Message(aErrorMsg);
    final Document aDoc = aErrorMsg.getAsSoapDocument();
    if (aCallback != null)
        aCallback.onSoapDocument(aDoc);
    // Wrap SOAP XML
    return new AS4ClientBuiltMessage(sMessageID, new HttpXMLEntity(aDoc, getSoapVersion().getMimeType()));
}
Also used : HttpXMLEntity(com.helger.phase4.http.HttpXMLEntity) Document(org.w3c.dom.Document) Ebms3MessageInfo(com.helger.phase4.ebms3header.Ebms3MessageInfo) AS4ErrorMessage(com.helger.phase4.messaging.domain.AS4ErrorMessage)

Example 18 with Ebms3MessageInfo

use of com.helger.phase4.ebms3header.Ebms3MessageInfo in project phase4 by phax.

the class AS4ReceiptMessage method create.

/**
 * This method creates a receipt message.
 *
 * @param eSoapVersion
 *        SOAP Version which should be used
 * @param sMessageID
 *        Message ID to use. May neither be <code>null</code> nor empty.
 * @param aEbms3UserMessage
 *        The received usermessage which should be responded too
 * @param aSoapDocument
 *        If the SOAPDocument has WSS4j elements and the following parameter
 *        is true NonRepudiation will be used if the message is signed
 * @param bShouldUseNonRepudiation
 *        If NonRepudiation should be used or not
 * @return AS4ReceiptMessage
 */
@Nonnull
public static AS4ReceiptMessage create(@Nonnull final ESoapVersion eSoapVersion, @Nonnull @Nonempty final String sMessageID, @Nullable final Ebms3UserMessage aEbms3UserMessage, @Nullable final Node aSoapDocument, @Nonnull final boolean bShouldUseNonRepudiation) {
    // Only for signed messages
    final ICommonsList<Node> aDSRefs = _getAllReferences(aSoapDocument);
    final Ebms3SignalMessage aSignalMessage = new Ebms3SignalMessage();
    // Message Info
    {
        // Always use "now" as date time
        final Ebms3MessageInfo aEbms3MessageInfo = MessageHelperMethods.createEbms3MessageInfo(sMessageID, aEbms3UserMessage != null ? aEbms3UserMessage.getMessageInfo().getMessageId() : null);
        aSignalMessage.setMessageInfo(aEbms3MessageInfo);
    }
    final Ebms3Receipt aEbms3Receipt = new Ebms3Receipt();
    if (aDSRefs.isNotEmpty() && bShouldUseNonRepudiation) {
        final NonRepudiationInformation aNonRepudiationInformation = new NonRepudiationInformation();
        for (final Node aRef : aDSRefs) {
            // Read XMLDsig Reference
            final ReferenceType aRefObj = XMLDSigReaderBuilder.dsigReference().read(aRef);
            // Add to NR response
            final MessagePartNRInformation aMessagePartNRInformation = new MessagePartNRInformation();
            aMessagePartNRInformation.setReference(aRefObj);
            aNonRepudiationInformation.addMessagePartNRInformation(aMessagePartNRInformation);
        }
        aEbms3Receipt.addAny(Ebms3WriterBuilder.nonRepudiationInformation().getAsDocument(aNonRepudiationInformation).getDocumentElement());
    } else {
        if (aDSRefs.isEmpty())
            LOGGER.info("Found no ds:Reference elements in the source message, hence returning the source UserMessage in the Receipt");
        else
            LOGGER.info("Non-repudiation is disabled, hence returning the source UserMessage in the Receipt");
        // If the original usermessage is not signed, the receipt will contain the
        // original message part without wss4j security
        aEbms3Receipt.addAny(AS4UserMessage.create(eSoapVersion, aEbms3UserMessage).getAsSoapDocument().getDocumentElement());
    }
    aSignalMessage.setReceipt(aEbms3Receipt);
    return new AS4ReceiptMessage(eSoapVersion, aSignalMessage);
}
Also used : Ebms3SignalMessage(com.helger.phase4.ebms3header.Ebms3SignalMessage) Ebms3Receipt(com.helger.phase4.ebms3header.Ebms3Receipt) NonRepudiationInformation(com.helger.phase4.ebms3header.NonRepudiationInformation) Node(org.w3c.dom.Node) MessagePartNRInformation(com.helger.phase4.ebms3header.MessagePartNRInformation) Ebms3MessageInfo(com.helger.phase4.ebms3header.Ebms3MessageInfo) ReferenceType(com.helger.xsds.xmldsig.ReferenceType) Nonnull(javax.annotation.Nonnull)

Example 19 with Ebms3MessageInfo

use of com.helger.phase4.ebms3header.Ebms3MessageInfo in project phase4 by phax.

the class MessageHelperMethods method createEbms3MessageInfo.

/**
 * Create a new message info.
 *
 * @param sMessageID
 *        The message ID. May neither be <code>null</code> nor empty.
 * @param sRefToMessageID
 *        to set the reference to the previous message needed for two way
 *        exchanges
 * @param aDateTime
 *        Date and time. May not be <code>null</code>.
 * @return Never <code>null</code>.
 * @since 0.12.0
 */
@Nonnull
public static Ebms3MessageInfo createEbms3MessageInfo(@Nonnull @Nonempty final String sMessageID, @Nullable final String sRefToMessageID, @Nonnull final OffsetDateTime aDateTime) {
    ValueEnforcer.notEmpty(sMessageID, "MessageID");
    ValueEnforcer.notNull(aDateTime, "DateTime");
    final Ebms3MessageInfo aMessageInfo = new Ebms3MessageInfo();
    aMessageInfo.setMessageId(sMessageID);
    if (StringHelper.hasText(sRefToMessageID))
        aMessageInfo.setRefToMessageId(sRefToMessageID);
    aMessageInfo.setTimestamp(XMLOffsetDateTime.of(aDateTime));
    return aMessageInfo;
}
Also used : Ebms3MessageInfo(com.helger.phase4.ebms3header.Ebms3MessageInfo) Nonnull(javax.annotation.Nonnull)

Example 20 with Ebms3MessageInfo

use of com.helger.phase4.ebms3header.Ebms3MessageInfo in project phase4 by phax.

the class ENTSOGCompatibilityValidatorTest method testValidateUserMessageNoMessageID.

@Test
public void testValidateUserMessageNoMessageID() {
    final Ebms3UserMessage aUserMessage = new Ebms3UserMessage();
    aUserMessage.setMessageInfo(new Ebms3MessageInfo());
    VALIDATOR.validateUserMessage(aUserMessage, m_aErrorList);
    assertTrue(m_aErrorList.containsAny(x -> x.getErrorText(LOCALE).contains("MessageInfo/MessageId is missing")));
}
Also used : Ebms3SignalMessage(com.helger.phase4.ebms3header.Ebms3SignalMessage) PModeLegSecurity(com.helger.phase4.model.pmode.leg.PModeLegSecurity) MessageHelperMethods(com.helger.phase4.messaging.domain.MessageHelperMethods) EMEP(com.helger.phase4.model.EMEP) ErrorList(com.helger.commons.error.list.ErrorList) ETriState(com.helger.commons.state.ETriState) ESoapVersion(com.helger.phase4.soap.ESoapVersion) Assert.assertNotSame(org.junit.Assert.assertNotSame) EPModeSendReceiptReplyPattern(com.helger.phase4.model.pmode.leg.EPModeSendReceiptReplyPattern) ECryptoAlgorithmSign(com.helger.phase4.crypto.ECryptoAlgorithmSign) Locale(java.util.Locale) Ebms3MessageInfo(com.helger.phase4.ebms3header.Ebms3MessageInfo) PMode(com.helger.phase4.model.pmode.PMode) PModeLeg(com.helger.phase4.model.pmode.leg.PModeLeg) ClassRule(org.junit.ClassRule) PModeLegErrorHandling(com.helger.phase4.model.pmode.leg.PModeLegErrorHandling) PhotonAppWebTestRule(com.helger.photon.app.mock.PhotonAppWebTestRule) Before(org.junit.Before) Ebms3PartyId(com.helger.phase4.ebms3header.Ebms3PartyId) PModeLegProtocol(com.helger.phase4.model.pmode.leg.PModeLegProtocol) Ebms3UserMessage(com.helger.phase4.ebms3header.Ebms3UserMessage) ECryptoAlgorithmSignDigest(com.helger.phase4.crypto.ECryptoAlgorithmSignDigest) EWSSVersion(com.helger.phase4.wss.EWSSVersion) Assert.assertTrue(org.junit.Assert.assertTrue) EMEPBinding(com.helger.phase4.model.EMEPBinding) Test(org.junit.Test) Ebms3To(com.helger.phase4.ebms3header.Ebms3To) ECryptoAlgorithmCrypt(com.helger.phase4.crypto.ECryptoAlgorithmCrypt) Ebms3From(com.helger.phase4.ebms3header.Ebms3From) Ignore(org.junit.Ignore) Ebms3PartyInfo(com.helger.phase4.ebms3header.Ebms3PartyInfo) IPModeIDProvider(com.helger.phase4.model.pmode.IPModeIDProvider) Ebms3UserMessage(com.helger.phase4.ebms3header.Ebms3UserMessage) Ebms3MessageInfo(com.helger.phase4.ebms3header.Ebms3MessageInfo) Test(org.junit.Test)

Aggregations

Ebms3MessageInfo (com.helger.phase4.ebms3header.Ebms3MessageInfo)31 Ebms3PartyInfo (com.helger.phase4.ebms3header.Ebms3PartyInfo)26 Ebms3CollaborationInfo (com.helger.phase4.ebms3header.Ebms3CollaborationInfo)19 Ebms3PayloadInfo (com.helger.phase4.ebms3header.Ebms3PayloadInfo)19 Nonnull (javax.annotation.Nonnull)19 Ebms3MessageProperties (com.helger.phase4.ebms3header.Ebms3MessageProperties)17 Ebms3Property (com.helger.phase4.ebms3header.Ebms3Property)17 Ebms3UserMessage (com.helger.phase4.ebms3header.Ebms3UserMessage)13 Test (org.junit.Test)13 Ebms3SignalMessage (com.helger.phase4.ebms3header.Ebms3SignalMessage)12 AS4UserMessage (com.helger.phase4.messaging.domain.AS4UserMessage)12 Ebms3PartyId (com.helger.phase4.ebms3header.Ebms3PartyId)9 PModeLeg (com.helger.phase4.model.pmode.leg.PModeLeg)9 Locale (java.util.Locale)9 ErrorList (com.helger.commons.error.list.ErrorList)8 ETriState (com.helger.commons.state.ETriState)8 ECryptoAlgorithmCrypt (com.helger.phase4.crypto.ECryptoAlgorithmCrypt)8 ECryptoAlgorithmSign (com.helger.phase4.crypto.ECryptoAlgorithmSign)8 ECryptoAlgorithmSignDigest (com.helger.phase4.crypto.ECryptoAlgorithmSignDigest)8 Ebms3From (com.helger.phase4.ebms3header.Ebms3From)8