JAXB: comment modifier les noms de classes générés par XJC lorsque le type attr est spécifié dans XSD?
je suis un débutant de JAXB et j'ai des problèmes gênants lors de la génération de classes Java avec xjc. Je suis fourni avec un XSD comme ceci:
<xs:element name="item" type="itemType"/>
...
<xs:complexType name="itemType">
<xs:attribute name="id" type="xs:string" use="required">
...
</xs:complexType>
et xjc génère une classe appelée ItemType.java
, mais je veux que le nom Item.java
. C'est-à-dire que je veux les classes générées comme si XSD était comme ceci:
<xs:element name="item">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required">
...
</xs:complexType>
</xs:element>
il n'y aura pas de réutilisation de itemType sur aucun autre élément, c'est juste les gens qui construisent le XSD qui l'aiment de cette façon. Je pense qu'il y a peut être un moyen de le faire avec des liaisons personnalisées, mais je n'ai toujours pas trouvé comment.
De l'aide?
Merci, Miguel
3 réponses
JAXB fournit deux façons d'accomplir ceci:
1. Schéma En Ligne Anntotations
vous pouvez utiliser les annotations de schéma JAXB pour contrôler les noms de classe.
<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>
2. Fichier De Reliure Externe
cette personnalisation peut aussi être faite via et le fichier de reliure externe:
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:bindings schemaLocation="your-schema.xsd">
<jxb:bindings node="//xs:complexType[@name='itemType']">
<jxb:class name="Item"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
la ligne de commande xjc serait:
xjc -d out -b binding.xml your-schema.xsd
Eh bien, j'ai finalement trouvé comment le faire. Mon externe de liaison de fichier est:
<?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>
et xjc
la commande doit être exécutée avec -extension
option.
j'ai trouvé la solution dans cette page:
http://weblogs.java.net/blog/kohsuke/archive/2006/03/why_does_jaxb_p.html
ce qui Concerne, Miguel
c'est le fichier de liaison externe que j'utilise pour renommer un complextype. Compile avec cxf est 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>