标签: annox

抑制JAXB生成的类的编译器警告

这可能是这个问题的重复(避免编译器对xjc生成的代码的警告),但由于我不太熟悉XJC/JAXB自定义绑定的特性,我可能会认为我可能误解了上述问题.

我的问题看起来很简单 - 如何@SuppressWarnings("all")在生成的JAXB类中添加注释?我们的项目有0个警告政策,在JAXB生成步骤之后,我们最终会发出350多个警告,这些警告只是可怕的噪音.

我希望XJC上有一个简单的标志,或者至少提供这样的信息的简单方法,但我找不到任何.

从我在旅行中看到的情况来看,人们会做以下事情之一:

  1. @ lexicore的JAXB2 Annotate插件,根据示例,似乎可以完成这项工作,但是添加一个完整的框架和数百KB的代码只是为了向一堆类添加简单的注释?真??,
  2. 自定义JAXB绑定(我可能会弄错,但这似乎非常晦涩,我不完全确定它是否可能以这种方式执行),
  3. 自定义ANT目标,它将在JAXB后生成搜索和替换,
  4. Eclipse 4+似乎可以选择过滤掉所选项目的警告,但出于各种历史/遗留原因,我们仍然坚持使用Eclipse 3.7.2(Indigo),
  5. 可以进行注释插入的自定义XJC插件(如其中一位评论者的建议,请参见此处),
  6. 将所有生成的类放在JAR中,使JAR成为项目的依赖项,然后完全删除生成的代码.

以前,我们通过在单独的Eclipse项目中推送与XML相关的代码然后禁用项目上的警告/错误来解决这个问题.现在,作为代码整合/重构的一部分,我们已经重新调整了一些东西,不再拥有这种奢侈品.

对于这样一个看似微不足道的问题,真的没有优雅的解决方案吗?任何反馈/想法都非常感谢.

FWIW,我们的项目使用Ant作为构建系统.

java jaxb xjc annox jaxb2-annotate-plugin

9
推荐指数
2
解决办法
1608
查看次数

JAXB模式到Java不同的XmlRootElement名称和类名

我有一个xsd架构,我正在从中生成一些java类.我正在使用jaxb代代相传.

我希望能够生成一个带注释的类@XmlRootElement,但我希望@XmlRootElement name属性与生成的类的名称不同.

在我的xsd中,我定义了以下内容:

<xs:element name="customer">
    <xs:complexType>
        <xs:sequence>
         ....
        </xs:sequence>
     </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

这段代码生成以下java类:

@XmlRootElement(name = "customer")
public class Customer {
...
}
Run Code Online (Sandbox Code Playgroud)

name的name属性@XmlRootElement与生成的Class的名称相同.我希望生成的类名是CustomerRequest.

我已经尝试使用该jaxb:class定义来更改classe名称.实际上,这个选项改变了类名但删除了@XmlRootElement注释,我需要它存在.

以下xsd:

<xs:element name="customer">
    <xs:complexType>
        <xs:annotation>
                <xs:appinfo>
                    <jaxb:class name="CustomerRequest"/>
                </xs:appinfo>
            </xs:annotation>
        <xs:sequence>
        </xs:sequence>
    </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

生成这个类:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "customer", propOrder = {

})
public class CustomerRequest {
}
Run Code Online (Sandbox Code Playgroud)

如何在@XmlRootElement不丢失注释的情况下使注释的属性名称与生成的类名称不同?

解决方案更新: 用户Xstian使用外部绑定提出了正确的解决方案.仅供进一步参考,我将使用内联绑定转换的解决方案更新我自己的帖子:

 <xs:element name="customer">
        <xs:complexType>
            <xs:annotation>
                <xs:documentation>Request object for the operation that checks if a …
Run Code Online (Sandbox Code Playgroud)

xsd jaxb jaxb2-basics annox jaxb2-annotate-plugin

5
推荐指数
1
解决办法
6367
查看次数

如何在命令行中将 jaxb2-annotate-plugin 与 XJC 一起使用

我正在使用命令行 (xjc.bat) 中的“jaxb-ri”构建基于 xsd 的 java 类。我想使用 jaxb2-annotate_plugin 在 XmlType 注释中设置命名空间,但我不知道如何将此插件添加到 xjc 类路径并激活它。

这是我的外部 bindings.xjb 文件:

<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
              xmlns:xs="http://www.w3.org/2001/XMLSchema"
              xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
              xmlns:annox="http://annox.dev.java.net"
              jxb:extensionBindingPrefixes="xjc annox"
              version="2.1">
    <jxb:bindings schemaLocation="myschema.xsd" node="/xs:schema">
        <jxb:bindings node="xs:complexType[@name='MyType]">
            <annox:annotateClass>@javax.xml.bind.annotation.XmlType(namespace="urn:myschematwo")</annox:annotateClass>
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>
Run Code Online (Sandbox Code Playgroud)

我的命令行是:

D:/jaxb-ri/bin/xjc.bat -p "com.jaxb.mypackage" -d
"D:/myproject/src/main/java" D:/myschema.xsd -b "D:/bindings.xjb"
-extension
Run Code Online (Sandbox Code Playgroud)

当我执行此命令时,我收到一条错误消息,指出不支持“ http://annox.dev.java.net ”。

提前致谢。

xsd jaxb xjc annox jaxb2-annotate-plugin

4
推荐指数
1
解决办法
5236
查看次数

使用 annox 编辑 JAXB 生成的注释并在参数中添加命名空间

我在 JAXB 生成的类中有以下注释

@XmlType(name = "MessageInfoType", propOrder = {
    "debugTraceBoolean",
    "clientHostnameString",
    "endUserIPAddress"
})
Run Code Online (Sandbox Code Playgroud)

需要使用自定义绑定在 JAXB 类中生成以下注释。即需要编辑上述注释并使用 annox 添加命名空间,如下所示类型。

        @XmlType(name = "MessageInfoType", propOrder = {
            "debugTraceBoolean",
            "clientHostnameString",
            "endUserIPAddress"
        }, namespace="urn:expedia:e3:data:messagetypes:defn:v4")
Run Code Online (Sandbox Code Playgroud)

我的xjb文件是:

  <jaxb:bindings schemaLocation="../../serviceDescription/atlantis/common/com.expedia.e3.data.messagetypes.v4.xsd">

    <jaxb:bindings node="//xs:complexType[@name='MessageInfoType']">
        <annox:annotate target="field">
            <annox:annotate annox:class="javax.xml.bind.annotation.XmlType" 
                   namespace="urn:expedia:e3:data:messagetypes:defn:v4"/>
        </annox:annotate>
    </jaxb:bindings>
  </jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)

jaxb jaxb2 jaxb2-basics annox

4
推荐指数
1
解决办法
8935
查看次数

标签 统计

annox ×4

jaxb ×4

jaxb2-annotate-plugin ×3

jaxb2-basics ×2

xjc ×2

xsd ×2

java ×1

jaxb2 ×1