Skip to content

Empty Soap envelope returned while pipeline exits with full message #8968

@MLenterman

Description

@MLenterman

Current Behavior

Introduced somewhere after 9.1.0-20250406.172201 or 9.1.0 release. Ladybug and logs show pipeline ending with the correct return message. So far I can see this behavior happening only in flows that involve returning large documents/large base64 in the return message. Only hint I could find in logging is that in the working ff version the cxf.MessageProvider - building multipart message with MultipartXmlSessionKey [null] is executed before util.StreamCaptureUtils - 2703 bytes available at close & util.StreamCaptureUtils - -1 bytes available at close, while in the non-working ff version it is executed after. Also in the working ff version both log entries show -1 bytes, while the non working ff version has 2703 bytes for the first util.StreamCaptureUtils logstatement.

Expected Behavior

Should return my message instead of empty Soap envelope

Environment Information

9.2.0-20250512.173626

Steps To Reproduce

In the provided configuration, the SenderPipe called http:__www.egem.nl_StUF_sector_zkn_0310_geefZaakdocumentbewerken_Di02 is the flow that eventually results in the empty Soap response. So likely the issue is somewhere between the return of that sender and the provided parent adapter returning the Soap response.

Configuration

<Module xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../FrankConfig.xsd">
    <Adapter name="SoapEndpointRouter_VrijeBerichten"
        active="${SoapEndpointRouter_VrijeBerichten.Active}"
        description="">

        <!--
            Never use "originalMessage" in this adapter. Use "SafeOriginalMessage" instead. 
            This is due "originalMessage" potentially containing very large document base64. 
            "SafeOriginalMessage" has the base64 already stored to disk and removed from the message.
        -->

        <Receiver name="SoapEndpointRouter_VrijeBerichten">
            <WebServiceListener name="SoapEndpointRouter_VrijeBerichten" address="${zaakbrug.soap.vrije-berichten.endpoint}" soap="false"/>
        </Receiver>

        <Pipeline>
            <Exits>
                <Exit name="EXIT" state="SUCCESS"/>
                <Exit name="EXCEPTION" state="ERROR"/>
            </Exits>

            <!--
                Dont touch the input message before this pipe. Especially no xslt/xpath. 
                It can potentially contain very large document base64 still. 
                This pipe stores it to disk and removes it from the message.
            -->
            <EchoPipe 
                name="StoreInhoud"
                elementToMove="inhoud"
                removeCompactMsgNamespaces="false"
                >
                <Forward name="success" path="CheckInputDocumentObjectCount" />
            </EchoPipe>

            <!--
                In the rare case of the new base64 AND the old base64 of a document being present during an updateDocument action, the elementsToMove will make a
                ref_inhoud# sessionKey for both "inhoud" elements. Normally there is only one because there is only 1 inhoud element with the NEW base64.
                Only in this scenario "ref_inhoud" will be the OLD base64 and "ref_inhoud2" will be the NEW base64. We are only interested in the NEW base64,
                so we are overwriting the "ref_inhoud" sessionkey with the content of "ref_inhoud2" and replace "{sessionKey:ref_inhoud2} with "{sessionKey:ref_inhoud}".
            -->
            <XmlIfPipe name="CheckInputDocumentObjectCount"
                xpathExpression="count(//*:inhoud) = 2"
                preserveInput="true"
                >
                <Forward name="then" path="OverwriteRefInhoudWithRefInhoud2"/>
                <Forward name="else" path="ReplaceInhoudRefWithBase64EncodedRef"/>
            </XmlIfPipe>

            <PutInSessionPipe
                name="OverwriteRefInhoudWithRefInhoud2"
                >
                <Param name="ref_inhoud" sessionKey="ref_inhoud2" />
                <Forward name="success" path="ReplaceInhoudRefWithBase64EncodedRef"/>
                <Forward name="exception" path="BackEndError"/>
            </PutInSessionPipe>

            <ReplacerPipe
                name="ReplaceInhoudRefWithBase64EncodedRef"
                storeResultInSessionKey="SafeOriginalMessage"
                find="{sessionKey:ref_inhoud}"
                replace="e3Nlc3Npb25LZXk6cmVmX2luaG91ZH0="
                >
                <Forward name="success" path="ReplaceInhoudRef2WithBase64EncodedRef" />
            </ReplacerPipe>

            <ReplacerPipe
                name="ReplaceInhoudRef2WithBase64EncodedRef"
                storeResultInSessionKey="SafeOriginalMessage"
                find="{sessionKey:ref_inhoud2}"
                replace="e3Nlc3Npb25LZXk6cmVmX2luaG91ZH0="
                >
                <Forward name="success" path="ValidateInput" />
            </ReplacerPipe>

            <WsdlXmlValidatorPipe
                name="ValidateInput"
				wsdl="Common/xsd/Zaak_DocumentServices_1_1_02/zkn0310/zs-dms/zkn0310_vrijeBerichten_zs-dms.wsdl"
                outputFormat="XML"
                ignoreUnknownNamespaces="true"
                autoFormat="false"
                >
				<Forward name="success" path="UnwrapOriginalMessage"/>
				<Forward name="failure" path="WsdlValidationSoftFailForwarder"/>
			</WsdlXmlValidatorPipe>

            <XmlSwitchPipe
                name="WsdlValidationSoftFailForwarder"
                xpathExpression="$SoftFail = true()"
                >
                <Param name="SoftFail" value="${zaakbrug.soap.vrije-berichten.validation-soft-fail}" type="BOOLEAN"/>
                <Forward name="true" path="UnwrapOriginalMessage" />
                <Forward name="false" path="InvalidXml" />
            </XmlSwitchPipe>

            <SoapWrapperPipe
                name="UnwrapOriginalMessage"
                direction="UNWRAP"
                removeOutputNamespaces="true"
                >
                <Forward name="success" path="StoreResponeContextSessionKeys"/>
                <Forward name="exception" path="BackEndError"/>
            </SoapWrapperPipe>

            <PutInSessionPipe
                name="StoreResponeContextSessionKeys"
                >
                <Param name="Stuurgegevens" xpathExpression="/*/stuurgegevens" defaultValue="&lt;stuurgegevens/&gt;" type="DOMDOC" />
                <Param name="Parameters" xpathExpression="/*/parameters" defaultValue="&lt;parameters/&gt;" type="DOMDOC" />
                <Forward name="success" path="LegalizeSoapActionForPipeName"/>
                <Forward name="exception" path="BackEndError"/>
            </PutInSessionPipe>

            <XsltPipe
                name="LegalizeSoapActionForPipeName"
                preserveInput="true"
                xpathExpression="replace($Action, '/', '_')"
                storeResultInSessionKey="LegalizedSoapAction"
                >
                <Param name="Action" sessionKey="SOAPAction"/>
                <Forward name="success" path="checkObjectCount"/>
                <Forward name="exception" path="BackEndError"/>
            </XsltPipe>

            <XmlIfPipe name="checkObjectCount" xpathExpression="count(/*/edcLk02/object)=2">
                <Forward name="then" path="StoreZdsWordtInformatieObject1" />
                <Forward name="else" path="StoreZdsWordtInformatieObject2" />
            </XmlIfPipe>

            <PutInSessionPipe name="StoreZdsWordtInformatieObject1">
                <Param name="ZdsWordtInformatieObject" xpathExpression="/*/edcLk02/object[2]" defaultValue="&lt;object/&gt;" type="DOMDOC" />
                <Forward name="success" path="ForwardBySoapActionSwitch" />
            </PutInSessionPipe>

            <PutInSessionPipe name="StoreZdsWordtInformatieObject2">
                <Param name="ZdsWordtInformatieObject" xpathExpression="/*/edcLk02/object[1]" defaultValue="&lt;object/&gt;" type="DOMDOC" />
                <Forward name="success" path="ForwardBySoapActionSwitch" />
            </PutInSessionPipe>

            <XmlSwitchPipe
                name="ForwardBySoapActionSwitch"
				forwardNameSessionKey="LegalizedSoapAction"
                notFoundForwardName="UnsupportedSoapActionError"
                />
            
            <!-- GenereerZaakIdentificatie_Di02 -->
            <SenderPipe
                name="http:__www.egem.nl_StUF_sector_zkn_0310_genereerZaakIdentificatie_Di02"
                storeResultInSessionKey="Identificatie"
                >
                <IbisLocalSender
                    name="GenereerZaakIdentificatie_Di02LocalSender"
                    javaListener="GenereerIdentificatieEmulator"
                    returnedSessionKeys="Error">
                    <Param name="IdentificatieType" value="ZaakIdentificatie"/>
                </IbisLocalSender>
                <Forward name="success" path="WrapGenereerZaakIdentificatie_Du02Response" />
                <Forward name="exception" path="BackEndError" />
            </SenderPipe>

            <!-- GenereerDocumentIdentificatie_Di02 -->
            <SenderPipe
                name="http:__www.egem.nl_StUF_sector_zkn_0310_genereerDocumentIdentificatie_Di02"
                storeResultInSessionKey="Identificatie"
                >
                <IbisLocalSender
                    name="GenereerDocumentIdentificatie_Di02LocalSender"
                    javaListener="GenereerIdentificatieEmulator"
                    returnedSessionKeys="Error">
                    <Param name="IdentificatieType" value="DocumentIdentificatie"/>
                </IbisLocalSender>
                <Forward name="success" path="WrapGenereerDocumentIdentificatie_Di02Response" />
                <Forward name="exception" path="BackEndError" />
            </SenderPipe>

            <!-- GeefZaakdocumentbewerken_Di02 -->
            <SenderPipe
                name="http:__www.egem.nl_StUF_sector_zkn_0310_geefZaakdocumentbewerken_Di02"
                storeResultInSessionKey="ZdsZaakDocumentInhoud"
                >
                <IbisLocalSender
                    name="GeefZaakdocumentbewerken_Di02LocalSender"
                    returnedSessionKeys="ZgwLock,ref_inhoud,Error"
                    javaListener="GeefZaakdocumentbewerken_Di02"
                    >
                    <Param name="DocumentIdentificatie" xpathExpression="/*/edcLv01/gelijk/identificatie" type="STRING" />
                </IbisLocalSender>
                <Forward name="success" path="WrapGeefZaakdocumentbewerken_Di02Response"/>
                <Forward name="exception" path="EXCEPTION" />
            </SenderPipe>

            <!-- CancelCheckout_Di02 -->
            <SenderPipe
                name="http:__www.egem.nl_StUF_sector_zkn_0310_cancelCheckout_Di02"
                >
                <IbisLocalSender
                    name="CancelCheckout_Di02LocalSender"
                    javaListener="CancelCheckOutZaakDocument_Di02"
                    returnedSessionKeys="Error">
                    <Param name="DocumentIdentificatie" xpathExpression="/*/document/identificatie" type="STRING" />
                    <Param name="Lock" xpathExpression="/*/parameters/checkedOutId" type="STRING" />
                </IbisLocalSender>
                <Forward name="success" path="WrapCheckOutZaakDocument_Di02Response"/>
                <Forward name="exception" path="EXCEPTION" />
            </SenderPipe>

            <!-- UpdateZaakdocument_Di02 -->
            <SenderPipe
                name="http:__www.egem.nl_StUF_sector_zkn_0310_updateZaakdocument_Di02"
                >
                <IbisLocalSender
                    name="UpdateZaakdocument_Di02LocalSender"
                    javaListener="UpdateZaakDocument_Di02"
                    returnedSessionKeys="Error">
                    <Param name="ZdsWordtInformatieObject" sessionKey="ZdsWordtInformatieObject" />
                    <Param name="Lock" xpathExpression="/*/parameters/checkedOutId" type="STRING" />
                    <Param name="ref_inhoud" sessionKey="ref_inhoud" />
                </IbisLocalSender>
                <Forward name="success" path="WrapUpdateZaakDocument_Di02Response"/>
                <Forward name="exception" path="EXCEPTION" />
            </SenderPipe>

            <SoapWrapperPipe
                name="WrapGenereerZaakIdentificatie_Du02Response"
                getInputFromFixedValue="&lt;EmptyInput/&gt;"
                soapBodyStyleSheet="Common/xsl/CreateGenereerZaakIdentificatie_Du02Response.xslt"
                >
                <Param name="Stuurgegevens" sessionKey="Stuurgegevens" type="DOMDOC" />
                <Param name="Identificatie" sessionKey="Identificatie" type="STRING" />
                <Forward name="success" path="EXIT"/>
            </SoapWrapperPipe>

            <SoapWrapperPipe
                name="WrapGenereerDocumentIdentificatie_Di02Response"
                getInputFromFixedValue="&lt;EmptyInput/&gt;"
                soapBodyStyleSheet="Common/xsl/CreateGenereerDocumentIdentificatie_Du02Response.xslt"
                >
                <Param name="Stuurgegevens" sessionKey="Stuurgegevens" type="DOMDOC" />
                <Param name="Identificatie" sessionKey="Identificatie" type="STRING" />
                <Forward name="success" path="EXIT"/>
            </SoapWrapperPipe>

            <SoapWrapperPipe
                name="WrapGeefZaakdocumentbewerken_Di02Response"
                getInputFromFixedValue="&lt;EmptyInput/&gt;"
                soapBodyStyleSheet="Common/xsl/CreateDu02Response.xslt"
                >
                <Param name="Stuurgegevens" sessionKey="Stuurgegevens" type="DOMDOC" />
                <!-- <Param name="Parameters" sessionKey="Parameters" type="DOMDOC"/> -->
                <Param name="ZgwLock" sessionKey="ZgwLock" type="DOMDOC" />
                <Param name="ZdsZaakDocumentInhoud" sessionKey="ZdsZaakDocumentInhoud" type="DOMDOC" />
                <Forward name="success" path="ReplaceBase64EncodedRefWithInhoudRef"/>
            </SoapWrapperPipe>

            <ReplacerPipe
                name="ReplaceBase64EncodedRefWithInhoudRef"
                find="e3Nlc3Npb25LZXk6cmVmX2luaG91ZH0="
                replace="?{ref_inhoud}"
                >
                <Forward name="success" path="SubstituteDocumentDataRef" />
            </ReplacerPipe>

            <ReplacerPipe
                name="SubstituteDocumentDataRef"
                >
                <Param name="ref_inhoud" sessionKey="ref_inhoud" />
                <Forward name="success" path="EXIT" />
            </ReplacerPipe> 

            <SoapWrapperPipe
                name="WrapCheckOutZaakDocument_Di02Response"
                getInputFromFixedValue="&lt;EmptyInput/&gt;"
                soapBodyStyleSheet="Common/xsl/CreateBv02Response.xslt"
                >
                <Param name="Stuurgegevens" sessionKey="Stuurgegevens" type="DOMDOC" />
                <Forward name="success" path="EXIT"/>
            </SoapWrapperPipe>

            <SoapWrapperPipe
                name="WrapUpdateZaakDocument_Di02Response"
                getInputFromFixedValue="&lt;EmptyInput/&gt;"
                soapBodyStyleSheet="Common/xsl/CreateBv02Response.xslt"
                >
                <Param name="Stuurgegevens" sessionKey="Stuurgegevens" type="DOMDOC" />
                <Forward name="success" path="EXIT"/>
            </SoapWrapperPipe>

            <!-- ERRORS -->
            <XsltPipe 
                name="UnsupportedSoapActionError"
                getInputFromFixedValue="&lt;dummy/&gt;"
                styleSheetName="Common/xsl/BuildError.xsl"
                storeResultInSessionKey="Error">
                <Param name="cause" sessionKey="Error" type="DOMDOC" />
                <Param name="code" value="TechnicalError" /> <!-- codes: TechnicalError, TranslationError, ConfigurationError-->
                <Param name="reason" pattern="Unsupported SOAP-action. No implementation found for: {SOAPAction}" />
                <!-- <Param name="details" sessionKey="" /> -->
                <!-- <Param name="detailsXml" type="DOMDOC" /> -->
                <Forward name="success" path="BackEndError" />
                <Forward name="exception" path="BackEndError" />
            </XsltPipe>

            <PutInSessionPipe name="InvalidXml">
                <Param name="errorCode" value="INVALID_XML"/>
                <Param name="errorReason" value="XML was invalid"/>
                <Forward name="success" path="WrapFo03Response" />
            </PutInSessionPipe>

            <PutInSessionPipe name="NotWellFormed">
                <Param name="errorCode" value="NOT_WELL_FORMED_XML"/>
                <Param name="errorReason" value="XML was not according to xsd"/>             
                <Forward name="success" path="WrapFo03Response"/>
            </PutInSessionPipe>

            <PutInSessionPipe
                name="BackEndError"
                unlessSessionKey="errorCode"
                >
                <Param name="errorCode" styleSheetName="Common/xsl/BackEndError.xsl" />
                <Param name="errorReason" xpathExpression="(//error)[last()]/reason" />
                <Param name="errorDetailText" xpathExpression="(//error)[last()]/details" />
                <Param name="errorDetailXML" xpathExpression="/error" type="DOMDOC" />
                <Forward name="success" path="WrapFo03Response" />
            </PutInSessionPipe>

            <SoapWrapperPipe
                name="WrapFo03Response"
                emptyInputReplacement="&lt;EmptyInput/&gt;"
                soapBodyStyleSheet="Common/xsl/CreateFo03Response.xslt"
                >
                <Param name="Stuurgegevens" sessionKey="Stuurgegevens" type="DOMDOC" />
                <Param name="Parameters" sessionKey="Parameters" type="DOMDOC" />
                <Param name="errorCode"   sessionKey="errorCode" />
                <Param name="errorReason" sessionKey="errorReason" />
                <Param name="errorDetailText" sessionKey="errorDetailText" />
                <Param name="errorDetailXML" sessionKey="errorDetailXML" type="DOMDOC" />
                <Forward name="success" path="EXIT"/>
            </SoapWrapperPipe>
        </Pipeline>
    </Adapter>
</Module>

Input

No response

What database are you using?

No response

What browsers are you seeing the problem on?

No response

Relevant Log Output

Anything else?

zaakbrug-9.1.0-trace.log
zaakbrug-9.2.0-snapshot-trace.log
zaakbrug-9.1.0-debug.log
zaakbrug-9.2.0-snapshot.log

Pipeline Translate_SoapEndpointRouter_VrijeBerichten_GeefZaakdocumentBewerken.zip

Metadata

Metadata

Assignees

Labels

Type

Projects

Status

Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions