Search code examples
xpathmulemule-studio

Execution of xpath failed in Mulesoft


My Mulesoft process is making a call to SuccessFactors API. The /LOGIN call results in a response like this.

    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
       <S:Body>
          <loginResponse xmlns="urn:sfobject.sfapi.successfactors.com" xmlns:ns2="urn:fault.sfapi.successfactors.com">
             <result>
                <sessionId>9A95*******A2631B8E820894CA.ps8bsfapi52t</sessionId>
                <msUntilPwdExpiration>9223372036854775807</msUntilPwdExpiration>
             </result>
          </loginResponse>
       </S:Body>
    </S:Envelope>

I've the following name spaces declared in my namespace manager

            <mulexml:namespace-manager>
                <mulexml:namespace prefix="S" uri="http://schemas.xmlsoap.org/soap/envelope/"/>
                <mulexml:namespace prefix="ns2" uri="urn:fault.sfapi.successfactors.com"/>
                <mulexml:namespace prefix="" uri="urn:sfobject.sfapi.successfactors.com"/>
            </mulexml:namespace-manager>

I want to read the sessionId into a mule session variable.

    <set-session-variable variableName="SESSION" value="#[xpath('//S:Envelope/S:Body/loginResponse/result/sessionId').text]" doc:name="Get Session from Login"/>

But, upon execution I end up in this

        <faultstring>Execution of the expression "xpath('//S:Envelope/S:Body/loginResponse/result/sessionId').text" failed. (org.mule.api.expression.ExpressionRuntimeException).</faultstring>

The XPath checks out well on any other tool but for Mulesoft.


Solution

  • Use XPATH with * as namespace, so you dont need to bother about namespace.

    #[xpath('//*:Envelope/*:Body/*:loginResponse/*:result/*:sessionId').text]
    

    xpath is deprecated new version of mule.

    Update:

    #[xpath3('//*:Envelope/*:Body/*:loginResponse/*:result/*:sessionId')]
    

    Hope this helps.