Hello and thanks for reading,
Our client requires us to create a new web service (OE10.2A.05) that will allow us to accept incoming SOAP messages from a third party via the WSA.
The structure of the incoming data is complex and in order for us to construct the required input dataset definitions for our service the 3rd party has provided us with their wsdl’s .xsd documents and we have attempted to use the OE utility ‘bproxsdto4gl’ to generate static dataset defs but have run into issues with some of the datatypes.
Essentially, the utility cannot handle some datatypes where there is an enumeration specified. This was slightly improved when we went to the ‘bproxsdto4gl’ utility under OE 11.6. However, this then led to a problem of “PARENT-ID-RELATION” definitions in the dataset relationships that OE10 can’t accept!
Anyway, the wsdl uses *.xsd files that conform to an industry standard (Open Travel Association);
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="schemas.xmlsoap.org/.../"
xmlns:ota="www.opentravel.org/.../05"
xmlns:soap="schemas.xmlsoap.org/.../"
xmlns:http="schemas.xmlsoap.org/.../"
xmlns:soap-env="schema.xmlsoap.org/.../"
xmlns:xs="www.w3.org/.../XMLSchema"
targetNamespace="www.opentravel.org/.../05">
<wsdl:types>
<xs:schema>
<xs:import xmlns:ota="www.opentravel.org/.../05"
namespace="www.opentravel.org/.../05" schemaLocation="xsd/OTA_HotelInvCountNotifRQ.xsd"/>
</xs:schema>
....
However, when the ‘bproxsdto4gl’ utility hits a line such as ‘MealServiceType’ which is defined in one of the included xsd’s of the xsd we are parsing, we get the following error:
Unable to map simpleType MealServiceType to Progress data type. (13853);
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="www.w3.org/.../XMLSchema" elementFormDefault="qualified" version="2.001" id="OTA2003A2004A">
<xs:include schemaLocation="OTA_SimpleTypes.xsd"/>
<xs:include schemaLocation="OTA_CommonTypes.xsd"/>
<xs:annotation>
...
<xs:simpleType name="MealServiceType">
<xs:annotation>
<xs:documentation xml:lang="en"> Enumerated List (Meal Code in brackets):
Breakfast (B)
Snack (S)
Dinner (D)
Hot Meal (H)
Lunch (L)
Refreshments (R)
Complimentary Liquor (C)
Meal (M)
Liquor for Purchase (P)
Food for Purchase (F)
Cold Meal (O)
No Meal Service (-)
Alternately, a String of Length 32 can be used if the above list does not suffice.
</xs:documentation>
</xs:annotation>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Breakfast">
<xs:annotation>
<xs:documentation xml:lang="en"> Identifies a breakfast meal service.</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Snack">
...
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="StringLength1to32"/>
</xs:simpleType>
</xs:union>
We can work around this by modifying the mealservicetype such that the ‘bproxsdto4gl’ utility accepts it but the .xsd files are expansive and this would take quite a while with no guarantee that we get a valid data structure to map an incoming request to.
Has anyone had any experience of this? Is there a solution?
Many Thanks,
Mark.
P.S. I'll try to include the xsd's. Does anyone know how to do this?
We have added to the allowable .xsd formats that can be represented by a static ProDataset during the Release 11 time frame, as you have encountered. Still, we are not able to accept every .xsd format into a dataset. Currently we only support xs:simpleType definitions with a <xs:restriction base=...> or <xs:union memberTypes=...> child.
Your use case might be something we could do to enhance bprxsdto4gl in the future, but I don't believe that we will ever be able to accept every .xsd format as a dataset.
Maybe someone else on this forum has a workaround that could help.
This doesn't really help answer your question but the last time we had to code to an existing WSDL, we ended up using WebSpeed. After all, SOAP is just XML in, XML out.
Hi [mention:3bdfc97448124857a5b85c01a3d4da63:e9ed411860ed4f2ba0265705b8793d05]
I am a colleague of [mention:29e7e62c01db42a9bbc789d47bbda46d:e9ed411860ed4f2ba0265705b8793d05]
Thanks for the suggestion the third party are pushing their Soap Messages at us.
How did you specify the end point in webSpeed?
Here's a snippet from our WSDL. Our WSDL is essentially their WSDL with the endpoint changed.
<service name="SushiService">
<port binding="tns:SushiService" name="SushiServicePort">
<soap:address location="xxx.xxx.com/.../>
</port>
</service>