对于 Web 服务,我从 WSDL/XSD 生成对象。典型的 XML 如下所示:
<Document>
...
<Destination>
<Type>Person</Type>
<Name>Someone</Name>
<Address>
<Street>Main Street</Street>
<City>Foo</City>
</Address>
</Destination>
...
</Document>
因此,当指定 Destination 时,我必须根据许多规则对其进行验证:
if (document.getDestination() != null) {
... check validity
}
但是,有人通过了:
<Destination/>
它不再为空,但我的验证拒绝了它。我想写:
if (document.getDestination() != null && !document.isEmpty()) {
... check validity
}
我不喜欢检查每个子元素是否存在的想法,因为我会在某些时候错过一个子元素并产生奇怪的错误。 我从 EclipseLink MOXy 实现中看到了 XMLNullRepresentationType,但我使用的是 Sun WebService 堆栈。这很遗憾,因为这对我的问题来说是一个很好的解决方案,但现在不可能。
有谁知道检查元素是否为空的方法吗? (我再说一遍,它是一个复杂类型,而不是一个字符串)。枚举属性并自动检查它们也许?
谢谢。
最佳答案
您可以在 WebService 端点上使用 JAX-WS @SchemaValidation
注释来强制根据提供的架构验证请求。如果您定义 Destination 元素的子元素是必需的,则省略它们将使架构验证失败。
您可以在 @SchemaValidation
上插入自己的错误处理程序,以向用户报告一条不错的错误消息。
关于java - JAXWS/JAXB 检查对象是否为空(不是字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6651801/