Validating Soap Envelope

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Patrick Brunmayr

    #1

    Validating Soap Envelope

    Hello

    I have a big Problem with validating a Soap Envelope. I have
    downloaded the xsd for a soap envelope from http://schemas.xmlsoap.org/soap/envelope/

    The validation succeeds as lonng as i don't use elements in body with
    a xsi:type attribute!

    The Problem is that foo:person is an abstract type and foo:driver is
    dervived from it. So using a foo:person is not allowed until specifing
    the type of person per xsi:type. The below example demonstrates this
    problem. When i try to validate this with the saxonica validator
    following error occurs

    Validation error on line 6 column 60 of test xml:
    Unknown type {foo:driver} specified in xsi:type attribute SAXON
    8.9.0.3 from Saxonica validate complete

    The definition of of sopa body says

    <xs:sequence>
    <xs:any namespace="##an y" minOccurs="0" maxOccurs="unbo unded"
    processContents ="lax"/>
    </xs:sequence>

    So when elements from other namespacas are found, try to find a schema
    defintion otherwise don't care

    In my example there is no schema defintion for "foo:driver " because
    the soap schema can not know about the schema where "foo:driver " is
    defined! I have no possibility at this stage of validation to include
    the schema defintion for those types. I need the xsi:type attribute
    coz the sopa body elements will be validatet at later stage. Dont
    specfifing the xsi:type attribute whill pass the soap envelope
    validation but not thr later body elements validation! How can i solve
    this

    My Sample Soap Request

    <env:Envelope xmlns:env="http ://schemas.xmlsoap .org/soap/envelope/"
    xmlns:enc="http ://schemas.xmlsoap .org/soap/encoding/" xmlns:xs="http://
    www.w3.org/1999/XMLSchema" xmlns:xsi="http ://www.w3.org/2001/XMLSchema-
    instance"
    xsi:schemaLocat ion="http://schemas.xmlsoap .org/soap/envelope/
    envelope11.xsd" >
    <env:Header/>
    <env:Body>
    <foo:person xmlns:foo="http ://foo" xsi:type="foo:d river">
    </foo:person>
    </env:Body>
    </env:Envelope>

Working...