I have a VDB connecting to a web service using an XML-Relational Soap Connector. The query returns back results for ResponseIn and ResponseOut, but all the other columns are empty. I have seen other posts on this site regarding the same issue. Suggestions were made regarding XPath, Name in Source and Namespace Prefix values in the VDB Data Source, but I do not understand how they should be changed. I was wondering if somebody could provide a snippet from a WSDL file, and what the corresponding XPath, Name in Source and Namespace Prefix values should be for the VDB datasource.
I want to preface my response with a warning that there are important changes coming in Teiid 7.0 in regards to how XML is treated by Teiid and Teiid Designer. You should take a look at the archives of the teiid-dev mailing list and the associated Jiras to get a sense of the changes. Any pre 7.0 XML based integration will need some level of rework for 7.0.
That said, in the older versions of Teiid this is how the model properties worked.
Example web service; using CapitalCity operation
Each table with the XMLSOAPConnectorExtensions applied has a property call Namespace Prefixes. The content of this property is used to map the namespace prefixes used within the Column XPaths to resolve the correct namespace for and XML Element. Here's a sample value.
Each Table, and each Column in the tables has properties for 'Name in Source'. The value of this column is set to an XPath to define a nodeset in the case of a table, or an Element or Attrubute in the case of a column. Here are some Samples.
Name in Source for the response table to define the node set is:
Name in Source for the CapitalCity Result is:
You could have defined them this way as well:
Hope that helps.
I tried as you suggested, but still am getting a response with null values except for ResponseIn and ResponseOut. The query is being executed through the VDB excecute option. I have put debugging into the web service, so I know it is getting the request and returning a response. I am including some information from my WSDL and Teiid Desiger (6.3) data source to see if that gives any clues:
Snippet from my WSDL file:
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="ExampleWebService" targetNamespace="http://com.klk.ws/exampleWebService" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://com.klk.ws/exampleWebService" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<part name="arg0" type="xsd:string">
<part name="return" type="xsd:string">
Teiid Designer (6.3) data source
Namespace Prefixes = xmlns:tns='http://com.klk.ws/exampleWebService'
XPath for Input = blank
Name = ExampleWebService_processResponse
Name In Source = /tns:processResponse
XPath for Input Parameter = blank
Name = return
Name In Source = tns:return/text() Have also tried with just return/text()
from "exampleVDB"."exampleWsdl.ExampleWebService.process.ExampleWebService_process" t1,
and t1.ResponseOut = t2.ResponseIn;
John.. I finally got the inquiry to work. I changed the "Name in Source" field for the response field "return" to "tns:processResponse/return/text()" and then was able to get the value to show up in my vdb query. Thanks so much for all your help. Seeing the raw soap response and using your other suggestions helped to figure it out.