使用选项“ -Xinject-code -extension ”插入 XJC+xsd+jxb 代码

2024-02-26

我正在尝试使用扩展程序“-Xinject-代码” of xjc将一些代码添加到我生成的类中。对于以下简单的 xsd 架构...

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="MyList" >
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="MyItem" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="MyItem">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="id" type="xs:int"/>
        <xs:element name="name" type="xs:string"/>
      </xs:sequence>
   </xs:complexType>
  </xs:element>

</xs:schema>

..我已关联以下绑定:

<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings 
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:ci="http://jaxb.dev.java.net/plugin/code-injector"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
jxb:extensionBindingPrefixes="ci "
jxb:version="2.1"
>

<jxb:bindings schemaLocation="test.xsd">
    <jxb:bindings node="/xs:schema/xs:element[@name='MyItem']">
        <ci:code>
            @Override
            public String toString() { return this.getName();}
        </ci:code>
    </jxb:bindings>
</jxb:bindings>

</jxb:bindings>

运行 xjc 会产生以下输出:

$ xjc -target 2.1 -verbose -Xinject-code -extension -d . -p generated -b test.jxb test.xsd 
parsing a schema...
compiling a schema...
[INFO] generating code
unknown location

generated/MyItem.java
generated/MyList.java
generated/ObjectFactory.java

但文件“ generated/MyItem.java”不包含新方法“toString”。我应该如何解决这个问题? “未知位置”消息是什么?

Note:

$ xjc -version
xjc 2.2.4

EDIT:

将 xsd:element 更改为 xsd:complexType 可以完成以下工作:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">


<xs:complexType name="MyItemType">
  <xs:sequence>
        <xs:element name="id" type="xs:int"/>
        <xs:element name="name" type="xs:string"/>
  </xs:sequence>
</xs:complexType> 

  <xs:element name="MyList" >
    <xs:complexType>
      <xs:sequence>
        <xs:element name="MyItem" type="MyItemType" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>

and

<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings 
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:ci="http://jaxb.dev.java.net/plugin/code-injector"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
jxb:extensionBindingPrefixes="ci "
jxb:version="2.1"
>

<jxb:bindings schemaLocation="test.xsd">
    <jxb:bindings node="/xs:schema/xs:complexType[@name='MyItemType']">
        <ci:code>
            @Override
            public String toString() { return this.getName();}
        </ci:code>
    </jxb:bindings>
</jxb:bindings>

</jxb:bindings>

我现在可以在文件“ generated/MyItemType.java”中看到代码

$ tail  generated/MyItemType.java


            @Override
            public String toString() { return this.getName();}

}

但我如何告诉 xjc 生成代码而不更改 xsd 文件?


请尝试/xs:schema/xs:element[@name='MyItem']/xs:complexType.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用选项“ -Xinject-code -extension ”插入 XJC+xsd+jxb 代码 的相关文章

随机推荐

  • 为什么在使用“using namespace std;”时此代码中出现错误和“位/stdc++.h”?

    实际上 这段代码在 DEV C 中运行良好 但是当我将其放入 Hacker Rank 面板时 它给出了这个错误 对函数的引用不明确 尽管所有在线编译器都给出了错误 我不认为这里函数重载会造成中断 因为这个错误主要来自函数重载 include
  • 如何将一个 JavaScript 文件包含在另一个不在浏览器中运行的 JavaScript 文件中? [复制]

    这个问题在这里已经有答案了 我知道以前已经有人问过很多类似的问题 我的情况的不同之处在于 我使用 Windows Scripting Host 并从 DOS 命令行运行脚本 而不是从浏览器内部运行脚本 我能想到的唯一方法是使用以下命令从磁盘
  • foreignKey 与 OneToOne 字段 django [重复]

    这个问题在这里已经有答案了 我需要使用一些附加字段来扩展 django 用户 我在那里找到了两种不同的方式 class UserProfile models Model user models OneToOneField User othe
  • 与 mypy 的比较类型

    我正在尝试创建一个泛型类来表示一个值具有下限和上限 并强制执行这些界限 from typing import Any Optional TypeVar T TypeVar T class Bounded object def init se
  • Common.Logging 有其他选择吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在其模板中使用 Angular Directive 属性

    如何在指令中使用属性的值 我的元素如下所示 div class tooltip icon div 我想在我的指令模板中使用它 如下所示 mainApp directive myTooltip function allowed event l
  • 重复文本查找

    我的主要问题是试图找到一个合适的解决方案来自动转动这个 例如 d c d f d c d f d c d f d c d f 进入这个 d c d f 4 即查找彼此相邻的重复项 然后从这些重复项中制作一个较短的 循环 目前我还没有找到合适
  • 在python中评估Xpath2.0

    我有一个 XPath 表达式 如下所示 if replace p 1 text H h hello then p 1 text else if p 1 text world then p 2 text else notFound 我想显示哪
  • 这2个背包算法一样吗? (他们总是输出相同的东西吗)

    在我的代码中 假设C是容量 N是物品数量 w j 是物品j的重量 v j 是物品j的值 它与0 做同样的事情吗 1 背包算法 我一直在一些数据集上尝试我的代码 情况似乎确实如此 我想知道这一点的原因是因为我们学过的 0 1 背包算法是二维的
  • 使用串扰将多个图表与同一张表连接起来而不会相互影响

    我在下面创建了 Flexdashboard 最初在其中创建了四个数据框 然后其中三个数据帧显示为图表 dcross2 store supplier 和一个 dcross1 如表 我想要实现的是将所有这四个对象连接在一起crosstalk封装
  • 为什么在 T-SQL 中执行循环如此困难

    好的 我知道可以做到 我经常这样做 但是为什么在 T SQL 中做循环这么难 我可以想到很多原因 我想要解析查询结果集并做一些没有循环就无法完成的事情 但设置和执行循环的代码超过 20 行 我确信其他人也有类似的观点 那么为什么我们仍然没有
  • 格式化 XML 的十进制值

    我目前遇到一个问题 我们连接的系统期望接收 XML 其中包含三个格式化为小数点后一位的双精度字段 就我个人而言 我认为我们的系统应该能够以默认格式发送值 然后由其他系统根据需要格式化自己的表示形式 但可惜这似乎不是一个选项 我的基于 Jav
  • 当各个函数返回 inf 值时估计两个 gamma 函数的比率

    我正在估计两个伽玛函数的比率 两者的估计gamma x and gamma y 非常大 gt 10 300 但两者的比例应该相当小 from scipy special import gamma gamma x gamma y 不幸的是 有
  • C++ 正则表达式:哪个组匹配?

    我有一个正则表达式 其中包含通过 or 条件连接的各种子组 alpha digit 当我匹配字符串时1 a 2 我得到三个匹配项 1 a and 2 C 中有没有办法确定哪些子模式匹配 不直接 与std regex图书馆 匹配结果类负责子比
  • memcached 中的最大密钥长度和最大值大小是多少?

    我正在使用最新的 memcached 我可以知道最大密钥长度是多少 以及我们可以存储在 memcached 中的值的最大大小吗 如何将memcached与spring集成 有什么想法吗 如果你看一下source https github c
  • 参数字典包含不可为空类型的参数“id”的空条目

    我正在尝试通过以下方式从我的数据库检索数据id我的默认路由中的参数 routes MapRoute Default Route name controller action id URL with parameters new contro
  • 使用 SSL 联系 Active Directory

    我有一种根据 Active Directory 验证用户凭据的方法 我想将此方法与 SSL 结合使用 但无法使其工作 主要问题是我有一台服务器位于我们的网络之外 它称为 DMZ 吗 从那里我想联系我的活动目录 这就是我想使用 SSL 的原因
  • 导入 android.support 无法解决[重复]

    这个问题在这里已经有答案了 我收到一条错误消息 无法在该行解析 import android support import android support v4 app NotificationCompat 有没有人以前见过这个或者知道我能
  • MYSQL - 检索日期之间的时间戳

    All 我有一个 MYSQL 表 其中有一列称为时间戳 它是属于DATETIME数据类型 具有诸如 10 1 2009 3 25 08 PM 10 1 2009 3 30 05 PM 10 4 2009 3 40 01 PM 等值 我想编写
  • 使用选项“ -Xinject-code -extension ”插入 XJC+xsd+jxb 代码

    我正在尝试使用扩展程序 Xinject 代码 of xjc将一些代码添加到我生成的类中 对于以下简单的 xsd 架构