将计数约束添加到@XmlElement?

时间:2011-09-27 16:32:34

标签: java jaxb

所以,我回答你的另一个问题。我有一个JAXB对象,我从XML文件编组/解组。

代码如下:

@XmlAccessorType(XmlAccessType.FIELD)
public class Line {

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

}

我的XML结构是:

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

现在Java代码也接受了这个:

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

那么,我应该如何编程我的约束,我只接受第一个xml而不是第二个。

再次感谢!

1 个答案:

答案 0 :(得分:3)

您应该使用XSD并根据它验证您的xml。 我们必须使用与其版本对应的xsd验证我们的xml文件:

        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);
                }
            }

        }