2011-01-24 30 views
8

Perdóname si es un duplicado. Aquí está mi archivo binding.xjb. Pero ahora recibo el error habitual de que no se encuentra el destino de tipo complejo "AddBankVaultRplyType". No veo ningún problema. puede alguien ayudarme con esto? Estoy enumerando el xsd que estoy tratando de personalizarJAXB External Custom Binding XJC Issue - El análisis da como resultado el nodo vacío

<jxb:bindings 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
xmlns:pd="http://chubb.com/cpi/polsvc/xmlobj" 
xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance" 
jxb:extensionBindingPrefixes="inheritance" 
jxb:version="2.1" 
> 


<jxb:bindings node="/xs:schema/xs:ServiceReply/xs:complexType[@name='AddBankVaultRplyType']"> 
<inheritance:extends>com.print.poc.AddressTypeHelper</inheritance:extends> 
</jxb:bindings> 

Aquí está la pieza de XSD que estoy tratando de personalizar

<xs:schema xmlns:pd="http://com/polsvc/xmlobj" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://com/polsvc/xmlobj" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
<xs:complexType name="AddBankVaultRplyType"> 

</xs:complexType> 
<xs:element name="ServiceReply"> 
    <xs:complexType> 
    <xs:sequence> 
    <xs:element name="ReplyHeader" type="pd:MsgHeaderType"/> 
    <xs:element name="RequestHeader" type="pd:MsgHeaderType"/> 
    <xs:choice> 
    <xs:element name="AddBankVaultReply" type="pd:AddBankVaultRplyType"/> 
</xs:choice> 
</xs:sequence> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

Ahora bien, si corro XJC me está diciendo que el objetivo "/xs:schema/xs:ServiceReply/xs:complexType[@name='AddBankVaultRplyType']" da como resultado un nodo vacío. ¿Cuál es el error que estoy haciendo aquí?

Respuesta

8

Tendrá que ajustar los enlaces que tienen la ubicación del esquema establecida. Debe ser algo así como:

<jxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:pd="http://chubb.com/cpi/polsvc/xmlobj" 
    xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance" 
    jxb:extensionBindingPrefixes="inheritance" 
    version="2.1"> 
    <jxb:bindings schemaLocation="your-schema.xsd"> 
     <jxb:bindings node="//xs:complexType[@name='AddBankVaultRplyType']"> 
      <inheritance:extends>com.print.poc.AddressTypeHelper</inheritance:extends> 
     </jxb:bindings> 
    </jxb:bindings> 
</jxb:bindings> 

Para más información:

+0

Hola Blaise, no hace ejercicio. el mismo error que se está lanzando !! – Shiv

+0

Shiv - He actualizado mi respuesta, debería funcionar mejor ahora. –

+3

Gracias de nuevo. Parece que funciona bien, pero muestra este error. Análisis de un esquema ... [ERROR] Espacio de nombres de enlace no compatible "http://jaxb2-commons.dev.java.net/basic/inheritance". Quizás quiso decir "http://java.sun.com/xml/ns/jaxb/xjc"? – Shiv

4

finalmente me dieron la mía workign con subclases, así como la adición de @XmlRootElement a esos complexTypes Dang que se utilizan por un elemento raíz (no entiendo por qué JAXB no lo agrega para mí, pero esto hace el truco de hacerlo, ya que JAXB no)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<jaxb:bindings 
    xmlns:jaxb="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:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:annox="http://annox.dev.java.net" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd 
        http://annox.dev.java.net " 
    jaxb:extensionBindingPrefixes="xjc annox" 
    version="2.1"> 

    <jaxb:globalBindings> 
    <jaxb:serializable uid="1"/> 
    <!-- All generated classes must have MySignature interface (supplied in dependencies) --> 
    <xjc:superClass name="com.cigna.framework.DataObject"/> 
    <xjc:superInterface name="com.cigna.framework.InterfaceTest"/> 
    <!-- All temporal fields are implemented as Joda DateTime and use DateUtils as an adapter --> 
    <jaxb:javaType 
     name="org.joda.time.DateTime" 
     xmlType="xs:time" 
     parseMethod="com.cigna.framework.util.DateUtil.stringToDateTime" 
     printMethod="com.cigna.framework.util.DateUtil.dateTimeToString" 
     /> 
    </jaxb:globalBindings> 



    <!-- Application of annotations to selected classes within schemas --> 

    <!-- org.example.SomeRootType @XmlRootElement --> 
    <jaxb:bindings schemaLocation="../schemas/externalaction_2012_03.xsd" node="/xs:schema"> 
    <jaxb:schemaBindings > 
     <jaxb:package name="com.framework.action"></jaxb:package> 
    </jaxb:schemaBindings> 

    </jaxb:bindings> 

    <jaxb:bindings schemaLocation="../schemas/common_2012_04.xsd" node="/xs:schema"> 
    <jaxb:schemaBindings > 
     <jaxb:package name="com.framework.common"></jaxb:package> 
    </jaxb:schemaBindings> 

    <jaxb:bindings node="xs:complexType[@name='PersonNameType']"> 
     <annox:annotate> 
     <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" name="SomeRootType"/> 
     </annox:annotate> 
    </jaxb:bindings> 
    </jaxb:bindings> 

    <jaxb:bindings schemaLocation="../schemas/utilities_2012_03.xsd" node="/xs:schema"> 
    <jaxb:schemaBindings > 
     <jaxb:package name="com.framework.util"></jaxb:package> 
    </jaxb:schemaBindings> 

    </jaxb:bindings> 

</jaxb:bindings> 

Por supuesto que tuve muchos problemas con el pom.xml pero finalmente llegué a esta solución que funcionó para mí.

 <plugin> 
      <groupId>org.jvnet.jaxb2.maven2</groupId> 
      <artifactId>maven-jaxb2-plugin</artifactId> 
      <version>0.8.1</version> 
      <executions> 
       <execution> 
        <id>process-xsd</id> 
        <goals> 
         <goal>generate</goal> 
        </goals> 
        <phase>generate-sources</phase> 
        <configuration> 
         <schemaIncludes> 
          <include>schemas/*.xsd</include> 
         </schemaIncludes> 
         <bindingIncludes> 
          <include>schemas/*.xjb.xml</include> 
         </bindingIncludes> 
         <generateDirectory>${project.build.directory}/generated-sources</generateDirectory> 
         <extension>true</extension> 
         <args> 
          <arg>-Xannotate</arg> 
         </args> 
         <plugins> 
          <plugin> 
           <groupId>org.jvnet.jaxb2_commons</groupId> 
           <artifactId>jaxb2-basics-annotate</artifactId> 
           <version>0.6.3</version> 
          </plugin> 
          <plugin> 
           <groupId>org.jvnet.jaxb2_commons</groupId> 
           <artifactId>jaxb2-basics</artifactId> 
           <version>0.6.3</version> 
          </plugin>        
         </plugins> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin>   

después, Dean

+0

usaste un comando maven especial para construir las clases o simplemente limpiar el paquete mvn? –

Cuestiones relacionadas