当前位置: 首页 > 知识库问答 >
问题:

jaxb2 maven插件生成包信息。带有xmlns前缀的java

秦跃
2023-03-14

我想使用jaxb2-maven-plugin生成java类。我使用以下配置:

pom.xml:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>2.5.0</version>
    <executions>
        <execution>
            <id>SomeID</id>
            <goals>
                <goal>xjc</goal>
            </goals>
            <configuration>
                <extension>true</extension>
                <clearOutputDir>true</clearOutputDir>
                <sources>
                    <source>src/main/xsd/schema.xsd</source>
                </sources>
                <noGeneratedHeaderComments>true</noGeneratedHeaderComments>
            </configuration>
        </execution>
    </executions>
</plugin>

模式。xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://my.target.namespace/uri" 
    xmlns="http://my.target.namespace/uri" 
    elementFormDefault="qualified"
    attributeFormDefault="unqualified"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:h="http://my.uri.for.prefix.h"
    xmlns:f="http://my.target.namespace/uri">
    
    <xsd:import namespace="http://my.uri.for.prefix.h" schemaLocation="schema2.xsd"/> 
    
    <xsd:complexType name="FooType">
        <xsd:sequence>
            <xsd:element ref="h:something" minOccurs="0" maxOccurs="1"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="FooType" type="FooType" />
 
</xsd:schema>

Jaxb2插件正在为我生成以下包信息。爪哇:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://my.target.namespace/uri", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package ...;

但是,我想得到的是:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://my.target.namespace/uri", xmlns = {
        @XmlNs(prefix="f", namespaceURI="http://my.target.namespace/uri"),
        @XmlNs(prefix="h", namespaceURI="http://my.uri.for.prefix.h")
}, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package ...;

import javax.xml.bind.annotation.XmlNs;

我生成的文件中缺少前缀。怎么做?我已经尝试创建一个绑定文件,但这并没有达到我的预期效果。

共有1个答案

卓正业
2023-03-14

关于如何解决这个问题,请参见以下答案:https://stackoverflow.com/a/10812236/1389219

答案写得很好,很容易理解。基本上你必须:

  1. 放弃jaxb2-maven-plugin,支持maven-jaxb2-plugin
  2. 包括jaxb2名称空间前缀依赖项,并提供

您的POM文件将变得更加冗长,但按照您需要的方式生成package-info.java是值得的。

作为奖励,有一堆与maven-jaxb2-plugin相关的附加插件和依赖项提供了额外的功能。我发现很有帮助的一个是jaxb2-rich-conce-plugin,它提供了生成构建器并使生成的类不可变的能力*。

*严格说来,这并不是一成不变的(因为它只是将setter方法更改为包私有),但足以让它们感觉更安全。

 类似资料:
  • 问题内容: 我很困惑,我希望员工ID以前缀格式自动生成,我知道从sql服务器中的触发器触发之前是可能的,我按照帖子 http://www.aspdotnet- suresh.com/2012/04/set-custom-自动生成的increment.html 显示器是 但是我想从触发器之前的插入中执行此操作,并且此触发器在同一表和同一行中工作- 和用户ID自动创建?喜欢–08U13015,08U1

  • 我试图使用以下命令将文件部署到远程存储库: 我收到了这个错误消息: 在当前项目和插件组[org.apache.maven.plugins,org.codehaus.mojo]中找不到前缀“–Durl=http”的插件,这些插件可从中央存储库[local(/Users/ssurendran/.m2/repository]获得(https://repo.maven.apache.org/maven2)

  • 例子 #include <stdio.h> int main(void) { int i; for (i = 0; i < 10; i++) printf("%d ", i); putchar ('\n'); return 0; } 技巧 使用-fverbose-asm选项就可以生成带有详细信息的汇编文件: $ gcc -S -fverbose-asm foo.c

  • 我只是将代码从swagger代码生成器迁移到open api代码生成器。我通过maven插件使用生成器。我需要它为一个外部API(在我的控制之外)生成一个客户端,这里给出了使用的swagger文件。 我的插件设置如下: 为了有一个最小的例子,我把昂首阔步的来源去掉了: 当生成器运行正常时,代码无效 结果列表«GenericRow»完全错误。 另一方面,类的名称是正确生成的只有变量名称处理错误。 如

  • SI的FTP和SFTP出站适配器允许将带有可自定义后缀的临时文件默认发送到。但我正在与一个遗留系统进行接口,该系统只能很好地使用前缀命名的临时文件重命名(例如->)。 也就是说,我可以使用RemoteFileTemplate的API来禁用临时文件、发送和重命名。 对于实现前缀临时文件重命名方案,有什么比RemoteFileTemplate更好的选项?

  • 我对spring boot和创建我的第一个应用程序非常陌生。创建数据源时,我使用了带有前缀的@ConfigurationProperties和要从Application.Property中读取的属性。 但是,这个设置似乎对我不起作用,我的程序没有运行。 我的pom.xml文件包含: 我的存储库类: 我的主要类: 请让我知道如果我需要提供任何其他信息以及。