2011-09-27 6 views
3

그래서, 다시 당신과 관련된 질문이 있습니다. XML 파일에서 마샬링/디 마샬링하는 JAXB 개체가 있습니다.@XmlElement에 개수 ​​제한을 추가 하시겠습니까?

@XmlAccessorType(XmlAccessType.FIELD) 
public class Line { 

    @XmlElement(required = true) 
    @Min(1) 
    private int quantity; 
... 

} 

내 XML 구조는 다음과 같습니다 :

코드는 같은 것입니다

<line> 
     <quantity>2</quantity> 
    </line> 

이제 자바 코드도이를 받아 들인다 : 그래서

<line> 
     <quantity>2</quantity> 
     <quantity>2</quantity> 
    </line> 

, 내가 어떻게 프로그래밍해야 첫 번째 xml 만 허용하고 두 번째는 허용하지 않는 방식으로 내 제약 조건을 적용합니다.

다시 한번 감사드립니다!

답변

3

XSD를 사용하고 xml에 대해 유효성을 검사해야합니다. xml 파일의 버전과 일치하는 xsd를 확인해야했습니다.

 ValidationEventCollector vec = new ValidationEventCollector(); 

     SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 

     URL xsdURL = getClass().getResource("/xsd/" + xsd); 
     Schema schema = sf.newSchema(xsdURL); 

     //You should change your jaxbContext here for your stuff.... 
     Unmarshaller um = (getJAXBContext(NotificationReponseEnum.NOTIFICATION, notificationWrapper.getEnteteNotification().getTypeNotification())) 
       .createUnmarshaller(); 
     um.setSchema(schema); 

     try { 

      StringReader reader = new StringReader(xml); 
      um.setEventHandler(vec); 
      um.unmarshal(reader); 

     } catch (javax.xml.bind.UnmarshalException ex) { 

      if (vec != null && vec.hasEvents()) { 
       erreurs = new ArrayList<MessageErreur>(); 
       for (ValidationEvent ve : vec.getEvents()) { 
        MessageErreur erreur = new MessageErreur(); 
        String msg = ve.getMessage(); 
        ValidationEventLocator vel = ve.getLocator(); 
        int numLigne = vel.getLineNumber(); 
        int numColonne = vel.getColumnNumber(); 
        erreur.setMessage(msg); 
        msgErreur.setCode(ve.getSeverity()) 
        erreur.setException(ve.getLinkedException()); 
        erreur.setPosition(numLigne, numColonne); 
        erreurs.add(erreur); 

        logger.debug("Erreur de validation xml" + "erreur : " + numLigne + "." + numColonne + ": " + msg); 
       } 
      } 

     } 
관련 문제