Ok, so I must use the explicit xsd file validation. I try it, but it does not
work for me. 

Using the same classes I used in another question:

@Path("/luckynumbers")
public class LuckyNumbers {


    @POST
    @Path("/addRequest")
    @Produces({MediaType.APPLICATION_XML})
    @Consumes({MediaType.APPLICATION_XML})
    public String addRequest(RequestWrapper rw) {
        System.out.println(rw);
        return rw.toString();
    }

   @XmlRootElement(name="requestWrapper", namespace="http://luckynumbers";)
    public static class RequestWrapper {
        List<String> theList = new ArrayList();
        String theRequest;


       @XmlElement (name="listItem")
       @XmlElementWrapper
        public Collection<String> getTheList() {
            return theList;
        }

        public void setTheList(List<String> theList) {
            this.theList = theList;
        }
        @XmlAttribute(required=true)
        public String getTheRequest() {
            return theRequest;
        }

        public void setTheRequest(String theRequest) {
            this.theRequest = theRequest;
        }

       @Override
       public String toString() {
           return "RequestWrapper{" +
                   "theList=" + theList +
                   ", theRequest='" + theRequest + '\'' +
                   '}';
       }
   }
}

The xsd file (the content is copy from WADL, saved as
/WEB-INF/schemas/LuckyNumbersRest.xsd. theRequest is required attribute):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
attributeFormDefault="unqualified" elementFormDefault="unqualified">
    <xs:complexType name="requestWrapper">
        <xs:sequence>
            <xs:element minOccurs="0" name="theList">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element maxOccurs="unbounded" minOccurs="0"
name="listItem" type="xs:string"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="theRequest" type="xs:string" use="required"/>
    </xs:complexType>
</xs:schema>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns="http://luckynumbers"; attributeFormDefault="unqualified"
elementFormDefault="unqualified" targetNamespace="http://luckynumbers";>
    <xs:import namespace=""/>
    <xs:element name="requestWrapper" type="requestWrapper"/>
</xs:schema>

The jaxrs configure in beans.xml: 

    <jaxrs:server id="luckyNumbersRest"
                  serviceClass="prototype.rest.LuckyNumbers"
                  address="/LuckyNumbersRest">

        <jaxrs:providers>
          <ref bean="jaxbProvider" />
        </jaxrs:providers>

    </jaxrs:server>

    <bean id="jaxbProvider"
class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">
        <property name="schemaHandler" ref="schemaHolder"/>        
        <property name="marshallerProperties" ref="propertiesMap"/>
    </bean>

    <bean id="schemaHolder"
class="org.apache.cxf.jaxrs.utils.schemas.SchemaHandler">
       <property name="schemas" ref="theSchemas"/>
    </bean>

    <util:list id="theSchemas">
      <value>classpath:/WEB-INF/schemas/LuckyNumbersRest.xsd</value>
    </util:list>

    <util:map id="propertiesMap">
        <entry key="jaxb.formatted.output">
            <value type="java.lang.Boolean">true</value>
        </entry>
    </util:map>


Post XML data <prefix1:requestWrapper
xmlns:prefix1="http://luckynumbers";><theList><listItem>item1</listItem></theList></prefix1:requestWrapper>
without theRequest attribute, I expect the JAXB error like "theRequest must
appear on element requestWrapper", but this not happens, and the XML
response returns successfully: RequestWrapper{theList=[item1],
theRequest='null'}

Could you advice what may make the validation not work? The xsd file not
good, the jaxbprovider not configured well, others? 

Thanks.


--
View this message in context: 
http://cxf.547215.n5.nabble.com/How-to-enable-xml-schema-validation-for-CXF-Restful-web-service-tp4371287p4373720.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to