I'm trying to get soapUI to recognize the types in my ServiceStack soap service. I'm sure that I'm doing something wrong in the setup of the service. Here is the WSDL:
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions name="Soap12"
targetNamespace="https://something.com/service/types"
xmlns:svc="https://something.com/service/types"
xmlns:tns="https://something.com/service/types"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
xmlns:wsa10="http://www.w3.org/2005/08/addressing"
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex">
<wsdl:types>
<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="anyType" nillable="true" type="xs:anyType" />
<xs:element name="anyURI" nillable="true" type="xs:anyURI" />
<xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
<xs:element name="boolean" nillable="true" type="xs:boolean" />
<xs:element name="byte" nillable="true" type="xs:byte" />
<xs:element name="dateTime" nillable="true" type="xs:dateTime" />
<xs:element name="decimal" nillable="true" type="xs:decimal" />
<xs:element name="double" nillable="true" type="xs:double" />
<xs:element name="float" nillable="true" type="xs:float" />
<xs:element name="int" nillable="true" type="xs:int" />
<xs:element name="long" nillable="true" type="xs:long" />
<xs:element name="QName" nillable="true" type="xs:QName" />
<xs:element name="short" nillable="true" type="xs:short" />
<xs:element name="string" nillable="true" type="xs:string" />
<xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
<xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
<xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
<xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
<xs:element name="char" nillable="true" type="tns:char" />
<xs:simpleType name="char">
<xs:restriction base="xs:int" />
</xs:simpleType>
<xs:element name="duration" nillable="true" type="tns:duration" />
<xs:simpleType name="duration">
<xs:restriction base="xs:duration">
<xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
<xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
<xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
</xs:restriction>
</xs:simpleType>
<xs:element name="guid" nillable="true" type="tns:guid" />
<xs:simpleType name="guid">
<xs:restriction base="xs:string">
<xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
</xs:restriction>
</xs:simpleType>
<xs:attribute name="FactoryType" type="xs:QName" />
<xs:attribute name="Id" type="xs:ID" />
<xs:attribute name="Ref" type="xs:IDREF" />
</xs:schema>
</wsdl:types>
<wsdl:message name="IsAvailableRequestIn">
<wsdl:part name="parameters" element="tns:IsAvailableRequest" />
</wsdl:message>
<wsdl:message name="IsAvailableRequestOut">
<wsdl:part name="parameters" element="tns:IsAvailableRequestResponse" />
</wsdl:message>
<wsdl:portType name="ISyncReply">
<wsdl:operation name="IsAvailableRequest">
<wsdl:input message="svc:IsAvailableRequestIn" />
<wsdl:output message="svc:IsAvailableRequestOut" />
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name="IOneWay">
</wsdl:portType>
<wsdl:binding name="WSHttpBinding_ISyncReply" type="svc:ISyncReply">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="IsAvailableRequest">
<soap:operation soapAction="https://something.com/service/types/IsAvailableRequest" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="WSHttpBinding_IOneWay" type="svc:IOneWay">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
</wsdl:binding>
<wsdl:service name="SyncReply">
<wsdl:port name="WSHttpBinding_ISyncReply" binding="svc:WSHttpBinding_ISyncReply">
<soap:address location="http://beta.something.com/service/soap12" />
</wsdl:port>
</wsdl:service>
<wsdl:service name="AsyncOneWay">
<wsdl:port name="WSHttpBinding_IOneWay" binding="svc:WSHttpBinding_IOneWay">
<soap:address location="http://beta.something.com/service/soap12" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Notice that it doesn't include the type information (I dunno, should it?) Here is the type schema:
<?xml version="1.0"?>
<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/SomethingWeb" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/SomethingWeb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="IsAvailableRequest">
<xs:sequence>
<xs:element minOccurs="0" name="ClientID" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Token" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="IsAvailableRequest" nillable="true" type="tns:IsAvailableRequest" />
<xs:complexType name="IsAvailableResponse">
<xs:sequence>
<xs:element minOccurs="0" name="Available" nillable="true" type="tns:ArrayOfAvailableData" />
<xs:element minOccurs="0" name="ClientID" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Location" nillable="true" type="tns:Location" />
<xs:element minOccurs="0" name="Message" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Request" nillable="true" type="tns:IsAvailableRequest" />
<xs:element minOccurs="0" name="ReturnCode" type="xs:int" />
<xs:element minOccurs="0" name="Token" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="IsAvailableResponse" nillable="true" type="tns:IsAvailableResponse" />
<xs:complexType name="ArrayOfAvailableData">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="AvailableData" nillable="true" type="tns:AvailableData" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfAvailableData" nillable="true" type="tns:ArrayOfAvailableData" />
<xs:complexType name="AvailableData">
<xs:sequence>
<xs:element minOccurs="0" name="Code" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Label" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="AvailableData" nillable="true" type="tns:AvailableData" />
<xs:complexType name="Location">
<xs:sequence>
<xs:element minOccurs="0" name="Result" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="Location" nillable="true" type="tns:Location" />
</xs:schema>
How do I get soapUI (and by extension, other java code) to understand my schema?
I just had this problem and sorted it out by adding a default namespace in AppHost via
SetConfig(new EndpointHostConfig {
WsdlServiceNamespace = "http://my.new.namespace.com/types",
});
And decorating my models with
[DataContract(Namespace = "http://my.new.namespace.com/types")]
More details here: https://github.com/ServiceStack/ServiceStack/wiki/SOAP-support
Related
I have a data set to fetch an XML document from a storage account. When I push that through and store it as a CSV (or JSON) (edited for clarity) in ADLS gen2 (edit) using either a Mapping Data Flow or just a regular pipeline activity I end up with a file containing only the first line of the document. Anyone who has been through this that can give me a tip on what I'm doing wrong?
The XML map looks like this if that helps:
<xs:element name="SAMPLE_XML">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="record">
<xs:complexType>
<xs:sequence>
<xs:element name="LABEL" type="xs:string" />
<xs:element name="AUFNR" type="xs:unsignedInt" />
<xs:element minOccurs="0" name="SYSST" />
<xs:element minOccurs="0" name="STTXT" type="xs:string" />
<xs:element name="STTXU" type="xs:string" />
<xs:element name="AUART" type="xs:string" />
<xs:element name="QMNUM" type="xs:string" />
<xs:element name="QMTXT" type="xs:string" />
<xs:element name="TPLNR" type="xs:string" />
<xs:element name="BEARB" type="xs:string" />
<xs:element name="EQUNR" type="xs:string" />
<xs:element name="INGPR" type="xs:string" />
<xs:element name="VAPLZ" type="xs:string" />
<xs:element name="GSTRP" type="xs:string" />
<xs:element name="GLTRP" type="xs:string" />
<xs:element name="ZZLTRMN" type="xs:string" />
<xs:element name="PRIOK" type="xs:string" />
<xs:element name="REVNR" type="xs:string" />
<xs:element name="ILART" type="xs:string" />
<xs:element name="KTEXT" type="xs:string" />
<xs:element name="UDATE_UTIME" type="xs:string" />
<xs:element name="VORNR" type="xs:string" />
<xs:element name="VSTTXT" type="xs:string" />
<xs:element name="ARBPL" type="xs:string" />
<xs:element name="ARBEI" type="xs:decimal" />
<xs:element name="ISMNW" type="xs:decimal" />
<xs:element name="AUFNT" />
<xs:element name="PROID" />
<xs:element name="ERNAM" type="xs:string" />
<xs:element name="ERDAT" type="xs:string" />
<xs:element name="AENAM" type="xs:string" />
<xs:element name="AEDAT" type="xs:string" />
<xs:element name="LTXA1" type="xs:string" />
<xs:element name="ANLZU" type="xs:string" />
<xs:element name="FSAVD" type="xs:string" />
<xs:element name="FSAVZ" type="xs:time" />
<xs:element name="FSEDD" type="xs:string" />
<xs:element name="FSEDZ" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
#MartinJaffer-MSFT in a comment to my question suggested I used a collectionReference in the mapping settings and that worked.
I hadn't used that as the description refers to JSON only. "Select or specify the JSONPath of a nested JSON array for cross-apply."
But yes, that worked as he said and problem solved. Thanks.
I am using a rental reservation webservice and it returns a xml response now I have to use that response in my site using php.
for xml you can check this page
https://www.jimpisoft.pt/Rentway_Internacional_Reservations_WS/getPriceQuote.asmx?op=PriceQuote
$xml = simplexml_load_string($response);
$json = json_encode($xml);
$arr = json_decode($json,true);
print_r($arr);
But it says XML Parsing Error: syntax error
I tried this as well
include 'xmlParser.class.php';
$oXmlParser = new xmlParser();
$asArray = $oXmlParser->xml2array($ssString);
$asArray1 = $oXmlParser->xml2array($ssString,'');
$asArray2 = $oXmlParser->xml2array($ssString,1,'');
$response14 = preg_replace("/(]*>)/", "$1$2$3", $asArray);
print_r($response14);
this is the xml
<soap:Envelope><soap:Body><StationDetailsResponse><StationDetailsResult><stationDetails><xs:schema id="StationDetails"><xs:element name="StationDetails" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"><xs:complexType><xs:choice minOccurs="0" maxOccurs="unbounded"><xs:element name="Table"><xs:complexType><xs:sequence><xs:element name="StationID" type="xs:string" minOccurs="0"/><xs:element name="Station" type="xs:string" minOccurs="0"/><xs:element name="Zone" type="xs:int" minOccurs="0"/><xs:element name="StationType" type="xs:int" minOccurs="0"/><xs:element name="StationTypeDescription" type="xs:string" minOccurs="0"/><xs:element name="Address" type="xs:string" minOccurs="0"/><xs:element name="WeekDayOpen" type="xs:string" minOccurs="0"/><xs:element name="WeekdayLunchIni" type="xs:string" minOccurs="0"/><xs:element name="WeekdayLunchFim" type="xs:string" minOccurs="0"/><xs:element name="WeekDayClose" type="xs:string" minOccurs="0"/><xs:element name="SaturDayOpen" type="xs:string" minOccurs="0"/><xs:element name="SaturdayLunchIni" type="xs:string" minOccurs="0"/><xs:element name="SaturdayLunchFim" type="xs:string" minOccurs="0"/><xs:element name="SaturDayClose" type="xs:string" minOccurs="0"/><xs:element name="SunDayOpen" type="xs:string" minOccurs="0"/><xs:element name="SundayLunchIni" type="xs:string" minOccurs="0"/><xs:element name="SundayLunchFim" type="xs:string" minOccurs="0"/><xs:element name="SunDayClose" type="xs:string" minOccurs="0"/><xs:element name="HolidayOpen" type="xs:string" minOccurs="0"/><xs:element name="HolidayLunchIni" type="xs:string" minOccurs="0"/><xs:element name="HolidayLunchFim" type="xs:string" minOccurs="0"/><xs:element name="HolidayClose" type="xs:string" minOccurs="0"/><xs:element name="AfterHour_Enable" type="xs:boolean" minOccurs="0"/><xs:element name="AfterHour_Weekday" type="xs:string" minOccurs="0"/><xs:element name="AfterHour_Saturday" type="xs:string" minOccurs="0"/><xs:element name="AfterHour_Sunday" type="xs:string" minOccurs="0"/><xs:element name="AfterHour_Holiday" type="xs:string" minOccurs="0"/><xs:element name="AfterHours_CheckOut" type="xs:boolean" minOccurs="0"/><xs:element name="AfterHours_CheckIn" type="xs:boolean" minOccurs="0"/><xs:element name="AfterHour_Extra" type="xs:string" minOccurs="0"/><xs:element name="Address1" type="xs:string" minOccurs="0"/><xs:element name="Address2" type="xs:string" minOccurs="0"/><xs:element name="PostalCode" type="xs:string" minOccurs="0"/><xs:element name="City" type="xs:string" minOccurs="0"/><xs:element name="Country" type="xs:int" minOccurs="0"/><xs:element name="Phone1" type="xs:string" minOccurs="0"/><xs:element name="Phone2" type="xs:string" minOccurs="0"/><xs:element name="Fax" type="xs:string" minOccurs="0"/><xs:element name="Email" type="xs:string" minOccurs="0"/><xs:element name="Latitude" type="xs:decimal" minOccurs="0"/><xs:element name="Longitude" type="xs:decimal" minOccurs="0"/><xs:element name="ResponsibleName" type="xs:string" minOccurs="0"/><xs:element name="ResponsiblePhone" type="xs:string" minOccurs="0"/><xs:element name="CellPhone" type="xs:string" minOccurs="0"/><xs:element name="StationAddInfo" type="xs:string" minOccurs="0"/><xs:element name="StationAddInfo1" type="xs:string" minOccurs="0"/><xs:element name="IsFlightInfoMandatory" type="xs:boolean" minOccurs="0"/><xs:element name="AfterHour_Weekday_Start" type="xs:string" minOccurs="0"/><xs:element name="AfterHour_Saturday_Start" type="xs:string" minOccurs="0"/><xs:element name="AfterHour_Sunday_Start" type="xs:string" minOccurs="0"/><xs:element name="AfterHour_Holiday_Start" type="xs:string" minOccurs="0"/><xs:element name="StationHoliday" msdata:DataType="System.Data.DataTable, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:anyType" minOccurs="0"/><xs:element name="Schedule" msdata:DataType="System.Data.DataTable, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:anyType" minOccurs="0"/></xs:sequence></xs:complexType></xs:element></xs:choice></xs:complexType></xs:element></xs:schema><diffgr:diffgram><StationDetails><Table diffgr:id="Table1" msdata:rowOrder="0"><StationID>ARN</StationID><Station>Arlanda airport </Station><Zone>9</Zone><StationType>2</StationType><StationTypeDescription>Airport</StationTypeDescription><Address>Elkraftsgatan 2 </Address><WeekDayOpen>00:00</WeekDayOpen><WeekdayLunchIni xml:space="preserve"> </WeekdayLunchIni><WeekdayLunchFim xml:space="preserve"> </WeekdayLunchFim><WeekDayClose>23:59</WeekDayClose><SaturDayOpen>00:00</SaturDayOpen><SaturdayLunchIni xml:space="preserve"> </SaturdayLunchIni><SaturdayLunchFim xml:space="preserve"> </SaturdayLunchFim><SaturDayClose>23:59</SaturDayClose><SunDayOpen>00:00</SunDayOpen><SundayLunchIni xml:space="preserve"> </SundayLunchIni><SundayLunchFim xml:space="preserve"> </SundayLunchFim><SunDayClose>23:59</SunDayClose><HolidayOpen>00:00</HolidayOpen><HolidayLunchIni xml:space="preserve"> </HolidayLunchIni><HolidayLunchFim xml:space="preserve"> </HolidayLunchFim><HolidayClose>23:59</HolidayClose><AfterHour_Enable>false</AfterHour_Enable><AfterHours_CheckOut>true</AfterHours_CheckOut><AfterHours_CheckIn>false</AfterHours_CheckIn><Address1>Elkraftsgatan 2</Address1><Address2/><PostalCode>195 60</PostalCode><City>Arlandastad</City><Country>203</Country><Phone1>+46 8 591 150 78</Phone1><Phone2>+46 8 591 150 55</Phone2><Fax/><Email>sweden#addcar.com</Email><Latitude>59.36550</Latitude><Longitude>17.53400</Longitude><ResponsibleName>Esa Palmborg</ResponsibleName><ResponsiblePhone>+46 8 591 150 78</ResponsiblePhone><CellPhone/><StationAddInfo>Please call +46 8 591 150 55 for pickup at your terminal, Go to bus stand 7 and wait for the "Flygplatsparkering/addCar" shuttle bus.</StationAddInfo><StationAddInfo1>Please call +46 8 591 150 55 for pickup at your terminal, Go to bus stand 7 and wait for the "Flygplatsparkering/addCar" shuttle bus.</StationAddInfo1><IsFlightInfoMandatory>false</IsFlightInfoMandatory><AfterHour_Weekday_Start xml:space="preserve"> </AfterHour_Weekday_Start><AfterHour_Saturday_Start xml:space="preserve"> </AfterHour_Saturday_Start><AfterHour_Sunday_Start xml:space="preserve"> </AfterHour_Sunday_Start><AfterHour_Holiday_Start xml:space="preserve"> </AfterHour_Holiday_Start><StationHoliday><xs:schema id="NewDataSet"><xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="StationHoliday" msdata:UseCurrentLocale="true"><xs:complexType><xs:choice minOccurs="0" maxOccurs="unbounded"><xs:element name="StationHoliday"><xs:complexType><xs:sequence><xs:element name="Date" type="xs:string" minOccurs="0"/><xs:element name="Holiday_description" type="xs:string" minOccurs="0"/><xs:element name="OpenHour" type="xs:string" minOccurs="0"/><xs:element name="CloseHour" type="xs:string" minOccurs="0"/></xs:sequence></xs:complexType></xs:element></xs:choice></xs:complexType></xs:element></xs:schema><diffgr:diffgram><DocumentElement><StationHoliday diffgr:id="StationHoliday1" msdata:rowOrder="0"><Date>2016-06-19</Date><Holiday_description>Midsummer</Holiday_description><OpenHour>00:00</OpenHour><CloseHour>23:59</CloseHour></StationHoliday><StationHoliday diffgr:id="StationHoliday2" msdata:rowOrder="1"><Date>2016-06-20</Date><Holiday_description>Midsummer</Holiday_description><OpenHour>00:00</OpenHour><CloseHour>23:59</CloseHour></StationHoliday><StationHoliday diffgr:id="StationHoliday3" msdata:rowOrder="2"><Date>2016-06-21</Date><Holiday_description>Midsummer</Holiday_description><OpenHour>00:00</OpenHour><CloseHour>23:59</CloseHour></StationHoliday><StationHoliday diffgr:id="StationHoliday4" msdata:rowOrder="3"><Date>2016-08-18</Date><Holiday_description>Midsummer</Holiday_description><OpenHour>00:00</OpenHour><CloseHour>23:59</CloseHour></StationHoliday></DocumentElement></diffgr:diffgram></StationHoliday><Schedule><xs:schema id="NewDataSet"><xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="StationHoliday" msdata:UseCurrentLocale="true"><xs:complexType><xs:choice minOccurs="0" maxOccurs="unbounded"><xs:element name="StationHoliday"><xs:complexType><xs:sequence><xs:element name="SeasonStart" type="xs:string" minOccurs="0"/><xs:element name="SeasonEnd" type="xs:string" minOccurs="0"/><xs:element name="MondayAHStart" type="xs:string" minOccurs="0"/><xs:element name="MondayOpen" type="xs:string" minOccurs="0"/><xs:element name="MondayLunchStart" type="xs:string" minOccurs="0"/><xs:element name="MondayLunchEnd" type="xs:string" minOccurs="0"/><xs:element name="MondayClose" type="xs:string" minOccurs="0"/><xs:element name="MondayAHEnd" type="xs:string" minOccurs="0"/><xs:element name="TuesdayAHStart" type="xs:string" minOccurs="0"/><xs:element name="TuesdayOpen" type="xs:string" minOccurs="0"/><xs:element name="TuesdayLunchStart" type="xs:string" minOccurs="0"/><xs:element name="TuesdayLunchEnd" type="xs:string" minOccurs="0"/><xs:element name="TuesdayClose" type="xs:string" minOccurs="0"/><xs:element name="TuesdayAHEnd" type="xs:string" minOccurs="0"/><xs:element name="WednesdayAHStart" type="xs:string" minOccurs="0"/><xs:element name="WednesdayOpen" type="xs:string" minOccurs="0"/><xs:element name="WednesdayLunchStart" type="xs:string" minOccurs="0"/><xs:element name="WednesdayLunchEnd" type="xs:string" minOccurs="0"/><xs:element name="WednesdayClose" type="xs:string" minOccurs="0"/><xs:element name="WednesdayAHEnd" type="xs:string" minOccurs="0"/><xs:element name="ThursdayAHStart" type="xs:string" minOccurs="0"/><xs:element name="ThursdayOpen" type="xs:string" minOccurs="0"/><xs:element name="ThursdayLunchStart" type="xs:string" minOccurs="0"/><xs:element name="ThursdayLunchEnd" type="xs:string" minOccurs="0"/><xs:element name="ThursdayClose" type="xs:string" minOccurs="0"/><xs:element name="ThursdayAHEnd" type="xs:string" minOccurs="0"/><xs:element name="FridayAHStart" type="xs:string" minOccurs="0"/><xs:element name="FridayOpen" type="xs:string" minOccurs="0"/><xs:element name="FridayLunchStart" type="xs:string" minOccurs="0"/><xs:element name="FridayLunchEnd" type="xs:string" minOccurs="0"/><xs:element name="FridayClose" type="xs:string" minOccurs="0"/><xs:element name="FridayAHEnd" type="xs:string" minOccurs="0"/><xs:element name="SaturdayAHStart" type="xs:string" minOccurs="0"/><xs:element name="SaturdayOpen" type="xs:string" minOccurs="0"/><xs:element name="SaturdayLunchStart" type="xs:string" minOccurs="0"/><xs:element name="SaturdayLunchEnd" type="xs:string" minOccurs="0"/><xs:element name="SaturdayClose" type="xs:string" minOccurs="0"/><xs:element name="SaturdayAHEnd" type="xs:string" minOccurs="0"/><xs:element name="SundayAHStart" type="xs:string" minOccurs="0"/><xs:element name="SundayOpen" type="xs:string" minOccurs="0"/><xs:element name="SundayLunchStart" type="xs:string" minOccurs="0"/><xs:element name="SundayLunchEnd" type="xs:string" minOccurs="0"/><xs:element name="SundayClose" type="xs:string" minOccurs="0"/><xs:element name="SundayAHEnd" type="xs:string" minOccurs="0"/><xs:element name="HolidayAHStart" type="xs:string" minOccurs="0"/><xs:element name="HolidayOpen" type="xs:string" minOccurs="0"/><xs:element name="HolidayLunchStart" type="xs:string" minOccurs="0"/><xs:element name="HolidayLunchEnd" type="xs:string" minOccurs="0"/><xs:element name="HolidayClose" type="xs:string" minOccurs="0"/><xs:element name="HolidayAHEnd" type="xs:string" minOccurs="0"/></xs:sequence></xs:complexType></xs:element></xs:choice></xs:complexType></xs:element></xs:schema><diffgr:diffgram><DocumentElement><StationHoliday diffgr:id="StationHoliday1" msdata:rowOrder="0"><SeasonStart>01/01</SeasonStart><SeasonEnd>31/12</SeasonEnd><MondayAHStart xml:space="preserve"> </MondayAHStart><MondayOpen>00:00</MondayOpen><MondayLunchStart xml:space="preserve"> </MondayLunchStart><MondayLunchEnd xml:space="preserve"> </MondayLunchEnd><MondayClose>23:59</MondayClose><MondayAHEnd xml:space="preserve"> </MondayAHEnd><TuesdayAHStart xml:space="preserve"> </TuesdayAHStart><TuesdayOpen>00:00</TuesdayOpen><TuesdayLunchStart xml:space="preserve"> </TuesdayLunchStart><TuesdayLunchEnd xml:space="preserve"> </TuesdayLunchEnd><TuesdayClose>23:59</TuesdayClose><TuesdayAHEnd xml:space="preserve"> </TuesdayAHEnd><WednesdayAHStart xml:space="preserve"> </WednesdayAHStart><WednesdayOpen>00:00</WednesdayOpen><WednesdayLunchStart xml:space="preserve"> </WednesdayLunchStart><WednesdayLunchEnd xml:space="preserve"> </WednesdayLunchEnd><WednesdayClose>23:59</WednesdayClose><WednesdayAHEnd xml:space="preserve"> </WednesdayAHEnd><ThursdayAHStart xml:space="preserve"> </ThursdayAHStart><ThursdayOpen>00:00</ThursdayOpen><ThursdayLunchStart xml:space="preserve"> </ThursdayLunchStart><ThursdayLunchEnd xml:space="preserve"> </ThursdayLunchEnd><ThursdayClose>23:59</ThursdayClose><ThursdayAHEnd xml:space="preserve"> </ThursdayAHEnd><FridayAHStart xml:space="preserve"> </FridayAHStart><FridayOpen>00:00</FridayOpen><FridayLunchStart xml:space="preserve"> </FridayLunchStart><FridayLunchEnd xml:space="preserve"> </FridayLunchEnd><FridayClose>23:59</FridayClose><FridayAHEnd xml:space="preserve"> </FridayAHEnd><SaturdayAHStart xml:space="preserve"> </SaturdayAHStart><SaturdayOpen>00:00</SaturdayOpen><SaturdayLunchStart xml:space="preserve"> </SaturdayLunchStart><SaturdayLunchEnd xml:space="preserve"> </SaturdayLunchEnd><SaturdayClose>23:59</SaturdayClose><SaturdayAHEnd xml:space="preserve"> </SaturdayAHEnd><SundayAHStart xml:space="preserve"> </SundayAHStart><SundayOpen>00:00</SundayOpen><SundayLunchStart xml:space="preserve"> </SundayLunchStart><SundayLunchEnd xml:space="preserve"> </SundayLunchEnd><SundayClose>23:59</SundayClose><SundayAHEnd xml:space="preserve"> </SundayAHEnd><HolidayAHStart xml:space="preserve"> </HolidayAHStart><HolidayOpen>00:00</HolidayOpen><HolidayLunchStart xml:space="preserve"> </HolidayLunchStart><HolidayLunchEnd xml:space="preserve"> </HolidayLunchEnd><HolidayClose>23:59</HolidayClose><HolidayAHEnd xml:space="preserve"> </HolidayAHEnd></StationHoliday></DocumentElement></diffgr:diffgram></Schedule></Table></StationDetails></diffgr:diffgram></stationDetails></StationDetailsResult></StationDetailsResponse></soap:Body></soap:Envelope>
The MSSOAP client fails initializing the soap12 interface of the Hello Example project.
var soap = new ActiveXObject('MSSOAP.SOAPClient30');
soap.mssoapinit('http://<server>/ServiceStack.Hello/soap12');
var retval = soap.Hello('test');
The following error is returned:
WSDLPort: WSDLPort:The soap:binding subnode on the binding for port WSHttpBinding_ISyncReply is missing HRESULT=0x1: Incorrect function.
- WSDLService:Processing service SyncReply found no port definitions HRESULT=0x80070057: The parameter is incorrect.
- WSDLReader:Analyzing the WSDL file failed HRESULT=0x80070057: The parameter is incorrect.
- Client:One of the parameters supplied is invalid. HRESULT=0x80070057: The parameter is incorrect.
I am using ServiceStack version 3.95 with IIS 6.0 and.NET 4.0.30319.
This is the WSDL:
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions name="Soap12"
targetNamespace="http://schemas.servicestack.net/types"
xmlns:svc="http://schemas.servicestack.net/types"
xmlns:tns="http://schemas.servicestack.net/types"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
xmlns:wsa10="http://www.w3.org/2005/08/addressing"
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex">
<wsdl:types>
<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="anyType" nillable="true" type="xs:anyType" />
<xs:element name="anyURI" nillable="true" type="xs:anyURI" />
<xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
<xs:element name="boolean" nillable="true" type="xs:boolean" />
<xs:element name="byte" nillable="true" type="xs:byte" />
<xs:element name="dateTime" nillable="true" type="xs:dateTime" />
<xs:element name="decimal" nillable="true" type="xs:decimal" />
<xs:element name="double" nillable="true" type="xs:double" />
<xs:element name="float" nillable="true" type="xs:float" />
<xs:element name="int" nillable="true" type="xs:int" />
<xs:element name="long" nillable="true" type="xs:long" />
<xs:element name="QName" nillable="true" type="xs:QName" />
<xs:element name="short" nillable="true" type="xs:short" />
<xs:element name="string" nillable="true" type="xs:string" />
<xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
<xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
<xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
<xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
<xs:element name="char" nillable="true" type="tns:char" />
<xs:simpleType name="char">
<xs:restriction base="xs:int" />
</xs:simpleType>
<xs:element name="duration" nillable="true" type="tns:duration" />
<xs:simpleType name="duration">
<xs:restriction base="xs:duration">
<xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
<xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
<xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
</xs:restriction>
</xs:simpleType>
<xs:element name="guid" nillable="true" type="tns:guid" />
<xs:simpleType name="guid">
<xs:restriction base="xs:string">
<xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
</xs:restriction>
</xs:simpleType>
<xs:attribute name="FactoryType" type="xs:QName" />
<xs:attribute name="Id" type="xs:ID" />
<xs:attribute name="Ref" type="xs:IDREF" />
</xs:schema>
<xs:schema xmlns:tns="http://schemas.servicestack.net/types" elementFormDefault="qualified" targetNamespace="http://schemas.servicestack.net/types" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="Hello">
<xs:sequence>
<xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="Hello" nillable="true" type="tns:Hello" />
<xs:complexType name="HelloResponse">
<xs:sequence>
<xs:element minOccurs="0" name="Result" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="HelloResponse" nillable="true" type="tns:HelloResponse" />
</xs:schema>
</wsdl:types>
<wsdl:message name="HelloIn">
<wsdl:part name="parameters" element="tns:Hello" />
</wsdl:message>
<wsdl:message name="HelloOut">
<wsdl:part name="parameters" element="tns:HelloResponse" />
</wsdl:message>
<wsdl:portType name="ISyncReply">
<wsdl:operation name="Hello">
<wsdl:input message="svc:HelloIn" />
<wsdl:output message="svc:HelloOut" />
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name="IOneWay">
</wsdl:portType>
<wsdl:binding name="WSHttpBinding_ISyncReply" type="svc:ISyncReply">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="Hello">
<soap:operation soapAction="http://schemas.servicestack.net/types/Hello" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="WSHttpBinding_IOneWay" type="svc:IOneWay">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
</wsdl:binding>
<wsdl:service name="SyncReply">
<wsdl:port name="WSHttpBinding_ISyncReply" binding="svc:WSHttpBinding_ISyncReply">
<soap:address location="http://<servername>/servicestack/soap12" />
</wsdl:port>
</wsdl:service>
<wsdl:service name="AsyncOneWay">
<wsdl:port name="WSHttpBinding_IOneWay" binding="svc:WSHttpBinding_IOneWay">
<soap:address location="http://<servername>/servicestack/soap12" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
So I am using a legacy WSDL,and I want to generate some Java code from it to get a better idea of what exactly the web service does as I find Java code to be easier to read than a WSDL. However, using the Apache CFX source generator plug in using the below WSDL file is giving me the following error (same one in soapUI):
Encountered illegal extension attribute "soapAction". Extension attributes must be in a namespace other than WSDL's.
So basically, I want to change the WSDL so that it still properly describes the web service, but can actually be utilized by the plug in. Any suggestions would be most appreciated. I included the whole WSDL because I did not know what parts could be relevant, so apologies for the huge wall of text.
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:tns="http://api.voiceforge.com/SOAPI"
targetNamespace="http://api.voiceforge.com/SOAPI"
xmlns:impl="http://api.voiceforge.com/SOAPI"
xmlns:intf="http://api.voiceforge.com/SOAPI"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Types -->
<wsdl:types>
<xsd:schema elementFormDefault="qualified" targetNamespace="http://api.voiceforge.com/SOAPI">
<!-- Say -->
<xsd:complexType name="ComplexTextInfo">
<xsd:sequence>
<xsd:element name="SynthString" type="xsd:string" />
<xsd:element minOccurs="0" maxOccurs="1" name="Encoding" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ComplexVoiceInfo">
<xsd:all>
<xsd:element name="Owner" type="xsd:string" />
<xsd:element name="Name" type="xsd:string" />
</xsd:all>
</xsd:complexType>
<xsd:complexType name="ComplexAudioInfo">
<xsd:all>
<xsd:element name="DeliveryType" type="xsd:string" />
<xsd:element name="Format" type="xsd:string" />
<xsd:element name="SignalRate" type="xsd:string" />
</xsd:all>
</xsd:complexType>
<xsd:complexType name="ComplexAudioData">
<xsd:all>
<xsd:element name="DeliveryType" type="xsd:string" />
<xsd:element name="Format" type="xsd:string" />
<xsd:element name="Data" type="xsd:string" />
</xsd:all>
</xsd:complexType>
<!-- CreateAccount -->
<xsd:complexType name="ComplexCreateUserInfo">
<xsd:all>
<xsd:element name="UserID" type="xsd:string" />
<xsd:element name="Password" type="xsd:string" />
<xsd:element name="DOB" type="xsd:string" />
<xsd:element name="Email" type="xsd:string" />
<xsd:element name="ZipCode" type="xsd:string" />
<xsd:element name="Gender" type="xsd:string" />
</xsd:all>
</xsd:complexType>
<!-- Voice Search -->
<xsd:complexType name="ComplexQuery">
<xsd:all>
<xsd:element name="Owner" type="xsd:string" />
<xsd:element name="Name" type="xsd:string" />
<xsd:element name="Age" type="xsd:string" />
<xsd:element name="Gender" type="xsd:string" />
<xsd:element name="Language" type="xsd:string" />
</xsd:all>
</xsd:complexType>
<xsd:complexType name="ComplexQueryResult">
<xsd:all>
<xsd:element name="Owner" type="xsd:string" />
<xsd:element name="Name" type="xsd:string" />
<xsd:element name="Age" type="xsd:string" />
<xsd:element name="Gender" type="xsd:string" />
<xsd:element name="Language" type="xsd:string" />
<xsd:element name="Dialect" type="xsd:string" />
</xsd:all>
</xsd:complexType>
<xsd:complexType name="ComplexQueryResultArray">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="Voice" nillable="true" type="tns:ComplexQueryResult"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
<!-- Messages -->
<wsdl:message name="GetSessionIDSoapIN">
<wsdl:part name="ApplicationID" type="xsd:string" />
<wsdl:part name="UserID" type="xsd:string" />
</wsdl:message>
<wsdl:message name="GetSessionIDSoapOUT">
<wsdl:part name="SessionID" type="xsd:string" />
<wsdl:part name="Error" type="xsd:string" />
</wsdl:message>
<wsdl:message name="SaySoapIN">
<wsdl:part name="SessionID" type="xsd:string" />
<wsdl:part name="Text" type="tns:ComplexTextInfo" />
<wsdl:part name="VoiceInfo" type="tns:ComplexVoiceInfo" />
<wsdl:part name="AudioInfo" type="tns:ComplexAudioInfo" />
</wsdl:message>
<wsdl:message name="SaySoapOUT">
<wsdl:part name="Audio" type="tns:ComplexAudioData" />
<wsdl:part name="Error" type="xsd:string" />
</wsdl:message>
<wsdl:message name="CreateAccountSoapIN">
<wsdl:part name="ApplicationID" type="xsd:string" />
<wsdl:part name="UserInfo" type="tns:ComplexCreateUserInfo" />
</wsdl:message>
<wsdl:message name="CreateAccountSoapOUT">
<wsdl:part name="UserID" type="xsd:string" />
<wsdl:part name="Error" type="xsd:string" />
</wsdl:message>
<wsdl:message name="VoiceSearchSoapIN">
<wsdl:part name="SessionID" type="xsd:string" />
<wsdl:part name="Query" type="tns:ComplexQuery" />
</wsdl:message>
<wsdl:message name="VoiceSearchSoapOUT">
<wsdl:part name="VoiceList" type="tns:ComplexQueryResultArray" />
<wsdl:part name="Error" type="xsd:string" />
</wsdl:message>
<wsdl:message name="GetAccountInfoSoapIN">
<wsdl:part name="ApplicationID" type="xsd:string" />
<wsdl:part name="UserID" type="xsd:string" />
</wsdl:message>
<wsdl:message name="GetAccountInfoSoapOUT">
<wsdl:part name="SynthesesRemaining" type="xsd:int" />
<wsdl:part name="DefaultVoiceInfo" type="tns:ComplexVoiceInfo" />
<wsdl:part name="Error" type="xsd:string" />
</wsdl:message>
<wsdl:message name="UpdateAccountInfoSoapIN">
<wsdl:part name="ApplicationID" type="xsd:string" />
<wsdl:part name="UserID" type="xsd:string" />
<wsdl:part name="DefaultVoiceInfo" type="tns:ComplexVoiceInfo" />
<wsdl:part name="ModifySynthesisAmount" type="xsd:int" />
</wsdl:message>
<wsdl:message name="UpdateAccountInfoSoapOUT">
<wsdl:part name="SynthesesRemaining" type="xsd:int" />
<wsdl:part name="DefaultVoiceInfo" type="tns:ComplexVoiceInfo" />
<wsdl:part name="Error" type="xsd:string" />
</wsdl:message>
<!-- Port Types -->
<wsdl:portType name="VF-HTTPS-Binding">
<wsdl:operation name="GetSessionID">
<wsdl:input message="tns:GetSessionIDSoapIN" />
<wsdl:output message="tns:GetSessionIDSoapOUT" />
</wsdl:operation>
<wsdl:operation name="CreateAccount">
<wsdl:input message="tns:CreateAccountSoapIN" />
<wsdl:output message="tns:CreateAccountSoapOUT" />
</wsdl:operation>
<wsdl:operation name="GetAccountInfo">
<wsdl:input message="tns:GetAccountInfoSoapIN" />
<wsdl:output message="tns:GetAccountInfoSoapOUT" />
</wsdl:operation>
<wsdl:operation name="UpdateAccountInfo">
<wsdl:input message="tns:UpdateAccountInfoSoapIN" />
<wsdl:output message="tns:UpdateAccountInfoSoapOUT" />
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name="VF-HTTP-Binding">
<wsdl:operation name="VoiceSearch">
<wsdl:input message="tns:VoiceSearchSoapIN" />
<wsdl:output message="tns:VoiceSearchSoapOUT" />
</wsdl:operation>
<wsdl:operation name="Say">
<wsdl:input message="tns:SaySoapIN" />
<wsdl:output message="tns:SaySoapOUT" />
</wsdl:operation>
</wsdl:portType>
<!-- Bindings -->
<wsdl:binding name="VF-HTTPS-Binding" type="tns:VF-HTTPS-Binding">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc" />
<wsdl:operation name="GetSessionID" soapAction="http://api.voiceforge.com/SOAPI#GetSessionID">
<soap:operation soapAction="https://api.voiceforge.com/SOAPI#GetSessionID" RequestNamespace="https://api.voiceforge.com/SOAPI" ResponseNamespace="https://api.voiceforge.com/SOAPI" style="rpc" />
<wsdl:input>
<soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CreateAccount">
<soap:operation soapAction="https://api.voiceforge.com/SOAPI#CreateAccount" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" style="rpc" />
<wsdl:input>
<soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAccountInfo">
<soap:operation soapAction="https://api.voiceforge.com/SOAPI#GetAccountInfo" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" style="rpc" />
<wsdl:input>
<soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="UpdateAccountInfo">
<soap:operation soapAction="https://api.voiceforge.com/SOAPI#UpdateAccountInfo" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" style="rpc" />
<wsdl:input>
<soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal" namespace="https://api.voiceforge.com/SOAPI"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="VF-HTTP-Binding" type="tns:VF-HTTP-Binding">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc" />
<wsdl:operation name="VoiceSearch">
<soap:operation soapAction="http://api.voiceforge.com/SOAPI#VoiceSearch" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" style="rpc" />
<wsdl:input>
<soap:body use="literal" namespace="http://api.voiceforge.com/SOAPI"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal" namespace="http://api.voiceforge.com/SOAPI"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="Say">
<soap:operation soapAction="http://api.voiceforge.com/SOAPI#Say" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" style="rpc" />
<wsdl:input>
<soap:body use="literal" namespace="http://api.voiceforge.com/SOAPI"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal" namespace="http://api.voiceforge.com/SOAPI"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<!-- Services -->
<wsdl:service name="VoiceForgeAPI-S">
<wsdl:port name="VF-HTTPS" binding="tns:VF-HTTPS-Binding">
<wsdl:documentation>VoiceForge HTTPS Service</wsdl:documentation>
<soap:address location="https://api.voiceforge.com/soapi.pl" />
</wsdl:port>
</wsdl:service>
<wsdl:service name="VoiceForgeAPI-I">
<wsdl:port name="VF-HTTP" binding="tns:VF-HTTP-Binding">
<wsdl:documentation>VoiceForge HTTP Service</wsdl:documentation>
<soap:address location="http://api.voiceforge.com/soapi.pl" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Edit with C# code generator:
//---------------------------------------------------------------
wsdl2 -out:VoiceForgeAPI.cs wsdl/soapi.wsdl
Web Services Description Language Utility
Mono Framework v2.0.50727.1433
There where some warnings while generating the code:
wsdl/soapi.wsdl
- This web reference does not conform to WS-I Basic Profile v1.1
R2209: A wsdl:binding in a DESCRIPTION SHOULD bind every wsdl:part of a
wsdl:message in the wsdl:portType to which it refers to one of
soapbind:body, soapbind:header, soapbind:fault or soapbind:headerfault
* Binding 'VF-HTTPS-Binding', in Service Description
'http://api.voiceforge.com/SOAPI'
* Binding 'VF-HTTP-Binding', in Service Description
'http://api.voiceforge.com/SOAPI'
- WARNING: At least one operation is of an unsupported type and has been
ignored
Writing file 'VoiceForgeAPI.cs'
//---------------------------------------------------------------
And resulting file, instead of methods having just commented errors like this:
//---------------------------------------------------------------
// WARNING: Could not generate operation binding GetSessionID. The combination of style=rpc with use=literal is not supported
// WARNING: Could not generate operation binding CreateAccount. The combination of style=rpc with use=literal is not supported
// WARNING: Could not generate operation binding GetAccountInfo. The combination of style=rpc with use=literal is not supported
// WARNING: Could not generate operation binding UpdateAccountInfo. The combination of style=rpc with use=literal is not supported
// WARNING: Could not generate operation binding VoiceSearch. The combination of style=rpc with use=literal is not supported
// WARNING: Could not generate operation binding Say. The combination of style=rpc with use=literal is not supported
//---------------------------------------------------------------
I can see this WSDL has been created in the very dark ages of WebServices programming...
Anyway, to be able to execute:
wsdl2java.bat -all your.wsdl
you need to remove soapAction="http://api.voiceforge.com/SOAPI#GetSessionID" in line 207. Change:
<wsdl:operation name="GetSessionID" soapAction="http://api.voiceforge.com/SOAPI#GetSessionID">
to
<wsdl:operation name="GetSessionID">
because specification of soapAction has to be placed in soap:operation extension (WSDL's Soap 1.1 Binding) element.
Issuing wsdl2java -all command gives me these files:
ComplexAudioData.java
ComplexAudioInfo.java
ComplexCreateUserInfo.java
ComplexQuery.java
ComplexQueryResult.java
ComplexQueryResultArray.java
ComplexTextInfo.java
ComplexVoiceInfo.java
ObjectFactory.java
package-info.java
VFHTTPBinding.java
VFHTTPBindingImpl.java
VFHTTPBinding_VFHTTP_Client.java
VFHTTPBinding_VFHTTP_Server.java
VFHTTPSBinding.java
VFHTTPSBindingImpl.java
VFHTTPSBinding_VFHTTPS_Client.java
VFHTTPSBinding_VFHTTPS_Server.java
VoiceForgeAPII.java
VoiceForgeAPIS.java
in com.voiceforge.api.soapi package.
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<SearchHotelsResponse xmlns="http://tourico.com/webservices/">
<SearchHotelsResult>
<xs:schema id="TWS_HotelList" targetNamespace="http://tourico.com/webservices/TWS_HotelList.xsd" xmlns:mstns="http://tourico.com/webservices/TWS_HotelList.xsd" xmlns="http://tourico.com/webservices/TWS_HotelList.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:element name="TWS_HotelList" msdata:IsDataSet="true" msdata:Locale="en-US" msdata:EnforceConstraints="False">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Hotel">
<xs:complexType>
<xs:sequence>
<xs:element name="RoomType" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Avail" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="offset" form="unqualified" type="xs:byte" use="required" />
<xs:attribute name="status" form="unqualified" type="xs:boolean" use="required" /></xs:complexType>
</xs:element>
<xs:element name="Discount" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="type" form="unqualified" msprop:Generator_UserColumnName="type" msprop:Generator_ColumnVarNameInTable="columtype" type="xs:string" use="required" />
<xs:attribute name="name" form="unqualified" type="xs:string" use="required" />
<xs:attribute name="from" form="unqualified" msdata:DateTimeMode="Unspecified" type="xs:dateTime" use="required" />
<xs:attribute name="to" form="unqualified" msdata:DateTimeMode="Unspecified" type="xs:dateTime" use="required" />
<xs:attribute name="value" form="unqualified" type="xs:string" use="required" /></xs:complexType>
</xs:element>
<xs:element name="Occup" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Supp" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="supId" form="unqualified" type="xs:int" />
<xs:attribute name="name" form="unqualified" type="xs:string" use="required" />
<xs:attribute name="price" form="unqualified" type="xs:double" use="required" /></xs:complexType>
</xs:element>
<xs:element name="Board" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="bbId" form="unqualified" type="xs:int" />
<xs:attribute name="name" form="unqualified" type="xs:string" use="required" />
<xs:attribute name="price" form="unqualified" type="xs:double" use="required" />
<xs:attribute name="default" form="unqualified" msprop:Generator_UserColumnName="default" msprop:Generator_ColumnVarNameInTable="columndefault" msprop:Generator_ColumnPropNameInTable="defaultColumn"
type="xs:boolean" default="false" /></xs:complexType>
</xs:element>
<xs:element name="Room" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Child" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="age" form="unqualified" type="xs:int" /></xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="seqNum" form="unqualified" type="xs:int" use="required" />
<xs:attribute name="adultNum" form="unqualified" type="xs:int" use="required" />
<xs:attribute name="childNum" form="unqualified" type="xs:int" /></xs:complexType>
</xs:element>
<xs:element name="Price" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="offset" form="unqualified" type="xs:int" use="required" />
<xs:attribute name="value" form="unqualified" type="xs:double" use="required" /></xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="occupId" form="unqualified" type="xs:string" use="required" />
<xs:attribute name="maxAdult" form="unqualified" type="xs:int" use="required" />
<xs:attribute name="maxChild" form="unqualified" type="xs:int" use="required" />
<xs:attribute name="price" form="unqualified" type="xs:double" use="required" />
<xs:attribute name="tax" form="unqualified" type="xs:double" use="required" />
<xs:attribute name="dblBed" form="unqualified" type="xs:boolean" />
<xs:attribute name="avrNightPrice" form="unqualified" type="xs:double" use="required" /></xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="productId" form="unqualified" type="xs:string" use="required" />
<xs:attribute name="name" form="unqualified" type="xs:string" use="required" />
<xs:attribute name="nights" form="unqualified" type="xs:byte" use="required" />
<xs:attribute name="startDate" form="unqualified" type="xs:dateTime" use="required" />
<xs:attribute name="isAvailable" form="unqualified" type="xs:boolean" />
<xs:attribute name="roomId" form="unqualified" type="xs:int" />
<xs:attribute name="hotelRoomTypeId" form="unqualified" type="xs:int" /></xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="hotelId" form="unqualified" type="xs:int" use="required" />
<xs:attribute name="provider" form="unqualified" type="xs:string" use="required" />
<xs:attribute name="name" form="unqualified" type="xs:string" use="required" />
<xs:attribute name="address" form="unqualified" type="xs:string" />
<xs:attribute name="category" form="unqualified" type="xs:string" />
<xs:attribute name="bestVal" form="unqualified" type="xs:byte" />
<xs:attribute name="thumb" form="unqualified" type="xs:string" />
<xs:attribute name="starsLevel" form="unqualified" type="xs:double" />
<xs:attribute name="minAverPrice" form="unqualified" type="xs:double" use="required" />
<xs:attribute name="desc" form="unqualified" type="xs:string" use="required" />
<xs:attribute name="location" form="unqualified" type="xs:string" use="required" />
<xs:attribute name="currency" form="unqualified" type="xs:string" />
<xs:attribute name="brandId" form="unqualified" type="xs:int" />
<xs:attribute name="brandName" form="unqualified" type="xs:string" /></xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<TWS_HotelList xmlns="http://tourico.com/webservices/TWS_HotelList.xsd">
<Hotel hotelId="1041291" provider="localTgsProvider" name="Rush Inn - DEMO - DEMO" address="DEMO - Khalid Bin Waleed Road Dubai 44099" category="Tourist Class" bestVal="0" thumb="http://image1.urlforimages.com/1041291/Rush-Front_Thumbnailed.jpg"
starsLevel="2" minAverPrice="148.54" desc="DEMO - DEMO - Families will love to vacation at the Rush Inn with all the amenities and attractions it provides" location="Bur Dubai,Dubai,AE" currency="AED" brandId="0" brandName="">
<RoomType productId="1041291;1180012;34538" name="Standard" nights="1" startDate="2010-08-20T00:00:00-04:00" isAvailable="true" roomId="3" hotelRoomTypeId="1180012">
<Avail offset="0" status="true" />
<Occup occupId="1041291;1180012;34538;2;2;0;1" maxAdult="4" maxChild="2" price="148.54" tax="0" dblBed="true" avrNightPrice="148.54">
<Board bbId="24" name="Room Only" price="0" default="true" />
<Room seqNum="1" adultNum="1" childNum="1">
<Child age="8" />
</Room>
<Price offset="0" value="148.54" />
</Occup>
<Occup occupId="1041291;1180012;34538;2;2;0;2" maxAdult="4" maxChild="2" price="148.54" tax="0" dblBed="false" avrNightPrice="148.54">
<Board bbId="24" name="Room Only" price="0" default="true" />
<Room seqNum="1" adultNum="1" childNum="1">
<Child age="8" />
</Room>
<Price offset="0" value="148.54" />
</Occup>
</RoomType>
</Hotel>
</TWS_HotelList>
</SearchHotelsResult>
</SearchHotelsResponse>
</soap:Body>
</soap:Envelope>
My bet is the question is when you have a SOAP data which is wrapped in an XML packet which function in PHP can you use to extract SOAP data?
I just researched this for an hour because I had a similar issue. What is boils down to is that just because SOAP is wrapped in XML doesn't mean you can use a "simple" ;-) XML function to extract the SOAP information that you want.
You have to bear namespaces in mind. In my case I had this:
<?xml version="1.0" encoding="utf-8"?>
* <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
* <soap:Body><Request_MerchantStatementResponse xmlns="http://www.netcash.co.za/netserv/ncUpload">
* <Request_MerchantStatementResult>2010/11/06 00:00:00\tOBL\t0\t\tOpening Balance\t100000.00\t+\t0.00\t\t\t\t\t\t\t\r</Request_MerchantStatementResult>
* </Request_MerchantStatementResponse></soap:Body>
* </soap:Envelope>
I needed to extract the "Request_MerchantStatementResult" and only that. The solution was to specify the name spaces referenced in my return XML.
$xml = simplexml_load_string($response);
echo $xml->children('http://schemas.xmlsoap.org/soap/envelope/')
->children('http://www.netcash.co.za/netserv/ncUpload')
->Request_MerchantStatementResponse
->Request_MerchantStatementResult;
The problem comes in if you just print_r the result from simplexml_load_string you get nothing. So be sure to specify your name space.
EDIT
I digress, instead of having
echo $xml->children('http://schemas.xmlsoap.org/soap/envelope/')
->children('http://www.netcash.co.za/netserv/ncUpload')
->Request_MerchantStatementResponse
->Request_MerchantStatementResult;
I should have had:
$result = $xml->children('http://schemas.xmlsoap.org/soap/envelope/')
->children('http://www.netcash.co.za/netserv/ncUpload')
->Request_MerchantStatementResponse;
echo $result->Request_MerchantStatementResult;