xjcfacade tools partir generar error encontrado clases clase cargado java xsd jaxb xjc

java - partir - error no se ha encontrado o cargado la clase principal com sun tools internal xjc xjcfacade



¿Cómo generar una clase Java que implemente una interfaz Serializable desde xsd usando JAXB? (6)

Serializable

Use xjc:serializable en un archivo de enlaces personalizados para agregar la interfaz java.io.Serializable a sus clases junto con un serialVersionUID :

<?xml version="1.0" encoding="UTF-8"?> <bindings xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xsi:schemaLocation=" http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd" version="2.1"> <globalBindings> <serializable uid="1" /> </globalBindings> </bindings>

Encadenar()

Utilice una superclase (consulte xjc:superClass ) de la que se heredarán todas las clases enlazadas. Esta clase no será generada por xjc, así que puedes crearla como quieras (aquí con una implementación toString() ):

<?xml version="1.0" encoding="UTF-8"?> <bindings xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xsi:schemaLocation=" http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd" version="2.1"> <globalBindings> <serializable uid="1" /> <xjc:superClass name="the.package.to.my.XmlSuperClass" /> </globalBindings> </bindings>

Me gustaría introducir el almacenamiento en caché en un proyecto Spring existente que utiliza JAXB para exponer WebServices. El almacenamiento en caché se realizará en el nivel de los puntos finales. Para hacer eso, las clases generadas desde XSD utilizando JAXB necesitan implementar una interfaz Serializable y anular el método toString() Object .

¿Cómo instruir a la herramienta xjc usando XSD para generar la fuente con las propiedades necesarias?


Esto funcionó para mí:

<?xml version="1.0" encoding="UTF-8"?> <jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" jaxb:version="2.1"> <jaxb:globalBindings> <xjc:serializable uid="1337"/> </jaxb:globalBindings> </jaxb:bindings>

Espero eso ayude.


Otra forma de generar el método toString() - JAXB2 Basics Plugins . De esta manera se ve mejor porque no usa la reflexión. Ejemplo de cómo hacerlo con maven abajo.

<build> <plugins> <plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>0.8.2</version> <executions> <execution> <goals> <goal>generate</goal> </goals> </execution> </executions> <configuration> <schemaDirectory> ${project.basedir}/src/main/resources </schemaDirectory> <generateDirectory> ${project.basedir}/src/main/java </generateDirectory> <extension>true</extension> <args> <arg>-XtoString</arg> </args> <plugins> <plugin> <groupId>org.jvnet.jaxb2_commons</groupId> <artifactId>jaxb2-basics</artifactId> <version>0.6.4</version> </plugin> </plugins> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.jvnet.jaxb2_commons</groupId> <artifactId>jaxb2-basics-runtime</artifactId> <version>0.6.4</version> </dependency> </dependencies>

Como resultado obtendrás dicho código.

public String toString() { final ToStringStrategy strategy = JAXBToStringStrategy.INSTANCE; final StringBuilder buffer = new StringBuilder(); append(null, buffer, strategy); return buffer.toString(); } public StringBuilder append(ObjectLocator locator, StringBuilder buffer, ToStringStrategy strategy) { strategy.appendStart(locator, this, buffer); appendFields(locator, buffer, strategy); strategy.appendEnd(locator, this, buffer); return buffer; } public StringBuilder appendFields(ObjectLocator locator, StringBuilder buffer, ToStringStrategy strategy) { { String theName; theName = this.getName(); strategy.appendField(locator, this, "name", buffer, theName); } { String theBank; theBank = this.getBank(); strategy.appendField(locator, this, "bank", buffer, theBank); } return buffer; }


Y aquí hay una muestra usando CXF 3.1.10. Recuerde incluir el grupo de compilación: ''org.apache.cxf.xjc-utils'', nombre: ''cxf-xjc-runtime'', versión: ''3.1.0''

<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="META-INF/wsdl/xsd2.xsd"> <jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <jxb:serializable uid="1"/> </jxb:globalBindings>


Yo uso este código y es un trabajo para mí

<?xml version="1.0" encoding="UTF-8"?> <jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" jaxb:version="2.1"> <jaxb:globalBindings> <xjc:serializable uid="1"/><!--If you Forgot this line your class did not be serializable--!> </jaxb:globalBindings> </jaxb:bindings>


para obtener la interfaz Serializable, agregue la siguiente información de enlace al archivo xsd:

<?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>