首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JAXB将具有相同命名空间的多个文件绑定到同一个包

JAXB将具有相同命名空间的多个文件绑定到同一个包
EN

Stack Overflow用户
提问于 2015-01-20 09:23:54
回答 2查看 7.1K关注 0票数 1

我有这样的模式层次结构:

代码语言:javascript
运行
复制
common
   |---legacy
   |      |---legacy.xsd xmlns="http://common/legacy"
   |      |---other.xsd  xmlns="http://common/legacy"
   |      '---....xsd    xmlns="http://common/legacy"
   |---send
          |---file.xsd xmlns="http://common/send"
          '---text.xsd xmlns="http://common/send"
          '---....xsd  xmlns="http://common/send"

一个文件夹中的所有文件都具有相同的命名空间。

现在,我想将名称空间映射到特定的java包(我不能更改名称空间)。

我找到了将模式绑定到包的解决方案。但是,我必须为每个xsd文件创建一个条目:

代码语言:javascript
运行
复制
<jaxb:bindings schemaLocation="./common/legacy/legacy.xsd">
    <jaxb:schemaBindings>
        <jaxb:package name="com.company/legacy"/>
    </jaxb:schemaBindings>
</jaxb:bindings>
<jaxb:bindings schemaLocation="./common/legacy/other.xsd">
    <jaxb:schemaBindings>
        <jaxb:package name="com.company/legacy"/>
    </jaxb:schemaBindings>
</jaxb:bindings>
.....

是否有一种方法可以直接定义命名空间和包名之间的绑定?

另一种方法是在maven中定义包:

代码语言:javascript
运行
复制
<plugin>
 <groupId>org.jvnet.jaxb2.maven2</groupId>
 <artifactId>maven-jaxb2-plugin</artifactId>
 <configuration>
  <generatePackage>com.company/legacy</generatePackage>
 </configuration>
</plugin>

但是,我必须创建每个文件夹一个执行,这并不是我真正想要的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-21 07:14:38

免责声明:,我是maven-jaxb2-plugin的作者。

XJC从名称空间派生包,因此您(通常)不能为一个名称空间生成多个包。jaxb:class/@ref有一些技巧,但是您不需要这些技巧,因为这可能导致各种碰撞。

因此,我的建议是在同一个名称空间中定义多个执行,每个不同的模式一个。您可以使用generatePackage,尽管我通常建议在绑定中定义包映射。

在执行多次执行时,请确保每次执行都使用不同的generateDirectory

顺便问一下,为什么你对多个绑定感到不舒服?

票数 2
EN

Stack Overflow用户

发布于 2021-11-04 15:46:13

使用scd语法而不是node="XPath" schemaLocation="path or *"

代码语言:javascript
运行
复制
<jaxb:bindings scd="x-schema::tns" xmlns:tns="http://common/legacy">
    <jaxb:schemaBindings>
        <jaxb:package name="com.company.legacy"/>
    </jaxb:schemaBindings>
</jaxb:bindings>

并不是所有地方都支持SCD。一些XJC自定义,比如jaxb2 2-基础,在jaxb:bindings中不起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28041665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档