2

OK I was asked to create a new question so here goes.

I want to extract the values of variables in a SOAP request

I send a SOAP request via SoapUI to a mule flow

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://sms.csir.co.za/">
 <soapenv:Header/>
 <soapenv:Body>
  <ws:sendTextMessage>
    <sender>Jaco</sender>
    <to>08277899863</to>
    <text>Hallo Jaco how are you</text>
  </ws:sendTextMessage>
 </soapenv:Body>
</soapenv:Envelope>

Here is the mule flow that works fine.

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.4.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">
    <flow name="jacoFlow1" doc:name="jacoFlow1">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8090" doc:name="HTTP"/>
        <object-to-string-transformer doc:name="Object to String"/>
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>
    </flow>
</mule>

As soon as I change the logger to this to find the value

 <logger message="#[xpath('//soapenv:Envelope/soapenv:Body/ws:sendTextMessage/text/text()').text]" level="INFO" doc:name="Logger"/>

I get this error

Execution of the expression "xpath('//soapenv:Envelope/soapenv:Body/ws:sendTextMessage/text/text()').text" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: String
Jaco Fourie
  • 112
  • 3
  • 11
  • The book. Mule in Action states this "xpath(xPathExpression)—Applies the XPath expression to the in-flight message payload (which must be an XML document or a DOM instance)." I have tried to convert the payload to XML and DOM but get the same error. – Jaco Fourie Mar 12 '14 at 13:37
  • Try [this](https://github.com/skjolber/mule-module-dxpath) for more advanced XPath expressions – ThomasRS Mar 14 '14 at 14:28

1 Answers1

4

Since your XPath expression uses custom namespaces (soapenv and ws) you need to declare them in an expression manager element added to your config. See: http://www.mulesoft.org/documentation/display/current/XML+Namespaces

<mulexml:namespace-manager>
    <mulexml:namespace prefix="soapenv"
                       uri="http://schemas.xmlsoap.org/soap/envelope/"/>
    ...
</mulexml:namespace-manager>
David Dossot
  • 33,403
  • 4
  • 38
  • 72