Daniel  Kulp wrote:
> 
> On Thursday, August 18, 2011 5:57:02 AM Evangelina wrote:
>> Hi! Thanks for answering.
>> I'm pretty new to CXF so please correct me if I'm wrong, but doesn't the
>> 'mustUnderstand' attribute specifies if a header entry is mandatory or
>> not?
>> From what I saw in the code it just checks if the QName is understood or
>> not, but I haven't seen that it checks the semantics.
>> In my case I would like to be able to validate the header entries against
>> the schema the way I can do with the body.
>> 
>> Surely I can have that logic on an interceptor. But I also wanted to make
>> sure that the 'schema-validation-enabled' attribute is indeed only
>> validating the body, and this is so by design.
> 
> Well, it should also validate any headers that are mapped into parameters
> on 
> the method.   Anything not mapped to parameters will not be processed by
> CXF.
> 
> -- 
> Daniel Kulp
> [email protected]
> http://dankulp.com/blog
> Talend - http://www.talend.com
> 

Hi Dan, 

I could resolve the problem by implementing an interceptor, but now that you
mention I am mapping the header as a parameter on the operation. In that
should the header fields be validated? 

This is the wsdl and schema I'm using:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="validationWS" 
        targetNamespace="http://services.mule.org/"; 
        xmlns:ns1="http://schemas.xmlsoap.org/soap/http"; 
        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; 
        xmlns:tns="http://services.mule.org/"; 
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
        xmlns:val="http://www.example.org/schema";>
  <wsdl:types>
<xs:schema elementFormDefault="unqualified"
targetNamespace="http://services.mule.org/"; version="1.0" 
        xmlns:tns="http://services.mule.org/";
xmlns:xs="http://www.w3.org/2001/XMLSchema";>
<xs:import namespace="http://www.example.org/schema";
schemaLocation="./validationSchema.xsd" />
</xs:schema>
  </wsdl:types>
  
  <wsdl:message name="validationOperationResponse">
    <wsdl:part  name="operationResponse" element="val:validationResponse" />
  </wsdl:message>
  
  <wsdl:message name="validationOperationMessage">
    <wsdl:part name="requestHeader" element="val:validationHead" />
    <wsdl:part name="requestBody" element="val:validationBody"  />
  </wsdl:message>
  
  <wsdl:portType name="ValidationWebService">
    <wsdl:operation name="validationOperation">
      <wsdl:input message="tns:validationOperationMessage" >
    </wsdl:input>
      <wsdl:output message="tns:validationOperationResponse" >
        </wsdl:output>
    </wsdl:operation>
  </wsdl:portType>
  
  <wsdl:binding name="validationWSSoapBinding"
type="tns:ValidationWebService">
    <soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"; required="true"/>
    <wsdl:operation name="validationOperation">
      <soap:operation soapAction="" style="document"/>
      <wsdl:input name="validationOperationRequest" >
        <soap:header use="literal" part="requestHeader"
message="tns:validationOperationMessage" />
        <soap:body use="literal" parts="requestBody" />
      </wsdl:input>
      <wsdl:output name="validationOperationResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="validationWS">
    <wsdl:port binding="tns:validationWSSoapBinding"
name="validationWebServicePort">
      <soap:address location="http://localhost:9999/validationws"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>


<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"; 
        targetNamespace="http://www.example.org/schema"; 
        xmlns:tns="http://www.example.org/schema"; 
        elementFormDefault="qualified">
        <element name="validationMessage" type="tns:ValidationMessage" />
        <element name="validationBody" type="tns:ValidationBody" />
        <element name="validationHead" type="tns:ValidationHeader" />
        <element name="validationResponse" type="string" />
    <complexType name="ValidationHeader">
        <sequence>
                <element name="head1" type="double"></element>
                <element name="head2" type="string"></element>
        </sequence>
    </complexType>
    <complexType name="ValidationBody">
        <sequence>
                <element name="body1" type="double"></element>
                <element name="body2" type="tns:restrictionType"></element>
        </sequence>
    </complexType>
    <complexType name="ValidationMessage">
        <sequence>
                <element name="header" type="tns:ValidationHeader" />
                <element name="body" type="tns:ValidationBody" />
        </sequence>
    </complexType>
        <simpleType name="restrictionType">
        <restriction base="string">
            <pattern value="[0-9]{5}" />
        </restriction>  
        </simpleType>    
        
</schema>


And this is the Soap message:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:sch="http://www.example.org/schema";>
   <soapenv:Header>
      <sch:validationHead>
         <sch:head1>1f2</sch:head1>
         <sch:head2>string</sch:head2>
      </sch:validationHead>
   </soapenv:Header>
   <soapenv:Body>
      <sch:validationBody>
         <sch:body1>1</sch:body1>
         <sch:body2>24273</sch:body2>
      </sch:validationBody>
   </soapenv:Body>
</soapenv:Envelope>

Since the head1 field doesn't have a double value, it should fail according
to the schema but it isn't. Should it be validated or the only option is
adding an interceptor to do it? 

Thanks

--
View this message in context: 
http://cxf.547215.n5.nabble.com/Schema-validation-is-not-validating-elements-from-SoapHeader-tp4705565p4716134.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to