Hi - I'm calling a web service url with HTTP Request component. However i have to generate the soap headers manually. Its working fine in postman. But now to make it work in dwl i'm facing transformation issue while concatenating xml paylod with soap headers.
payload:
<?xml version='1.0' encoding='UTF-8'?>
<man:submitDocument xmlns:man="http://www.t.com/ws/integration/toolkit/2011/05/management">
<Document xmlns:ns2="http://www.t.com/ws/integration/toolkit/2011/05" ns2:name="">
<Attributes>
<Attribute name="locale">en</Attribute>
<Attribute name="largegraph">true</Attribute>
<Attribute name="mode">T-XML</Attribute>
<Attribute name="version">http://www.t.com/ws/tee800/2009/01</Attribute>
</Attributes>
<Content>
<ExportQuery xmlns:ns1="http://www.t.com/ws/so800/2009/01" ns1:name="">
<quer:query xmlns:quer="http://www.t.com/ws/integration/query" alias="Query752BAE88-55BD-11E2-8B1D-CDAFDC756D0C" preventDuplicates="false" projectedClass="Application">
<quer:subQueries/>
<quer:projections>
<quer:projection alias="FirstName">
<quer:field path="Candidate,FirstName"/>
</quer:projection>
<quer:projection alias="MiddleName">
<quer:field path="Candidate,MiddleInitial"/>
</quer:projection>
<quer:projection alias="LastName">
<quer:field path="Candidate,LastName"/>
</quer:projection>
<quer:projection alias="IsSubmissionExpired">
<quer:field path="Applications,IsSubmissionExpired"/>
</quer:projection>
</quer:projections>
<quer:projectionFilterings/>
<quer:filterings>
<quer:filtering>
<quer:or>
<quer:equal>
<quer:field path="CSWLatestStep,Name"/>
<quer:string>Pre-Employment Process</quer:string>
</quer:equal>
<quer:equal>
<quer:field path="CSWLatestStep,Name"/>
<quer:string>Terminal Pre-Employment Process</quer:string>
</quer:equal>
</quer:or>
</quer:filtering>
<quer:filtering>
<quer:equal>
<quer:field path="CSWLatestStatus,Name"/>
<quer:string>Move to Hired</quer:string>
</quer:equal>
</quer:filtering>
<quer:filtering>
<quer:equal>
<quer:field path="Candidate,InternalApplication"/>
<quer:string>0</quer:string>
</quer:equal>
</quer:filtering>
</quer:filterings>
<quer:sortings/>
<quer:sortingFilterings/>
<quer:groupings/>
<quer:joinings/>
</quer:query>
</ExportQuery>
</Content>
</Document>
</man:submitDocument>
dwl
%dw 2.0
output application/xml
var username = "test"
var password = "test"
var soapPayload = read('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" soap:mustUnderstand="1"><wsse:UsernameToken wsu:Id="Username"><wsse:Username>' ++ username as String ++ '</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">' ++ password as String ++ '</wsse:Password></wsse:UsernameToken></wsse:Security><add:Action xmlns:add="http://www.w3.org/2005/03/addressing">http://www.t.com/ws/integration/toolkit/2005/07/action/export</add:Action><add:ReplyTo xmlns:add="http://www.w3.org/2005/03/addressing"><add:Address>http://www.t.com/ws/integration/toolkit/2005/07/addressing/queue</add:Address></add:ReplyTo><add:MessageID xmlns:add="http://www.w3.org/2005/03/addressing">RE</add:MessageID></soap:Header><soap:Body>' ++ payload ++ '</soap:Body></soap:Envelope>', "application/xml")
---
soapPayload
error:
You called the function '++' with these arguments:
1: String ("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soa...)
2: Object (do {ns man http://www.t.com/ws/integration/toolkit/2011/05/management---{man#...)
But it expects one of these combinations:
(Array, Array)
(Date, Time)
(Date, LocalTime)
(Date, TimeZone)
(LocalDateTime, TimeZone)
(LocalTime, Date)
(LocalTime, TimeZone)
(Object, Object)
(String, String)
(Time, Date)
(TimeZone, LocalDateTime)
(TimeZone, Date)
(TimeZone, LocalTime)
6| var soapPayload = read('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" soap:mustUnderstand="1"><wsse:UsernameToken wsu:Id="Username"><wsse:Username>' ++ username as String ++ '</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">' ++ password as String ++ '</wsse:Password></wsse:UsernameToken></wsse:Security><add:Action xmlns:add="http://www.w3.org/2005/03/addressing">http://www.t.com/ws/integration/toolkit/2005/07/action/export</add:Action><add:ReplyTo xmlns:add="http://www.w3.org/2005/03/addressing"><add:Address>http://www.t.com/ws/integration/toolkit/2005/07/addressing/queue</add:Address></add:ReplyTo><add:MessageID xmlns:add="http://www.w3.org/2005/03/addressing">RE</add:MessageID></soap:Header><soap:Body>' ++ payload ++ '</soap:Body></soap:Envelope>', "application/xml")
^^^^
Trace:
at main::++ (line: 6, column: 19)
at main::++ (line: 6, column: 392)
at main::++ (line: 6, column: 414)
can someone help me out pls.
#Mule 4​ #DataWeave 2​ #soap #WEB SERVICES​
Below script will help you.
%dw 2.0
output application/xml
var username = "test"
var password = "test"
var soapPayload = read('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" soap:mustUnderstand="1"><wsse:UsernameToken wsu:Id="Username"><wsse:Username></wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"></wsse:Password></wsse:UsernameToken></wsse:Security><add:Action xmlns:add="http://www.w3.org/2005/03/addressing">http://www.t.com/ws/integration/toolkit/2005/07/action/export</add:Action><add:ReplyTo xmlns:add="http://www.w3.org/2005/03/addressing"><add:Address>http://www.t.com/ws/integration/toolkit/2005/07/addressing/queue</add:Address></add:ReplyTo><add:MessageID xmlns:add="http://www.w3.org/2005/03/addressing">RE</add:MessageID></soap:Header><soap:Body></soap:Body></soap:Envelope>', "application/xml")
---
soapPayload update {
case .Envelope.Header.Security.UsernameToken.Username -> username
case .Envelope.Header.Security.UsernameToken.Password -> password
case .Envelope.Body -> payload
}