如何使生成的类包含来自 XML 模式文档的 Javadoc

2022-09-01 00:38:07

我目前正在使用具有/大多数类型和元素的XML架构。当我从这个XML模式生成Java Beans时,这些Beans的Javadoc只包含一些关于类型/元素允许的内容的通用生成信息。<xsd:annotation><xsd:documentation>

我希望在相关位置看到标签的内容(例如,complextType的该标签的内容应该显示在为表示该complexType而生成的类的Javadoc中)。<xsd:documentation>

有没有办法做到这一点?

编辑:此 XML 模式将在带有 JAX-WS 的 WSDL 中使用,因此此标记可能也是合适的。

编辑2:我读过关于.据我所知,我可以在单独的 JAXB 绑定文件中指定它,也可以直接在 XML 模式中指定它。这几乎可以解决我的问题。但我宁愿使用现有的标签,因为Javadoc不是文档的主要目标(它主要是关于数据结构的信息,而不是关于从它生成的Java Bean的信息),并且允许非JAXB工具访问这些信息。在两者中提供文档并“感觉”是错误的,因为我无缘无故地复制了数据(和工作)。<jxb:javadoc><xsd:documentation><jxb:javadoc>xsd:documentation>

编辑3:感谢Pascal的答案,我意识到我已经有一半的解决方案:s被写到它的Javadoc的开头!问题仍然是使用s和s(这也可以导致类)和元素仍然是无Javadoc的。<xsd:documentation>complexTypecomplexTypesimpleType


答案 1

我从来没有能够将常规放置在java源代码中,除非并且只有当它是复杂类型时。元素、简单类型等的文档将被忽略。xsd:documentation

所以,我最终使用.为此,请在元素中包含 的定义。jxb:javadocxmlns:jxb="http://java.sun.com/xml/ns/jaxb"<xsd:schema>

将子项添加到 或 或 :<xsd:complexType><xsd: element><xsd:attribute>

<xsd:annotation><xsd:appinfo><jxb:XXX><jxb:javadoc>
  This is my comment for a class/property
</jxb:javadoc></jxb:XXX></xsd:appinfo></xsd:annotation>

其中 XXX 是“类”或“属性”。

对于您写孩子到的包裹xsd:schema

<xsd:annotation><xsd:appinfo><jxb:schemaBindings><jxb:package name="com.acme"><jxb:javadoc>
  This is my comment for a package
</jxb:javadoc></jxb:package></jxb:schemaBindings></xsd:appinfo></xsd:annotation>

编写 HTML 文档需要用括号括起来<![CDATA[ --- ]]>

(编辑:在写我的答案时,问题已被OP编辑,所以我正在相应地更新它)

在我的情况下,javadoc是唯一的目标,因此使用是可以接受的。但是你的更新是完全有道理的,实际上,我完全同意你的观点。可悲的是,我从未找到您描述的情况的理想解决方案(所以我将非常仔细地遵循这个问题)。也许你可以使用类似 xframe 的东西来生成文档,但这并不能回答这个问题。jxb:javadocxsd:documentation


答案 2

这在 JAXB 引用实现中是不可能的。即使您尝试编写 XJC 插件,您也会发现插件 API 没有提供对 Schema 定义的引用,因此无法提取此信息。

我们唯一的希望是JAXB的未来版本能够解决这种情况。这里有一个开放的功能请求


推荐