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.