Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Join us in Bucharest on Sept 18th for Qlik's AI Reality Tour! Register Now
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

XML file input to an operation of SOAP web service using tESBConsumer

Hi all,
I have to call a web service with this operation "call(string):string". This operation takes as input a string. Right?
But the input must be a XML file like this:
  <?xml version="1.0"?>
<Input>
<OpenSession>
<input1>hello</input1>
<input2>world</input2>
<input3>bye</input3>
</OpenSession>
</Input>

So I need to pass the XML file as text to tESBConsumer...
The flow is this:

tFixedInputFlow is linked to tMap component. The tMap component is sets in this way:

with expression:
TalendString.replaceSpecialCharForXML("<?xml version=\"1.0\" ?><Input><OpenSession><input1>")+ row3.input1+TalendString.replaceSpecialCharForXML("</input1><input2>")+row3.input2+TalendString.replaceSpecialCharForXML("</input2><input3>")+row3.input3+TalendString.replaceSpecialCharForXML("</input3></OpenSession></Input>")

But I get a compilation error "type mismatch: impossible convert from a String to a Document" on tESBConsumer, though the operation should take a string....
I'm new to Taled, so I don't now if this is the correctly way to do what I want. If there are other way...please tell me.
Thanks all.
0683p000009MEHg.jpg 0683p000009MEHD.jpg
Labels (3)
9 Replies
krishna_g
Contributor II
Contributor II

Hi Vincentdj,
Use txmlmap instead of tmap..Go with the following link for your reference
http://www.talendforge.org/tutorials/tutorial.php?idTuto=94.

Thanks,
Anonymous
Not applicable
Author

Hi
now I use tXMLMap as described. The job connects to webservice, but I get this error:
Fault {string: org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.; code:{http://schemas.xmlsoap.org/soap/envelope/}Server.userException; detail:<?xml version="1.0" encoding="UTF-8"?>
Anonymous
Not applicable
Author

Hi
Do you really need tESBConsumer component to call your common SOAP web service?
The operation "call(string):string" requires a string input, you can use a tWriteXMLField to output a string with XML format, and use tWebservice or tSOAP component to call your SOAP webservice, the job looks like:
tFixedFlowInput--main--tWriteXMLField--main--tWebserviceInput(or tSOAP)--maign-->tLogRow
Refer to the component manual of tWriteXMLField component:
https://help.talend.com/search/all?query=tWriteXMLField&content-lang=en
Shon
Anonymous
Not applicable
Author

Hi,
I tried with tWriteXMLField, both with tWebService and tSoap, but now I get a different error for each way.
with tWebService:
Inizio job provaforumwebser: 09:25 28/05/2014.
connecting to socket on port 3507
connected
Exception in component tWebService_1
java.lang.NullPointerException
at org.apache.cxf.common.util.Compiler.useJava6Compiler(Compiler.java:190)
at org.apache.cxf.common.util.Compiler.compileFiles(Compiler.java:144)
at org.apache.cxf.common.util.Compiler.compileFiles(Compiler.java:139)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.compileJavaSrc(DynamicClientFactory.java:599)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:367)
at org.talend.webservice.helper.ServiceInvokerHelper.createClient(ServiceInvokerHelper.java:143)
at org.talend.webservice.helper.ServiceInvokerHelper.getClient(ServiceInvokerHelper.java:134)
at org.talend.webservice.helper.ServiceInvokerHelper.invoke(ServiceInvokerHelper.java:235)
at test.provaforumwebser_0_1.provaforumwebser.tWriteXMLField_1_InProcess(provaforumwebser.java:1372)
at test.provaforumwebser_0_1.provaforumwebser$1ThreadXMLField_tWriteXMLField_1_Out.run(provaforumwebser.java:559)
disconnected
Job provaforumwebser ended at 09:25 28/05/2014.

while with tSOAP:
Inizio job provaforum: 09:46 28/05/2014.
connecting to socket on port 3663
connected
||<soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>soapenv 0683p000009M9p6.pngerver.userException</faultcode><faultstring>org.xml.sax.SAXException: Bad envelope tag: Input</faultstring><detail><ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">appvmtest.sangiovannieruggi.it</ns1:hostname></detail></soapenv:Fault>
disconnected
Job provaforum ended at 09:46 28/05/2014.

Please, I tried in three way...but no work
Anonymous
Not applicable
Author

Hi
Exception in component tWebService_1
java.lang.NullPointerException
at org.apache.cxf.common.util.Compiler.useJava6Compiler(Compiler.java:190)

The tWebservice components requires a JDK to work. Please select a JDK java.exe in the Preferences/Talend/Java interpreter in the studio. It's not a bug, see this jira issue:
https://jira.talendforge.org/browse/TDI-25565
org.xml.sax.SAXException: Bad envelope tag: Input

It looks like you don't write a right SOAP message, you don' escape the double quotes with backslash "\", here I attach an example screenshot.
Shong
0683p000009MDzU.png
Anonymous
Not applicable
Author

I
have selected JDK java.exe, but now get this error:
Exception in component tWebService_1
java.lang.IllegalStateException: no source files
at com.sun.tools.javac.main.Main.error(Main.java:173)
at com.sun.tools.javac.main.Main.compile(Main.java:397)
at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:132)
at org.apache.cxf.common.util.Compiler.internalJava6Compile(Compiler.java:232)
at org.apache.cxf.common.util.Compiler.useJava6Compiler(Compiler.java:194)
at org.apache.cxf.common.util.Compiler.compileFiles(Compiler.java:144)
at org.apache.cxf.common.util.Compiler.compileFiles(Compiler.java:139)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.compileJavaSrc(DynamicClientFactory.java:599)
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:367)
at org.talend.webservice.helper.ServiceInvokerHelper.createClient(ServiceInvokerHelper.java:143)
at org.talend.webservice.helper.ServiceInvokerHelper.getClient(ServiceInvokerHelper.java:134)
at org.talend.webservice.helper.ServiceInvokerHelper.invoke(ServiceInvokerHelper.java:235)
at test.provaforumwebser_0_1.provaforumwebser.tWriteXMLField_1_InProcess(provaforumwebser.java:1372)
at test.provaforumwebser_0_1.provaforumwebser$1ThreadXMLField_tWriteXMLField_1_Out.run(provaforumwebser.java:559)
disconnected
Job provaforumwebser ended at 10:47 28/05/2014.

while with tSOAP, I use a message from the input schema, because the flow is TFixedFowInput->tWriteXMLFiedl->TSOAP->tLogRow, so I use the output column of tWriteXML Field.
The wsdl is this (the soapAction is empty):
<wsdl:definitions xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://-----/JBFService" xmlns:intf="http://-----/JBFService" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://-----/JBFService">
<wsdl:message name="callResponse">
<wsdl 0683p000009MAB6.pngart name="callReturn" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="callRequest">
<wsdl 0683p000009MAB6.pngart name="xml" type="xsd:string"/>
</wsdl:message>
<wsdl 0683p000009MAB6.pngortType name="DefaultWebService">
<wsdl 0683p000009MA5A.pngperation name="call" parameterOrder="xml">
<wsdl:input message="impl:callRequest" name="callRequest"/>
<wsdl 0683p000009MA5A.pngutput message="impl:callResponse" name="callResponse"/>
</wsdl 0683p000009MA5A.pngperation>
</wsdl 0683p000009MAB6.pngortType>
<wsdl:binding name="JBFServiceSoapBinding" type="impl 0683p000009MACJ.pngefaultWebService">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl 0683p000009MA5A.pngperation name="call">
<wsdlsoap 0683p000009MA5A.pngperation soapAction=""/>
<wsdl:input name="callRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://services.PSGExt" use="encoded"/>
</wsdl:input>
<wsdl 0683p000009MA5A.pngutput name="callResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://------/JBFService" use="encoded"/>
</wsdl 0683p000009MA5A.pngutput>
</wsdl 0683p000009MA5A.pngperation>
</wsdl:binding>
<wsdl:service name="DefaultWebServiceService">
<wsdl 0683p000009MAB6.pngort binding="impl:JBFServiceSoapBinding" name="JBFService">
<wsdlsoap:address location="http://-----/JBFService"/>
</wsdl 0683p000009MAB6.pngort>
</wsdl:service>
</wsdl:definitions>
Anonymous
Not applicable
Author

someone can help me? please
Anonymous
Not applicable
Author

I would use SoapUI to find out what your complete message needs to look like in order to not generate any faults. Once you have a working example in SoapUI, you can build that message using the tXMLMap/tESBConsumer.
Anonymous
Not applicable
Author

Can anyone offer some tips please? I'm trying to follow the example posted in this thread
This is how a request must be made to the webservice , it's waiting for an xml string inside <XMLIN>
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="" xmlns:xsi="" xmlns:xsd=""><soap:Body><logicarxft xmlns=""><XMLIN>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;&lt;Transaction xmlns:xsi="" Target="Prod" TimeStamp="2013-10-30T09:57:10+01:00" xsi:type="TransactionRequestType"&gt;&lt;Control&gt;&lt;Requester Code="XXXX"&gt;&lt;Agency&gt;&lt;Code Value="ADMIN" /&gt;&lt;Agent Uid="XXXX" Pwd="XXXX" /&gt;&lt;/Agency&gt;&lt;/Requester&gt;&lt;/Control&gt;&lt;Action Purpose="Get" Code="FCLIENTS" /&gt;&lt;Code Owner="XXXX" /&gt;&lt;dynamic-array service="ListeTRi" operation="MajTri"&gt;&lt;Codes&gt;&lt;Code Value="700004" /&gt;&lt;/Codes&gt;&lt;/dynamic-array&gt;&lt;/Transaction&gt;</XMLIN></logicarxft></soap:Body></soap:Envelope>


I put the request in the tFixedFlowInput , a single table colum XMLIN with the value
"&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;&lt;Transaction xmlns:xsi="" Target="Prod" TimeStamp="2013-10-30T09:57:10+01:00" xsi:type="TransactionRequestType"&gt;&lt;Control&gt;&lt;Requester Code="XXXX"&gt;&lt;Agency&gt;&lt;Code Value="ADMIN" /&gt;&lt;Agent Uid="XXXX" Pwd="XXXX" /&gt;&lt;/Agency&gt;&lt;/Requester&gt;&lt;/Control&gt;&lt;Action Purpose="Get" Code="FCLIENTS" /&gt;&lt;Code Owner="XXXX" /&gt;&lt;dynamic-array service="ListeTRi" operation="MajTri"&gt;&lt;Codes&gt;&lt;Code Value="700004" /&gt;&lt;/Codes&gt;&lt;/dynamic-array&gt;&lt;/Transaction&gt;"

This is how my tXMLMAP looks like
onedrive.live.com/redir?resid=77E8039C68438481!444&authkey=!AAL_bJwdrc6zE58&v=3&ithint=photo%2cpng
 
I'm getting this error
 Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    XML_API_tXMLMap_1 cannot be resolved to a type
    XML_API_tXMLMap_1 cannot be resolved to a type
    Syntax error, insert ";" to complete BlockStatements
    at alim_logicar.esbconsumerlogicar_0_1.esbconsumerlogicar.tFixedFlowInput_1Process(esbconsumerlogicar.java:1501)
    at alim_logicar.esbconsumerlogicar_0_1.esbconsumerlogicar.runJobInTOS(esbconsumerlogicar.java:2723)
    at alim_logicar.esbconsumerlogicar_0_1.esbconsumerlogicar.main(esbconsumerlogicar.java:2580)