Using ‘bproxsdto4gl’ to generate static temp-table and datas

Posted by MBeynon on 21-Feb-2017 05:45

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?

All Replies

Posted by Robin Brown on 21-Feb-2017 13:58

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.

Posted by tbergman on 21-Feb-2017 14:10

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.

Posted by MGreenwood on 22-Feb-2017 11:49

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?

Posted by tbergman on 22-Feb-2017 13:06

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>

This thread is closed