小编Jef*_*rin的帖子

JAX-WS RI 不强制执行 XSD 限制

我目前正在使用 JAX-WS 参考实现(版本 2.1.7)开发一些 Web 服务。它们是基于合同的,即 WSDL 和 XSD 文件不是由 wsgen 生成的。

这使我能够自由地使用 XSD 限制来加强对通过 SOAP 消息传递到我的服务的值的验证。以下是此类“受限”XSD 元素的两个示例:

<xsd:element name="maxResults" minOccurs="1">
  <xsd:simpleType>
    <xsd:restriction base="xsd:positiveInteger">
      <xsd:minInclusive value="1"/>
      <xsd:maxInclusive value="1000"/>
    </xsd:restriction>
  </xsd:simpleType>
</xsd:element>
<xsd:element name="lastName" minOccurs="0">
  <xsd:simpleType>
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="1"/>
      <xsd:maxLength value="25"/>
    </xsd:restriction>
  </xsd:simpleType>
</xsd:element>
Run Code Online (Sandbox Code Playgroud)

我将@SchemaValidation注释添加到我的服务类中以强制架构验证。但是,JAX-WS 并不按预期强制执行验证规则。行为如下:

  • 正确报告缺少的强制元素(例如,缺少maxResults)。
  • 无效值(例如,整数字段中的字符数据)也会正确报告。
  • 间隔限制违规(例如,maxResults> 1000 或maxResults< 1)会通过验证过程而不被报告,并被注入到我的 JAXB 生成的 Java 结构中。无论类型如何,即使负值也被认为是有效的xsd:positiveInteger
  • lastName也不报告字符串长度约束违规(例如,长度超过 25 个字符)。

换句话说,<xsd:element>标签中出现的限制是正确执行的,但<xsd:restriction>在基于 JAX-WS 的上下文中使用时,JAXB 似乎完全忽略了元素。

我编写了一个测试类来使用裸 JAXB(无 …

validation xsd jax-ws restriction

5
推荐指数
1
解决办法
8224
查看次数

标签 统计

jax-ws ×1

restriction ×1

validation ×1

xsd ×1