2017-01-05 8 views
0

Я пытаюсь проверить входящую XML-строку [Тип данных, Обязательный, Проверка длины].JAXB XML Обязательная проверка поля

Сначала я конвертирую входящий XML-адрес в соответствующий объект Java POJO с помощью JAXB. Мне нужно использовать проверку JAXB при unmarshalling. Моя входящая строка XML выглядит.

<Message> 
    <Body> 
     <Id></Id> // This is Mandatory field but incoming value is empty also it is integer field 
     <Name>Siva</Name> // Input is valid 
     <Age>ss</Age> // This is integer fields but incoming value is string 
     <Mobile>999999999999999</Mobile> // length should be 10.. but is is exceeded 
    </Body> 
</Message> 

Мой XSD является:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:element name="Mobile"> 
<xs:simpleType> 
    <xs:restriction base="xs:long"> 
    <xs:minLength value="10"/> 
    <xs:maxLength value="10"/> 
    </xs:restriction> 
</xs:simpleType> 
</xs:element> 

    <xs:element name="Message"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Body"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element type="xs:int" name="Id" minOccurs="1"/> 
       <xs:element type="xs:string" name="Name"/> 
       <xs:element type="xs:string" name="Age"/> 
       <xs:element type="xs:long" name="Mobile"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Мой JAXB Java код:

JAXBContext context = JAXBContext.newInstance(Employee.class); 

     SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
     Schema schema = sf.newSchema(new File("resources/Employee.xsd")); 

     Unmarshaller unmarshaller = context.createUnmarshaller(); 

     unmarshaller.setSchema(schema); 
     unmarshaller.setEventHandler(new EmployeeValidationEventHandler()); 

     Employee employee = (Employee) unmarshaller.unmarshal(new File("resources/Employee.xml")); 

я попробовал все, но это не работает для меня. Пожалуйста, помогите мне.

ответ

1

Для мобильного элемента в вашем XSD нет правильного типа. Попробуй вот так.

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:element name="Message"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Body"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element type="xs:int" name="Id" minOccurs="1"/> 
          <xs:element type="xs:string" name="Name"/> 
          <xs:element type="xs:string" name="Age"/> 
          <xs:element name="Mobile"> 
           <xs:simpleType> 
            <xs:restriction base="xs:long"> 
             <xs:minLength value="10"/> 
             <xs:maxLength value="10"/> 
            </xs:restriction> 
           </xs:simpleType> 
          </xs:element> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

+0

Отметил & Спасибо .. Но проверка обязательное поле тоже не работает. – DEADEND