[WSDL] Waar type definities definieren

Pagina: 1
Acties:

  • VyperX
  • Registratie: Juni 2001
  • Laatst online: 16-02 16:12
Hallo,

Ik ben voor mijn stage opdracht bezig met het maken van een generator voor Communication Adapters. (Java class die als "wrapper" dient voor een externe web interface.)
Voor het omschrijven van de externe web service wordt WSDL gebruikt. Daarom wil ik voor het omschrijven van de Communication Adapter (CA) graag ook WSDL gebruiken. (Om het enigszins uniform te houden.)

De CA krijgt verschillende XML messages binnen, die moeten worden vertaald naar de parameters voor de externe service. Deze XML messages heb ik nu binnen mijn Binding Operations staan als "wire format".
XML:
1
2
3
4
5
6
7
8
9
10
11
12
[...]
    <binding name="TargetBinding" type="tns:TargetPortType">
        <operation name="storeAppointment">
           <input name="AppointmentRequest">
              <ca:message instance="caxml:appointmentRequestMessage.xml"/>
           </input>
           <output name="AppointmentResponse">
              <ca:message instance="caxml:appointmentResponseMessage.xml"/>
           </output>           
        </operation>
    </binding>
[...]
offtopic:
Hmmm...? Geen XML highlighting?


Mijn vraag gaat nu over de abstracte definitie van deze messages. Hiervoor heb ik .xsd bestanden tot mijn beschikking en vraag me af hoe ik deze het beste kan gebruiken.

Ik heb hiervoor 3 opties bedacht, maar weet niet goed welke het netste is...
  1. Ik maak een namespace (URI) aan, waar de verschillende .xsd bestanden zijn te vinden. Vervolgens geef ik bij een Message Part aan dat deze heeft 'type="caxsd:requestMessage.xsd"'.
    XML:
    1
    2
    3
    4
    5
    6
    
    <definition ...
        xmlns:caxsd="http://www.url.to/caxsd/target/"
    [...]
    <message name="appointmentRequestMessage">
        <part name="message" type="caxsd:appointmentRequestMessage.xsd"/>
    </message>
  2. Ik import de verschillende .xsd bestanden in mijn type blok (met specifieke namespace). Vervolgens geef ik bij een Message Part aan dat deze heeft 'type="caxsd:requestMessage"'.
    XML:
    1
    2
    3
    4
    5
    6
    7
    
    <xsd:schema ... >
        <xsd:import namespace="http://www.url.to/caxsd/target/requestMessage.xsd">
        <xsd:import namespace="http://www.url.to/caxsd/target/responseMessage.xsd">
    [...]
    <message name="appointmentRequestMessage">
        <part name="message" type="caxsd:appointmentRequestMessage"/>
    </message>
  3. Ik maak een extra .xsd aan, waar ik de verschillende .xsd bestanden in importeer. Vervolgens bind ik een namespace aan deze omvattende .xsd, en gebruik bij mijn Message Parts 'type="caxsd:requestMessage"'.
    XML:
    1
    2
    3
    4
    5
    6
    7
    
    <xsd:schema ... >
        <xsd:import namespace="http://www.url.to/caxsd/target/"
                    schemaLocation="http://www.url.to/caxsd/target/complete.xsd"/>
    [...]
    <message name="appointmentRequestMessage">
        <part name="message" type="caxsd:appointmentRequestMessage"/>
    </message>
Welke van deze 3 opties is het netst? Ik zou zelf naar optie 1 neigen, omdat dit het "duidelijkst" is. Per Message Part wordt direct verwezen naar de betreffende .xsd.

Ik heb geprobeerd de demo code zo kort mogelijk te houden. Als er wat uitgebreidere voorbeelden nodig zijn zou ik dat graag horen. De xsd:schema's zijn uiteraard onderdeel van een Type blok.

My Dwarf Fortress ASCII Reward: ~~@~~####,.".D",.B""


  • VyperX
  • Registratie: Juni 2001
  • Laatst online: 16-02 16:12
Een bescheiden kick...

My Dwarf Fortress ASCII Reward: ~~@~~####,.".D",.B""


  • Four
  • Registratie: Oktober 2001
  • Niet online

Four

I void warranty

Na een diep gesprek met jou, en een overdenking zou ik zelf toch voor optie 1 gaan.

dwyslexy != luiheid !! Taalpuristen sla uw slag