I am having issues with creating a request document for the following webService call. here is what I did till now.
- genarated a webService connector using the WSDL provided to me.(Tx.wsdl)
- I need to call the webservice using the xml file provided to me.(tx.xml)
- I used XmlStringToXMLNode
XMLNodeToDocument services and created the document and gave the document as an input to the Object specified in the webservice connector.
I am getting an exception that XML file is not well formed.
PLease let me know what Am I doing wrong.
The WSDL looks valid, although its request message is wide open and can apparently accept any XML string. That is a poor excuse for a service contract in my opinion. Why bother with a WSDL if it provides no value in terms of describing what inputs are required?
The Tx.xml is well formed, but because it refers to a schemaLocation on a local file system, it can’t be validated. You can remove the schemaLocation attribute or change it to point to a URL that is available to both sender and receiver.
Thank you for the quick reply. I am just wondering how would the SOAP request look for this call, Since the input of the webservice call is Object Should i be converting the xml data to document and then submit that to the webService connector?
What is the Object type/name you have in the Service Input?
You don’t have to convert xmldata to document,just map the node itself after your first step, if the WS connnector is expecting a node Object?? and not a IS Document…
Use search functionality in this forum,there are lot of SOAP-MSG/Doc literal subject threads that might be helpful to you in a faster way…
The reason the web service connector generated an object for the input is that the provider’s WSDL defines the input message as an xml “any” meaning that the request can be any well-formed blob of XML.
You can probably modify the generated doc type to use a string variable instead of an object or perhaps just map an XML string to the object.
Again, this is a horrible WSDL. I’m not surprised that the fragile Web Service Connector has trouble with it.
If I were you I would only use the WSC-generated code as an example and instead create a new Flow to construct the soap request and post it to the provider’s endpoint URL using pub.client:soapHTTP.
Since their WSDL is so useless, the provider should supply many sample SOAP requests to show you how to use their so-called “service”.
Thank you for all the support extended. I have found a resolution to the problem. I have to investigate the rot cause of why they have defined the wsdl like that. it looks like they have created these wsdls after they had an issue with db2 database that it interacts with. DB2 is basically expecting a blob data for the request and the response is also send out in the similar fashion.
I took the examples that they gave and generated a sample documnt type using the accord schema defination and utilized it for the request and I am able to get responses back. creating a document type from scratch is the most frustrating part of the whole integration as the acord schemas are pretty vague.
Thanks for all the support
New issue that I have now is to create a document type defination for the XML file that I am sending to the invoke the webService connector. I did XmlString to XMLNode and XMLNode to DOcument and created a document type for the XML file. I then used the document type and created the necessary XML string, which is passed as input to webService connecter and it failed saying that “SOAP Body Entries must have a namespace name”. I have defined the NS tab and checked the xml string visually and found no difference. Am I missing any pieces here.
The easiest way is to rename the top level of your document type with a prefix and then associate that prefix with a namespace by populating the nsDecls parameter.
YOU MAY WANT TO TRY pub.soap.utils:stringToSoapData
I am confused Can you explain me a bit more on this one. I am attaching a sample file along with this and I would like to have a IS document type defined in the Developer for the file so that I can add the inputs. I changed the document structure as you mentioned in the previous reply. by adding a new node on top of everything as
Here are the steps that I performed.
Created a document type and added the Name space prefix tns1 to the root element in the XML
added the name space “http://webservices.life.fsg.csc.com” in the XML name space of the document Type
Added Nsdecl as tns1=http://webservices.life.fsg.csc.com in the step DocumentToXmlString and passed the Xml data as an input to the webService.
It is throwing me com.wm.app.b2b.server.ServiceException: [ISS.0088.9142] Invalid Body Entry. SOAP Body Entries must have a namespace name. error
What component is throwing the Invalid Body Entry error? Is it the generated Flow of the web service connector or the service itself? Can you pasted a snapshot of the Flow throwing the exception?
Also, can you post the XML string created from your pub.xml:documentToXMLString call?
here is the XMl String that is generated by the pub.xml:documentToXMLString.
I am attaching two attachments one is the original request for which I am getting response. I need to create a IS document type for this(Testxml.xml).
The document that is generated by the flow pub.xml:documentToXMLString is also attached(generatedXml.xml).
i am also attaching the IS document Type that I have built. please take a look at it.
The generated XML string is not namespace qualified. That means that although the root node tns1:TXLife has a prefix “tnx1” it is missing an xmlns attribute that associates that prefix with a namespace.
You do that on the pub.xml:documentToXMLString call by populating the nsDecls input parameter with the prefix “tns1” and the namespace name that you want to use such as “http://mycompany.com/xml/foo”.
If done correctly, your resulting string would look something like this: