Skip to main content

#SOAP0 discutindo

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​ 

3 respostas
  1. 8 de dez. de 2022, 02:00

    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

    }

0/9000

i'm consuming a SOAP web service with basic auth. Able to perform the operation in SOAP UI but when i tried to consume the same in Mule 4 its giving me Couldn't parse stream error.

 

Can someone assist me. i'm stuck here.

 

Note: Tooling instance is running when i checked the status

Studio Version: Version: 7.3.4

 

Error:

org.apache.cxf.phase.PhaseInterceptorChain: Interceptor for {http://client.internal.soap.mule.org/}ProxyService#{http://client.internal.soap.mule.org/}invoke has thrown exception, unwinding now

java.lang.RuntimeException: Couldn't parse stream.

at org.apache.cxf.staxutils.StaxUtils.createXMLStreamReader(StaxUtils.java:1729) ~[cxf-core-3.3.1.jar:3.3.1]

at org.apache.cxf.interceptor.StaxInInterceptor.handleMessage(StaxInInterceptor.java:127) ~[cxf-core-3.3.1.jar:3.3.1]

at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) ~[cxf-core-3.3.1.jar:3.3.1]

at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:826) ~[cxf-core-3.3.1.jar:3.3.1]

at org.mule.soap.internal.interceptor.MessageDispatcherInterceptor.handleRequestResponse(MessageDispatcherInterceptor.java:86) ~[mule-soap-engine-1.1.1.jar:?]

at org.mule.soap.internal.interceptor.MessageDispatcherInterceptor.handleMessage(MessageDispatcherInterceptor.java:74) ~[mule-soap-engine-1.1.1.jar:?]

at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) ~[cxf-core-3.3.1.jar:3.3.1]

at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:531) ~[cxf-core-3.3.1.jar:3.3.1]

at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:440) ~[cxf-core-3.3.1.jar:3.3.1]

at org.mule.soap.internal.client.AbstractSoapCxfClient.invoke(AbstractSoapCxfClient.java:112) ~[mule-soap-engine-1.1.1.jar:?]

at org.mule.soap.internal.client.AbstractSoapCxfClient.consume(AbstractSoapCxfClient.java:98) ~[mule-soap-engine-1.1.1.jar:?]

at org.mule.extension.ws.internal.connection.WscSoapClient.consume(WscSoapClient.java:46) ~[mule-wsc-connector-1.3.1-mule-plugin.jar:?]

at org.mule.extension.ws.internal.ConsumeOperation.consume(ConsumeOperation.java:88) ~[mule-wsc-connector-1.3.1-mule-plugin.jar:?]

 

#Mule 4​ #SOAP #WSC

0/9000