Добавить ограничение на количество в @XmlElement? - PullRequest
3 голосов
/ 27 сентября 2011

Итак, я вернулся с другим вопросом для вас, ребята.У меня есть объект 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 Ответ

3 голосов
/ 27 сентября 2011

Вы должны использовать 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);
                }
            }

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...