我有这样的模式层次结构:
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文件创建一个条目:
<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中定义包:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<configuration>
<generatePackage>com.company/legacy</generatePackage>
</configuration>
</plugin>但是,我必须创建每个文件夹一个执行,这并不是我真正想要的。
发布于 2015-01-21 07:14:38
免责声明:,我是maven-jaxb2-plugin的作者。
XJC从名称空间派生包,因此您(通常)不能为一个名称空间生成多个包。jaxb:class/@ref有一些技巧,但是您不需要这些技巧,因为这可能导致各种碰撞。
因此,我的建议是在同一个名称空间中定义多个执行,每个不同的模式一个。您可以使用generatePackage,尽管我通常建议在绑定中定义包映射。
在执行多次执行时,请确保每次执行都使用不同的generateDirectory。
顺便问一下,为什么你对多个绑定感到不舒服?
发布于 2021-11-04 15:46:13
使用scd语法而不是node="XPath" schemaLocation="path or *"
<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中不起作用。
https://stackoverflow.com/questions/28041665
复制相似问题