【问题标题】:Jaxb doesn't preserve case of namespace in packageJaxb 不保留包中命名空间的大小写
【发布时间】:2023-03-02 21:11:01
【问题描述】:

我正在使用 codehaus jaxb2-maven-plugin, v1.5 将 XSD 编译为 POJO,但是生成的包名将包名强制为小写(因此,如果我的目标命名空间为 http://example.com/sampleNamespace,那么生成的包是com.example.samplenamespace)。

我在谷歌上搜索了一下,发现大多数人都遇到下划线变成点的问题,以及解决方案,但我似乎找不到特定的东西来保留命名空间的大小写。

注意:我不想重复自己并覆盖生成的包名称,因此 maven 配置中的 generatePackage 选项不适合我。

在找到下划线修改之前,我已经尝试过,还有一个常规空格 - 都在其中粘贴一个点。

有什么想法吗?

架构:

<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:t="http://example.com/sampleNamespace" targetNamespace="http://example.com/sampleNamespace"
jaxb:version="2.0">

    <complexType name="MyFirstClass">
        <sequence>
            <element name="MyFirstElement" type="string" />
        </sequence>
    </complexType>
</schema>

Maven 配置:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>1.5</version>
    <executions>
        <execution>
            <goals>
                <goal>xjc</goal>
            </goals>
        </execution>
    </executions>
</plugin>

【问题讨论】:

  • 为什么要在包中保留大小写。根据公认的 Java 代码约定,包名总是小写,如 here? 所述
  • 因为辛克勒图斯把它写成小写字母使得它非常难以阅读。如果答案是“做不到”,那很好。

标签: java xml maven jaxb xsd


【解决方案1】:

如果您不想使用 JAXB 基于常见 Java 编码转换生成的包名称,则需要利用 JAXB 绑定文件来指定包名称。

<bindings 
  xmlns="http://java.sun.com/xml/ns/jaxb" 
  version="2.1">
  <bindings schemaLocation="schema.xsd">
    <schemaBindings>
      <package name="com.example.sampleNamespace"/>
    </schemaBindings>
  </bindings>
</bindings>

【讨论】:

  • 这不就是和maven插件的generatePackage选项一样吗,我还是要重复一遍吗? (一次在模式命名空间中,一次在绑定文件/maven 配置中)
  • @Phil - 我不确定你重复自己的意思。无论您使用哪种方法,您都提供一次覆盖。是的,它们是等价的。
  • 这就是重点——我不想提供覆盖。我想要一个简单的配置选项,告诉 Jaxb “不要破坏案例”。或类似的东西。这样,我将配置保存在父 pom 中,而不必担心这次、那次、每隔一次的命名空间是什么。可以在没有覆盖其他文件中的包名称的重复项的情况下完成吗?命名空间(我不能跳过,可以吗?),转换,保留大小写,很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 2020-09-20
相关资源
最近更新 更多