标签:jaxb eclipselink bean-validation moxy java
如果我正确理解JSR-303的精神,它旨在允许在应用程序体系结构的多个层上应用Bean(数据)验证.
尽管我看到了一些有关JSR-303的JPA / Hibernate应用程序的讨论,但我正在努力寻找是否有任何可行的实现可应用于Web服务/ JAXB编组(即更靠近表示层).
这是我因Bean验证而失败的一个相当人为的示例:
方类
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
@XmlRootElement(name = "square")
public class Square {
@Size(min = 4, max = 4)
private int numberOfSides;
public void setNumberOfSides(int numSides) {
this.numberOfSides = numSides;
}
public int getNumberOfSides() {
return this.numberOfSides;
}
}
测试班
@RunWith(JUnit4.class)
public class BeanValidationTest {
@Test
public void Should_not_unmarshal_invalid_numberOfSides_value() throws JAXBException {
String xml = "<square>" +
" <numberOfSides>3</numberOfSides>" +
"</square>";
JAXBContext context = org.eclipse.persistence.jaxb.JAXBContext.newInstance(Square.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Square result = (Square) unmarshaller.unmarshal(new StringReader(xml));
assertThat(result.getNumberOfSides(), equalTo(4));
}
}
注意:由于预期的边数约束,测试将失败,并且此操作将失败:
java.lang.AssertionError:
Expected: <4>
but: was <3>
我将重新编写以期望Bean验证异常,但我不知道会发生什么,因为Bean验证不会触发.
我的困惑是,我认为我什至不应该在上述测试中得出断言,并且成功地对3值进行反序列化,而没有一个:
>引发异常
>因为属性无效而忽略了映射(我真的希望JSR-303实现不会这样做-除非我明确要求,否则这将是意外行为)
因此,总而言之,我认为这让我选择了一个问题,或者:
答:如何指示EclipseLink MOXy应用Bean验证,或者如果它无法在类路径中找到JSR-303实现,它应该至少警告我?
B.或者,还有另一种(更好的)方法来实现我所要求的吗?
(假设我知道我可以根据需要手动验证和/或实现@XmlJavaTypeAdapter,它们并不是我首选的优雅解决方案)
版本(如果相关):
> Java 7
> EclipseLink 2.5.2
解决方法:
我认为您要的是Eclipse Link 2.6.0.另请参见https://bugs.eclipse.org/bugs/show_bug.cgi?id=431803和https://wiki.eclipse.org/EclipseLink/Development/2.6.0
标签:jaxb,eclipselink,bean-validation,moxy,java 来源: https://codeday.me/bug/20191121/2048520.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。