java - 使用 xsd :any for extensible schema

标签 java web-services xsd jaxb xmlbeans

直到现在,我一直通过定义一个具有“名称”和“值”属性的占位符元素来处理扩展,如下例所示

<root>
   <typed-content>
      ...
   </typed-content>
   <extension name="var1" value="val1"/>
   <extension name="var2" value="val2"/>
....
</root>

我现在打算改用 xsd:any。如果您能帮助我选择最佳方法,我将不胜感激

  1. 如果我指定 processContents="strict",xsd:any 比我以前的方法有什么附加值
  2. EAI/ESB 工具/库能否针对我返回的任意元素执行 XPATH 表达式
  3. 我看到各种绑定(bind)工具在生成绑定(bind)代码时分别处理这个问题。如果我包含一个 namespace="http://mynamespace" 并在代码生成期间提供“http://mynamespace”的模式,这是否是相同的情况?
  4. 这是否符合 WS-I 标准?
  5. 有没有我遗漏的问题?

谢谢

最佳答案

  1. 使用 <xsd:any processContents="strict">使人们能够在不更改原始模式的情况下向他们的 XML 实例文档添加扩展。这是它给您带来的关键好处。
  2. 是的。与操作实例相比,工具不关心模式是什么样的,它们查看的是实例文档。对他们来说,使用 <xsd:any> 并不重要还是不是。
  3. 绑定(bind)工具一般不处理<xsd:any>非常优雅。这是可以理解的,因为他们没有关于它可能包含什么的信息,所以他们通常会给你一个无类型的占位符。由应用程序代码在运行时处理它。 JAXB 很特别(至少是 RI),但它是可行的。
  4. 是的。这是非常好的 XML Schema 实践,WS-I 支持所有有效的 XML Schema
  5. <xsd:any>由于绑定(bind)的非类型化性质,这让程序员的生活变得有点困难,但是如果您需要支持任意扩展点,这就是实现它的方法。但是,如果您的扩展定义明确并且没有更改,那么可能不值得为此烦恼。

关于java - 使用 xsd :any for extensible schema,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4882157/

相关文章:

c# - 将多个 XSD 合并到一个文件中

xsd - 为什么它被称为可空?

Java MyBatis Freemarker 动态 SQL

java - 如何设置根据当前时间自动创建文件名?

java - 将对象传递给网络服务

.net - Web 服务还是 DLL?

java - 将 @EmbeddedId 与 JpaRepository 一起使用

java - 无法实例化枚举中的类型错误

java - 使用 Grizzly 作为 Web 服务引擎

java - JAXB 绑定(bind)文件中的 XPath 评估导致目标节点为空