java - JAXWS/JAXB 检查对象是否为空(不是字符串)

标签 java jaxb jax-ws

对于 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/

相关文章:

java - 如何安装用于构建 Android 源代码的 Java 5 SDK?

java - Jersey 将空列表和单元素列表序列化为数组

java - 从 wsdl2java 生成的代码中省略 getter 和 setter

java - ejb中的Web服务问题

java - JAXWS - 设置 WSDL 请求超时所需的帮助

java - REST - 如何使用 Jersey 传递一个 long in 参数数组?

java - C 的 Crypt() 类似 Java 中的函数

java - 如何使用princeXML自动拆分表

java - 泛型函数的迭代

json - 如何自定义将 JAXB 对象列表序列化为 JSON?