Utdanningsdirektoratet / PAS2-Public

Kode for PAS som er åpent tilgjengelig
Apache License 2.0
8 stars 2 forks source link

Problemer med validering av PameldteKandidater xml #47

Closed thoraj closed 8 years ago

thoraj commented 8 years ago

Jeg sliter med å få deserialisert xml fra "/api/ekstern/kandidat"

Har studert xsd'er, genererte klasser og rå xml, og ser ikke noen åpenbare feil.

For å sjekke mer har jeg forsøkt å validere xml mot xsd'ene, og testen under feiler med valideringsfeil:

An exception of type 'System.Xml.Schema.XmlSchemaValidationException' occurred in System.Xml.dll but was not handled in user code

Additional information: Elementet http://pas.udir.no/Pamelding:PameldteKandidater er ikke deklarert.

Er veldig usikker på om jeg gjør noe dumt/rart, eller hva som skjer. Men burde ikke testen under fungere?

   [Test]
        public void CanValidatePameldteKandidater()
        {
            // Arrange

            // Set up the namsespaces
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.Schemas.Add("http://pas.udir.no/CommonTypes", "..\\..\\..\\Pas2Client\\Schema\\CommonTypes.xsd");
            settings.Schemas.Add("http://pas.udir.no/Karakteroversikt", "..\\..\\..\\Pas2Client\\Schema\\Karakteroversikt.xsd");
            settings.Schemas.Add("http://pas.udir.no/Pamelding", "..\\..\\..\\Pas2Client\\Schema\\Pamelding.xsd");
            settings.Schemas.Add("http://pas.udir.no/Eksamensplan", "..\\..\\..\\Pas2Client\\Schema\\Eksamensplan.xsd");
            settings.ValidationType = ValidationType.Schema;

            // Create an XmlReader using the defined namespaces
            XmlReader reader = XmlReader.Create(new XmlTextReader("..\\..\\..\\Test\\PameldteKandidater.xml"), settings);
            XmlDocument document = new XmlDocument();

            // Act & assert
            Assert.DoesNotThrow(() => document.Load(reader));
        }

Xml returnert fra "/api/ekstern/kandidat" (lagt inn i filen PameldteKandidater.xml)

<?xml version="1.0" encoding="utf-8"?>
<pa:PameldteKandidater xmlns:ct="http://pas.udir.no/CommonTypes" xmlns:ko="http://pas.udir.no/Karakteroversikt" xmlns:ep="http://pas.udir.no/Eksamensplan" xmlns:pa="http://pas.udir.no/Pamelding">
  <pa:Eksamensperiodekode>V-2016</pa:Eksamensperiodekode>
  <pa:Eksamenspameldinger>
    <pa:Eksamenspamelding>
      <pa:Fagkode>MAT0010</pa:Fagkode>
      <pa:Variant />
      <pa:Kandidatgrupper>
        <pa:Kandidatgruppe>
          <pa:Navn>Klasse 6A</pa:Navn>
          <pa:Kandidatgruppeansvarlige>
            <ct:Kandidatgruppeansvarlig>
              <ct:Fodselsnr>12116833563</ct:Fodselsnr>
              <ct:Fornavn>Thor Arne</ct:Fornavn>
              <ct:Etternavn>Johansen</ct:Etternavn>
              <ct:Malform>Bokmal</ct:Malform>
              <ct:Epostadresse>thjoha @oppad.no</ct:Epostadresse>
              <ct:Mobilnr>90915134</ct:Mobilnr>
            </ct:Kandidatgruppeansvarlig>
          </pa:Kandidatgruppeansvarlige>
          <pa:Kandidater>
            <pa:Kandidat>
              <pa:Fodselsnr>17011099955</pa:Fodselsnr>
              <pa:Fornavn>Kristoffer Berg</pa:Fornavn>
              <pa:Etternavn>Johansen</pa:Etternavn>
              <pa:Malform>Bokmal</pa:Malform>
              <pa:Kandidattype>Elev</pa:Kandidattype>
              <pa:Kandidatnummer>564HBS-V</pa:Kandidatnummer>
            </pa:Kandidat>
            <pa:Kandidat>
              <pa:Fodselsnr>13060099930</pa:Fodselsnr>
              <pa:Fornavn>Kevin</pa:Fornavn>
              <pa:Etternavn>Rønhovde</pa:Etternavn>
              <pa:Malform>Bokmal</pa:Malform>
              <pa:Kandidattype>Elev</pa:Kandidattype>
              <pa:Kandidatnummer>639CRS-V</pa:Kandidatnummer>
            </pa:Kandidat>
          </pa:Kandidater>
        </pa:Kandidatgruppe>
      </pa:Kandidatgrupper>
    </pa:Eksamenspamelding>
  </pa:Eksamenspameldinger>
</pa:PameldteKandidater>
espenekvang commented 8 years ago

Jeg har ikke fått tid til å se på dette i dag, men prøver å få gjort det i morgen. Du hører fra meg.

espenekvang commented 8 years ago

Det ser ut til at du har klart å finne en feil hos oss her. Vi jobber med en fiks for dette nå.

thoraj commented 8 years ago

Ok. Takk.

Thor Arne Johansen Oppad AS

espenekvang commented 8 years ago

Det er to feil her:

  1. Du må benytte:

settings.Schemas.Add("http://pas.udir.no/Pamelding", @"Xsd\PameldteKandidater.xsd");

I stedet for

settings.Schemas.Add("http://pas.udir.no/Pamelding", @"Xsd\Pamelding.xsd");

  1. Når du har endret det vil du se at du får problemer med å deserialisere underelementer til PameldteKandidater. Dette skyldes at elementene har namespace prefix. Vi har dessverre glemt å legge til elementFormDefault='qualified' i XSD som vil løse at du får deserialisert det. Vi har endret dette nå og holder på å bygge ny versjon. Den blir tilgjengelig i testmiljøet i løpet av ettermiddagen.
thoraj commented 8 years ago

Flott.

Ja så jo at det var to xsd'er som bidro til Pamelding namespacet, men misset det i testen :-/

Sjekker med nye xsd'er så snart de er tilgjengelige.

Takker så mye :-)

Thor Arne

espenekvang commented 8 years ago

Nye xsd'er er tilgjengelig i https://eksamen-sas.udir.no

thoraj commented 8 years ago

Her ble jeg litt forvirret en stund.

Lastes ned xsd fra linken dere har oppgitt i toppen av Wiki:

Oppdaterte XSD kan alltid lastes ned fra https://eksamen.udir.no/api/ekstern/skjema

Denne inneholder ikke endringen.

Men linken du anga over:

Nye xsd'er er tilgjengelig i https://eksamen-sas.udir.no

Inneholder oppdaterte xsd'er.

Uansett funker både validering og deserialsering nå :-)

Thor Arne

espenekvang commented 8 years ago

Beklager det, vi har kun tilgjengeliggjort denne endringen i testmiljøet. Det er forventet at vi ruller ut denne endringen i produksjon i morgen.

Jeg har oppdatert WIKI'en slik at man nå ser adressen for XSD for både produksjon og testmiljø.