Problemen bij automatisch genereren code vanuit WSDL

Dit is een statische kopie van het eerdere discussie.kinggemeenten.nl.
Nieuwe discussies kunnen in de GitHub repository 'StUF standaarden' als issue worden opgevoerd.

5 reacties / 0 nieuw
Jeroen Vonk
Problemen bij automatisch genereren code vanuit WSDL

Goedendag, ik ben momenteel bezig met het implementeren van de StUF-ZKN interface (Patch 25).
En ik loop hier tegen een aantal problemen aan die in enkele andere draadjes hier op het discussieplatform worden aangeduid.
De interface dient in C# te zijn en wordt ontwikkeld met behulp van Visual Studio 2017 (VS17). Ik krijg het echter niet voor elkaar om code te genereren die ook daadwerkelijk werkt.
Ik heb het volgende al geprobeerd voor de WSDL's zkn0310_beantwoordVraag_zs-dms, zkn0310_vrijeBerichten_zs-dms, zkn0310_ontvangAsynchroon_mutatie_zs-dms:
- Domweg importeren van de WSDL's in VS17.
    Dit lukt niet.
- Het omzetten van de WSDL met behulp van wsdl.exe
    Dit geeft ook fouten en lukt niet.
- Het platslaan van elk van de drie top-XSD's behorende bij de WSDL's met behulp van de XSD-Resolver
    Dit lukt - en heb ik tevens gedaan voor de stuf0301_types.wsdl.
- De platgeslagen WSDL met wsdl.exe verwerken, zowel met als zonder een platgeslagen stuf0301_types
    Dit geeft een aantal fouten, zoals:

wsdl.exe /verbose /protocol:SOAP /o:C:\StuF\output\ /serverInterface  C:\StUF\zkn0310\zs-dms\zkn0310_beantwoordVraag_zs-dms_resolved.wsdl C:\StUF\0301\stuf0301_types_resolved.wsdl  C:\StUF\resolved\stuf0301_types\stuf0301_resolved.xsd C:\StUF\resolved\zkn0310_beantwoordVraag_zs-dms\gml_resolved.xsd C:\StUF\resolved\zkn0310_beantwoordVraag_zs-dms\smil20-language_resolved.xsd C:\StUF\resolved\zkn0310_beantwoordVraag_zs-dms\smil20_resolved.xsd C:\StUF\resolved\zkn0310_beantwoordVraag_zs-dms\xlink_resolved.xsd C:\StUF\resolved\zkn0310_beantwoordVraag_zs-dms\xmlmime_resolved.xsd C:\StUF\resolved\zkn0310_beantwoordVraag_zs-dms\xml_resolved.xsd C:\StUF\resolved\zkn0310_beantwoordVraag_zs-dms\zkn0310_bg0310_ent_resolved.xsd C:\StUF\resolved\zkn0310_beantwoordVraag_zs-dms\zkn0310_msg_stuf_vraagAntwoord_resolved.xsd C:\StUF\resolved\zkn0310_beantwoordVraag_zs-dms\zkn0310_msg_vraagAntwoord_resolved.xsd    
...
Schema validation error: Schema with targetNamespace='http://www.egem.nl/StUF/StUF0301' has invalid syntax. The simpleType 'http://www.egem.nl/StUF/StUF0301:Foutdetails' has already been declared. Line 729, position 5.
Schema validation error: Schema with targetNamespace='http://www.egem.nl/StUF/StUF0301' has invalid syntax. The simpleType 'http://www.egem.nl/StUF/StUF0301:Gebruiker' has already been declared. Line 734, position 5.
Schema validation error: Schema with targetNamespace='http://www.egem.nl/StUF/StUF0301' has invalid syntax. The simpleType 'http://www.egem.nl/StUF/StUF0301:IndOnvolledigeDatum' has already been declared. Line 739, position 5.
Schema validation error: Schema with targetNamespace='http://www.egem.nl/StUF/StUF0301' has invalid syntax. The simpleType 'http://www.egem.nl/StUF/StUF0301:Melding' has already been declared. Line 763, position 5.
Schema validation error: Schema with targetNamespace='http://www.egem.nl/StUF/StUF0301' has invalid syntax. The simpleType 'http://www.egem.nl/StUF/StUF0301:NoValue' has already been declared. Line 768, position 5.
Schema validation error: Schema with targetNamespace='http://www.egem.nl/StUF/StUF0301' has invalid syntax. The simpleType 'http://www.egem.nl/StUF/StUF0301:Organisatie' has already been declared. Line 777, position 5.
Schema validation error: Schema with targetNamespace='http://www.egem.nl/StUF/StUF0301' has invalid syntax. The simpleType 'http://www.egem.nl/StUF/StUF0301:Refnummer' has already been declared. Line 782, position 5.
Schema validation error: Schema with targetNamespace='http://www.egem.nl/StUF/StUF0301' has invalid syntax. The simpleType 'http://www.egem.nl/StUF/StUF0301:Tijdstip' has already been declared. Line 787, position 5.
Schema validation error: Schema with targetNamespace='http://www.egem.nl/StUF/sector/bg/0310' has invalid syntax. The data type of the simple content is not a valid restriction of the base complex type. Line 7532, position 11.
Schema validation error: Schema with targetNamespace='http://www.egem.nl/StUF/sector/bg/0310' has invalid syntax. The data type of the simple content is not a valid restriction of the base complex type. Line 7723, position 11.
Warning: Schema could not be validated. Class generation may fail or may produce incorrect results.
Writing file 'C:\StuF\output\BeantwoordVraagInterfaces.cs'.

Dit is de oplossing die in "https://vng-realisatie.github.io/StUF-Standaarden/discussie/gemma/stuf-bg-310/asynchron..." wordt genoemd, maar levert geen volledige code op bij mij.

- De platgeslagen WSDL importeren in VS17
    Dit leek te werken. En produceerde bijvoorbeeld de onderstaande code:

         <?xml version="1.0" encoding="utf-8"?>
        <genereerZaakIdentificatie_Di02 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
          <stuurgegevens xmlns="http://www.egem.nl/StUF/sector/zkn/0310">
            <berichtcode xmlns="http://www.egem.nl/StUF/StUF0301">Di02</berichtcode>
            <zender xmlns="http://www.egem.nl/StUF/StUF0301">
              <organisatie>0392</organisatie>
              <applicatie>CTC</applicatie>
            </zender>
            <ontvanger xmlns="http://www.egem.nl/StUF/StUF0301">
              <organisatie>0392</organisatie>
              <applicatie>ESB</applicatie>
            </ontvanger>
            <referentienummer xmlns="http://www.egem.nl/StUF/StUF0301" />
            <tijdstipBericht xmlns="http://www.egem.nl/StUF/StUF0301">2017051815490919</tijdstipBericht>
            <functie xmlns="http://www.egem.nl/StUF/StUF0301">genereerZaakidentificatie</functie>
          </stuurgegevens>
        </genereerZaakIdentificatie_Di02>


    Echter, bij het versturen van het bericht kom ik de volgende soort fouten tegen:
        Message    "There was an error reflecting type 'vrijeberichten.genereerDocumentIdentificatie_Du02'."    string
    En
        The communication object, System.ServiceModel.ChannelFactory ..., cannot be used for communication because it is in the Faulted state.
        There was an error reflecting type 'vrijeberichten.SurfacePropertyType'.
    
Nu kom berichten over vergelijkbare problemen onder andere hier tegen:
- https://vng-realisatie.github.io/StUF-Standaarden/discussie/gemma/stuf-bg-310/problemen...
- https://vng-realisatie.github.io/StUF-Standaarden/discussie/gemma/stuf-bg-310/fouten-bi...
- https://vng-realisatie.github.io/StUF-Standaarden/discussie/gemma/stuf-bg-310/foutmeldi...
- https://vng-realisatie.github.io/StUF-Standaarden/discussie/gemma/stuf-bg-310/asynchron...
- https://vng-realisatie.github.io/StUF-Standaarden/discussie/gemma/stuf-301/rfc-plaats-a...
- https://vng-realisatie.github.io/StUF-Standaarden/discussie/gemma/koppelvlak-prs/gebrui...


En tot nu toe is de enige werkende fix is het aanpassen van de XSD's of het gebruiken van code van onbekende herkomst die hier staat gepost:
- https://vng-realisatie.github.io/StUF-Standaarden/comment/3925#comment-3925


Is het wellicht mogelijk om (al dan niet via de mail), te kijken waar het importeren van de WSDL - en het genereren van werkende code fout gaat?

Michiel Verhoef

Beste Jeroen,

Uit je vraag begrijp ik dat je probeert code te genereren voor de Zaak- Documentservices? Dat is wat anders dan StUF ZKN. Wat al een goed begin is is het resolven van de schema's met de XSD Resolver, zoals je al gedaan hebt.

Helaas zijn er inderdaad veel problemen met het genereren van code, deze komen alleen voor bij .net. Bij andere programmeertalen als Java komen deze problemen overigens niet voor, het schijnt een probleem te zijn met onder andere nillables.

In de schema's voor StUF 03.02 zijn enkele veranderingen doorgevoerd die het genereren van code moeten vergemakkelijken. Daar heb je echter nu niets aan.

Het voorbeeldbericht wordt niet geaccepteerd door het StUF Testplatform. Na wat prutsen lukte het me het bericht werkend te krijgen door aan het rootelement ook de StUF ZKN namespace toe te kennen (in je voorbeeldbericht staat geen namespace van het bericht genoemd). Dus mogelijk moet je daar nog iets aan instellen, aan het toewijzen van de juiste namespaces voor de rootnodes? NB. het genereren van code, zeker met .net, is niet mijn expertise dus het zijn aannames zonder garantie  :-)

<?xml version="1.0" encoding="utf-8"?>
<genereerZaakIdentificatie_Di02 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.egem.nl/StUF/sector/zkn/0310">
    <stuurgegevens xmlns="http://www.egem.nl/StUF/sector/zkn/0310">
        <berichtcode xmlns="http://www.egem.nl/StUF/StUF0301">Di02</berichtcode>
        <zender xmlns="http://www.egem.nl/StUF/StUF0301">
            <organisatie>0392</organisatie>
            <applicatie>CTC</applicatie>
        </zender>
        <ontvanger xmlns="http://www.egem.nl/StUF/StUF0301">
            <organisatie>0392</organisatie>
            <applicatie>ESB</applicatie>
        </ontvanger>
        <referentienummer xmlns="http://www.egem.nl/StUF/StUF0301"/>
        <tijdstipBericht xmlns="http://www.egem.nl/StUF/StUF0301">2017051815490919</tijdstipBericht>
        <functie xmlns="http://www.egem.nl/StUF/StUF0301">genereerZaakidentificatie</functie>
    </stuurgegevens>
</genereerZaakIdentificatie_Di02>

 

Jeroen Vonk

Dag Michiel,

Hartelijk dank voor je antwoord.
Ik probeer inderdaad de code voor de zaak en documentservices te genereren. 
Helaas lukt dat momenteel nog niet, dus wie weet heeft iemand anders nog tips om in .net de code te genereren.

Ik zal eens gaan kijken of het haalbaar is om hier het koppelvlak anders in Java te faciliteren.
Voor het daadwerkelijk testen van de gegenereerde berichten hebben wij ook toegang tot het testplatform, dus daar maak ik mij momenteel nog niet veel zorgen over.

Met vriendelijke groet,
- Jeroen

John Keulen

Jeroen,

Met de laatste nieuwe versie met de geresolvde schema's is inlezen in Visual Studio (VB) geen probleem, tenminste als je een DLL project probeert te bouwen. Niet de originele schema's overschrijven, alle nieuwe schema's in 1 map samenvoegen.

Groet,

John Keulen

Jeroen Vonk

Dag John,

Bedankt voor je antwoord.
Ik ben er weer ingedoken - en met Visual Basic kom ik bij dezelfde problemen uit.
Het reduceren van de wsdl lukt prima, het inladen in Visual Studio (2015 & 2017) ook.
Echter, pas bij het versturen/ontvangen van een bericht krijg je de genoemde errors (There was an error reflecting...).
Dit is inherent aan het .NET-framework dat voor zowel C# en VB gebruikt wordt.

Ik heb na wat zoekwerk wat onvolledigheden in de meegeleverde OpenGis-bestanden gevonden. Nadat ik dit had gefikst lukt het wel om berichten te versturen.

- Jeroen