Laden...

[Erledigt] XML Validierung gegen XSD

Erstellt von Ahrimaan vor 11 Jahren Letzter Beitrag vor 11 Jahren 689 Views
A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 11 Jahren
[Erledigt] XML Validierung gegen XSD

verwendetes Datenbanksystem: XML/XSD

Hallo zusammen,

ich habe eine SoapExtension geschrieben, welche die SOAP Nachricht gegen eine XSD prüft und validiert:

		public override void ProcessMessage(SoapMessage message)
		{
			switch (message.Stage)
			{
					case SoapMessageStage.BeforeDeserialize:
						if (!ValidateAgainstSchema(message.Stream))
						{
							throw new SoapException("Message could not be validated against Schema", new XmlQualifiedName("ValidationError"));
						}
					message.Stream.Position = 0;
					break;
			}
		}
		private bool ValidateAgainstSchema(Stream s)
		{
			bool validationResult = true;
			var settings = new XmlReaderSettings { ValidationType = ValidationType.Schema };
			settings.ValidationEventHandler += (o, e) => { validationResult = false; };			
			try
			{
				settings.Schemas.Add(null, AppDomain.CurrentDomain.BaseDirectory + _xsdFile);
				using (XmlReader validatingReader = XmlReader.Create(s, settings))
				{
					while (validatingReader.Read())
					{
						//Do nothing just read
					}
				}
			}
			catch (Exception)
			{
				validationResult = false;
			}
			return validationResult;
		}

Dazu sende ich einfach folgende NAchricht :

   <soapenv:Header>
      <upl:AuthenticationHeader>
         <upl:Username></upl:Username>
      </upl:AuthenticationHeader>
   </soapenv:Header>
   <soapenv:Body>
      <upl:LoginUser>
         <upl:version>1.0.0</upl:version>
      </upl:LoginUser>
      <SCHADCODE>DAS SOLLTE KRACHEN GEHEN</SCHADCODE>
   </soapenv:Body>

Ind er XSD sind alle Elemente definiert, ausser das Tag SCHADCODE
Leider sagt die Validierung dass alles ok ist, obwohl der Tag SCHADCODE gar nicht vorkommen darf ....
mache ich was falsch ?

4.931 Beiträge seit 2008
vor 11 Jahren

Hallo,

hast du denn schon den Debugger benutzt, d.h. wird der ValidationEventHandler angesprungen?
Bei meinem Testprojekt hatte ich noch


xmlReaderSettings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;

gesetzt gehabt.

A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 11 Jahren

Hallo,

er springt nicht in den Eventhandler rein.
Sobald ich das Warning Flag setze, fliegt er mir schon bei soap:Envelope raus, da er sagt dafür gibt es kein Schema (logisch ist ja ein SoapHeader).
Beim Tag SCHADCOE setzt er aber auch aus.
Ist jetzt die Frage ob ich Händisch noch ein SOAP Schema mit hinzufüge was valide ist also body und header mit aufnehme

Grüße

A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 11 Jahren

Hallo,
ok, das Flag war es tatsächlich.
Wenn ich noch die Soap xsds mit in den SchemaCache lade, stolpert er tatsächlich nur über das
SCHADCODE Tag so wie es sein sollte 😃

Grüße