gpt4 book ai didi

java - 向@XmlElement 添加计数约束?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:00:31 25 4
gpt4 key购买 nike

所以,我回来给你们带来另一个问题。我有一个 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 而不接受第二个 xml 的方式编写我的约束。

再次感谢!

最佳答案

您应该使用 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);
}
}

}

关于java - 向@XmlElement 添加计数约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7572563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com