Comment générer une classe Java qui implémente l'interface Serializable de xsd à l'aide de JAXB?
Je voudrais vous présenter la mise en cache dans un projet pour le Printemps qui utilise JAXB pour exposer des Services web. La mise en cache sera fait au niveau des points de fin. Dans le but de faire que les classes générées à partir de XSD à l'aide de JAXB nécessité de mettre en œuvre Serializable
interface et remplacer Object
's toString()
méthode.
Comment charger le xjc outil à l'aide de XSD pour générer de la source avec les propriétés nécessaires?
- Une des possibilités est d'utiliser JAXB plugins (jaxb2-commons.dev.java.net)
- et comment cela est-il fait avec jaxb2-communes?
Vous devez vous connecter pour publier un commentaire.
Serializable
Utilisation
xjc:serializable
dans un des liaisons personnalisées pour ajouter le fichier dejava.io.Serializable
interface des classes avec unserialVersionUID
:toString()
Utiliser un super-classe (voir
xjc:superClass
) à partir de laquelle tous vos liée classes héritent. Cette classe ne seront pas générées par xjc de sorte que vous êtes libre de créer ce que vous s'il vous plaît (ici avec untoString()
mise en œuvre):<xjc:serializable ...>
, comme l'espace de noms par défaut est différente dexjc
.<xjc:superClass...>
j'ai@XmlValue is not allowed on a class that derives another class
. La solution est la suivante: ajouter@javax.xml.bind.annotation.XmlTransient
annotation de la classe de base (voir ici: sites.google.com/site/codingkb/java-2/jaxb/jaxb-4)jaxb:
en face des balises (e.g:jaxb:bindings
) etxjc:serializable
et a couru ceci dans la console:xjc -extension -d out -b bindings.xml yourSchema.xsd
extensionBindingPrefixes="xjc"
?Cela a fonctionné pour moi:
Espère que cela aide.
Une autre façon de générer
toString()
méthode - JAXB2 Bases de Plugins. De cette façon, l'air mieux parce que ne pas utiliser la réflexion. Exemple, comment le faire avec maven ci-dessous.Que le résultat que vous obtiendrez un tel code.
- je utiliser ce code et du travail pour moi
afin d'obtenir de l'interface Serializable ajouter après les informations de liaison pour le xsd-fichier:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0">
<xs:annotation>
<xs:appinfo>
<jaxb:globalBindings optionalProperty="primitive">
<jaxb:serializable/>
</jaxb:globalBindings>
</xs:appinfo>
</xs:annotation>
<xs:element name="myXsdElement">
.....
</xs:element>
</xs:schema>
Et voici un échantillon à l'aide de CXF 3.1.10. N'oubliez pas d'inclure compiler groupe: 'org.apache.cxf.xjc-utils', nom: 'cxf-xjc-runtime', version: '3.1.0'