Types JAXB:在XSD中指定attr type时,如何更改XJC生成的类名称?

Types JAXB:在XSD中指定attr type时,如何更改XJC生成的类名称?,types,xsd,jaxb,xjc,Types,Xsd,Jaxb,Xjc,我是JAXB的初学者,在使用xjc生成Java类时遇到了一些恼人的问题。我有一个XSD,如下所示: <xs:element name="item" type="itemType"/> ... <xs:complexType name="itemType"> <xs:attribute name="id" type="xs:string" use="required"> ... </xs:complexType>

我是JAXB的初学者,在使用xjc生成Java类时遇到了一些恼人的问题。我有一个XSD,如下所示:

<xs:element name="item" type="itemType"/>  
...   
<xs:complexType name="itemType">
    <xs:attribute name="id" type="xs:string" use="required">
    ...     
</xs:complexType>
在任何其他元素上都不会重用itemType,只是构建XSD的人喜欢这样。 我想可能有一种方法可以通过自定义绑定实现,但我仍然没有找到方法

有什么帮助吗

谢谢,
Miguel

JAXB提供了两种方法来实现这一点:

1。内联模式注释

您可以使用JAXB模式注释来控制类名

<xs:schema 
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        jaxb:version="2.1">

    <xs:complexType name="itemType">
        <xs:annotation>
            <xs:appinfo>
                <jaxb:class name="Item"/>
            </xs:appinfo>
        </xs:annotation>
        <xs:attribute name="id" type="xs:string" use="required"/>
    </xs:complexType>

</xs:schema>

嗯,我终于找到了方法。我的外部绑定文件是:

<?xml version="1.0"?>
<jxb:bindings version="1.0"
              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"
              jxb:extensionBindingPrefixes="xjc">

  <jxb:globalBindings>              
    <xjc:simple/>
  </jxb:globalBindings>

</jxb:bindings>

必须使用
-extension
选项执行
xjc
命令

我在本页中找到了解决方案:

编辑:过时链接)

(新链接)

问候,,
Miguel

这是我用来重命名complextype的外部绑定文件。使用cxf的wsdl2java进行编译

<?xml version="1.0" encoding="UTF-8"?>
<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xsd:schema[1]">
        <jxb:bindings node="//xs:complexType[@name='VatNumber_exception']">
             <jxb:class name="VatNumException"/>
        </jxb:bindings>

    </jaxws:bindings>
</jaxws:bindings>


谢谢布莱斯。我无法更改xsd,因此必须使用外部绑定文件进行更改。现在,我正按照你说的那样做,但我想做得更一般一些。也就是说,如果我有一个“type”指向复杂类型的元素,我能管理编译创建的类的名称是元素的名称而不是复杂类型的名称吗?我的意思是,如果将来创建xsd的人在xsd中添加一个新的,我是否可以重用该绑定文件,使其自动生成Car类,而无需修改绑定文件?我使用Blaise建议的上述标记,并得到以下错误:解析架构。。。[错误]编译器无法执行此类自定义。它附加到错误的位置,或者与其他绑定不一致。文件的第8行:/C:/subbasish/demo/src/main/java/demo.xml[错误](上述自定义项附加到sc hema中的以下位置)文件的第4行:/C:/subbasish/demo/src/main/java/demo.xsd未能解析模式。您好,xjc和wsdl noob在这里,您能解释什么是xs:complexType以及我如何列出它们吗?我怎么知道我的命令行叫什么?你能分享你最后使用的命令行吗?
xjc -d out -b binding.xml your-schema.xsd
<?xml version="1.0"?>
<jxb:bindings version="1.0"
              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"
              jxb:extensionBindingPrefixes="xjc">

  <jxb:globalBindings>              
    <xjc:simple/>
  </jxb:globalBindings>

</jxb:bindings>
<?xml version="1.0" encoding="UTF-8"?>
<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xsd:schema[1]">
        <jxb:bindings node="//xs:complexType[@name='VatNumber_exception']">
             <jxb:class name="VatNumException"/>
        </jxb:bindings>

    </jaxws:bindings>
</jaxws:bindings>