Hi Pradeep, XSD schema seems validating only few levels of the policy files. Is there any reason for not validating full config?
On Tue, Apr 29, 2014 at 10:47 AM, Pradeep Fernando <[email protected]>wrote: > Hi Akila, > > > On Mon, Apr 28, 2014 at 1:24 PM, Akila Ravihansa Perera < > [email protected]> wrote: > >> Hi Pradeep, >> >> I have some concerns regarding the schema. >> >> 1. In partition deployment, do we really need to make it mandatory to >> include partitionMin and partitionMax? >> IMO, minOccurs should be 0 for these two properties since this can be >> overridden in the deployment definition >> > > +1. Please go ahead and change > >> >> 2. What is the need for having a sequence in properties definition? >> For eg - In cartridge definition if the user don't enter the values in >> the order that you have defined in the schema it won't validate. IMO, >> we should use <xs:choice> instead of <xs:sequence> when describing >> properties. >> > > Sorry i did not get you. I used xs:all when definining property arrays. > > >> >> Thanks. >> >> On Wed, Apr 23, 2014 at 4:22 PM, Pradeep Fernando <[email protected]> >> wrote: >> > Hi devs, >> > >> > Now the API spits error messages irrespective of the backend exception. >> It >> > sends the JSON error message even if there is an Nullpointer in our >> backend. >> > Writing a exception mapper for throwable did the trick. >> > >> > Here is the schema I came up with for validating input. I derived it >> from >> > the sample inputs i have. Please review it. Pretty sure there is space >> for >> > improvements particularly min occurs. >> > >> > >> > <?xml version="1.0" encoding="UTF-8" ?> >> > <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> >> > <xs:element name="partition"> >> > <xs:complexType> >> > <xs:sequence> >> > <xs:element name="id" type="xs:string" minOccurs="1" >> > maxOccurs="1" nillable="false"/> >> > <xs:element name="provider" type="xs:string" >> minOccurs="1" >> > maxOccurs="1" nillable="false"/> >> > <xs:element name="property" minOccurs="1" >> > maxOccurs="unbounded"> >> > <xs:complexType> >> > <xs:all> >> > <xs:element name="name" type="xs:string" >> > minOccurs="1" maxOccurs="1" nillable="false"/> >> > <xs:element name="value" type="xs:string" >> > minOccurs="1" maxOccurs="1" nillable="false"/> >> > </xs:all> >> > </xs:complexType> >> > </xs:element> >> > <xs:element name="partitionMin" type="xs:int" >> minOccurs="1" >> > maxOccurs="1" nillable="false"/> >> > <xs:element name="partitionMax" type="xs:int" >> minOccurs="1" >> > maxOccurs="1" nillable="false"/> >> > </xs:sequence> >> > </xs:complexType> >> > </xs:element> >> > >> > <xs:element name="autoscalePolicy"> >> > <xs:complexType> >> > <xs:sequence> >> > <xs:element name="id" type="xs:string" minOccurs="1" >> > maxOccurs="1" nillable="false"/> >> > <xs:element name="loadThresholds" minOccurs="1" >> > maxOccurs="1" nillable="false"> >> > <xs:complexType> >> > <xs:all> >> > <xs:element name="requestsInFlight" >> > type="thresholdValues" minOccurs="1" maxOccurs="1" nillable="false"/> >> > <xs:element name="memoryConsumption" >> > type="thresholdValues" minOccurs="1" maxOccurs="1" nillable="false"/> >> > <xs:element name="loadAverage" >> > type="thresholdValues" minOccurs="1" maxOccurs="1" nillable="false"/> >> > </xs:all> >> > </xs:complexType> >> > </xs:element> >> > </xs:sequence> >> > </xs:complexType> >> > </xs:element> >> > >> > <xs:element name="deploymentPolicy"> >> > <xs:complexType> >> > <xs:sequence> >> > <xs:element name="id" type="xs:string" maxOccurs="1" >> > minOccurs="1" nillable="false"/> >> > <xs:element name="partitionGroup"> >> > <xs:complexType> >> > <xs:sequence> >> > <xs:element name="id" type="xs:string" >> > maxOccurs="1" minOccurs="1" nillable="false"/> >> > <xs:element name="partitionAlgo" >> minOccurs="1" >> > maxOccurs="1" nillable="false"> >> > <xs:simpleType> >> > <xs:restriction base="xs:string"> >> > <xs:enumeration >> > value="round-robin"/> >> > <xs:enumeration >> > value="one-after-another"/> >> > </xs:restriction> >> > </xs:simpleType> >> > </xs:element> >> > <xs:element name="partition" minOccurs="1" >> > maxOccurs="unbounded"> >> > <xs:complexType> >> > <xs:all> >> > <xs:element name="id" >> > type="xs:string" maxOccurs="1" minOccurs="1" nillable="false"/> >> > <xs:element name="partitionMax" >> > type="xs:int" minOccurs="1" maxOccurs="1" nillable="false"/> >> > <xs:element name="partitionMin" >> > type="xs:int" minOccurs="1" maxOccurs="1" nillable="false"/> >> > </xs:all> >> > </xs:complexType> >> > </xs:element> >> > </xs:sequence> >> > </xs:complexType> >> > </xs:element> >> > </xs:sequence> >> > </xs:complexType> >> > </xs:element> >> > >> > <xs:element name="cartridgeDefinitionBean"> >> > <xs:complexType> >> > <xs:sequence> >> > <xs:element name="type" type="xs:string" minOccurs="1" >> > maxOccurs="1" nillable="false"/> >> > <xs:element name="provider" type="xs:string" >> minOccurs="1" >> > maxOccurs="1" nillable="false"/> >> > <xs:element name="host" type="xs:string" minOccurs="1" >> > maxOccurs="1" nillable="false"/> >> > <xs:element name="displayName" type="xs:string" >> > minOccurs="1" maxOccurs="1" nillable="false"/> >> > <xs:element name="description" type="xs:string" >> > minOccurs="1" maxOccurs="1" nillable="false"/> >> > <xs:element name="version" type="xs:float" minOccurs="1" >> > maxOccurs="1" nillable="false"/> >> > <xs:element name="defaultAutoscalingPolicy" >> type="xs:string" >> > minOccurs="0" maxOccurs="1" nillable="false"/> >> > <xs:element name="multiTenant" type="xs:boolean" >> > minOccurs="1" maxOccurs="1" nillable="false"/> >> > <xs:element name="portMapping" minOccurs="1" >> > maxOccurs="unbounded"> >> > <xs:complexType> >> > <xs:all> >> > <xs:element name="protocol" type="xs:string" >> > maxOccurs="1" minOccurs="1" nillable="false"/> >> > <xs:element name="port" type="xs:int" >> > minOccurs="1" maxOccurs="1" nillable="false"/> >> > <xs:element name="proxyPort" type="xs:int" >> > minOccurs="1" maxOccurs="1" nillable="false"/> >> > </xs:all> >> > </xs:complexType> >> > </xs:element> >> > <xs:element name="iaasProvider" minOccurs="0" >> > maxOccurs="unbounded"> >> > <xs:complexType> >> > <xs:sequence> >> > <xs:element name="type" type="xs:string" >> > minOccurs="1" maxOccurs="1" nillable="false"/> >> > <xs:element name="imageId" type="xs:string" >> > minOccurs="1" maxOccurs="1" nillable="false"/> >> > <xs:element name="maxInstanceLimit" >> > type="xs:int" minOccurs="1" maxOccurs="1" nillable="false"/> >> > <xs:element name="property" minOccurs="1" >> > maxOccurs="unbounded"> >> > <xs:complexType> >> > <xs:all> >> > <xs:element name="name" >> > type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> >> > <xs:element name="value" >> > type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> >> > </xs:all> >> > </xs:complexType> >> > </xs:element> >> > </xs:sequence> >> > </xs:complexType> >> > </xs:element> >> > <xs:element name="loadBalancer" minOccurs="0" >> maxOccurs="1" >> > nillable="true"> >> > <xs:complexType> >> > <xs:sequence> >> > <xs:element name="type" type="xs:string" >> > minOccurs="1" maxOccurs="1" nillable="false"/> >> > <xs:element name="property" minOccurs="1" >> > maxOccurs="unbounded"> >> > <xs:complexType> >> > <xs:all> >> > <xs:element name="name" >> > type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> >> > <xs:element name="value" >> > type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/> >> > </xs:all> >> > </xs:complexType> >> > </xs:element> >> > </xs:sequence> >> > </xs:complexType> >> > </xs:element> >> > <xs:element name="property" minOccurs="0" >> > maxOccurs="unbounded"> >> > <xs:complexType> >> > <xs:all> >> > <xs:element name="name" type="xs:string" >> > minOccurs="1" maxOccurs="1" nillable="false"/> >> > <xs:element name="value" type="xs:string" >> > minOccurs="1" maxOccurs="1" nillable="false"/> >> > </xs:all> >> > </xs:complexType> >> > </xs:element> >> > </xs:sequence> >> > </xs:complexType> >> > </xs:element> >> > >> > <xs:complexType name="thresholdValues"> >> > <xs:all> >> > <xs:element name="average" type="xs:int" minOccurs="1" >> > maxOccurs="1"/> >> > <xs:element name="gradient" type="xs:float" minOccurs="1" >> > maxOccurs="1"/> >> > <xs:element name="secondDerivative" type="xs:float" >> > minOccurs="1" maxOccurs="1"/> >> > <xs:element name="scaleDownMarginOfGradient" type="xs:float" >> > minOccurs="1" maxOccurs="1"/> >> > <xs:element name="scaleDownMarginOfSecondDerivative" >> > type="xs:float" minOccurs="1" maxOccurs="1"/> >> > </xs:all> >> > </xs:complexType> >> > </xs:schema> >> > >> > >> >> >> >> -- >> Akila Ravihansa Perera >> Software Engineer >> WSO2 Inc. >> http://wso2.com >> >> Phone: +94 77 64 154 38 >> Blog: http://ravihansa3000.blogspot.com >> > > > > -- > Pradeep Fernando. > http://pradeepfernando.blogspot.com/ > -- Best Regards, Nirmal Nirmal Fernando. PPMC Member & Committer of Apache Stratos, Senior Software Engineer, WSO2 Inc. Blog: http://nirmalfdo.blogspot.com/
