Pourquoi ne JAXB dire “xxx est une interface, et JAXB ne peut pas gérer les interfaces”. Même si la classe générée n'est pas une interface

J'ai utilisé JAXB pour lier mon xsd et ensuite essayé de créer le JAXBContext:

JAXBContext jaxbContext = JAXBContext.newInstance("my package name");

Mais JAXB donne 180 IllegalAnnotationsException.

La plupart des exceptions sont les messages suivants:

  1. XXX est une interface, et JAXB ne peut pas gérer les interfaces
  2. XXX n'a pas un no-arg constructeur par défaut
  3. @XmlAttribute/@XmlValue besoin de faire référence à un type Java qui correspond à un texte en XML.

Quand je regarde les classes générées aucun d'entre eux sont des interfaces et je ne comprends pas pourquoi JAXB est à interpréter comme des interfaces.

Ici, c'est la trace de la pile de l'une des erreurs signalées par JAXB :

com.sc.md.datatypes.schemas.csemessage.EnvelopeType is an interface, and JAXB can't handle interfaces.
this problem is related to the following location:
    at com.sc.md.datatypes.schemas.csemessage.EnvelopeType
    at protected com.sc.md.datatypes.schemas.csemessage.EnvelopeType com.sc.md.datatypes.schemas.csemessage.cseMessage.envelope
    at com.sc.md.datatypes.schemas.csemessage.cseMessage
com.sc.md.datatypes.schemas.csemessage.EnvelopeType does not have a no-arg default constructor.
this problem is related to the following location:
    at com.sc.md.datatypes.schemas.csemessage.EnvelopeType
    at protected com.sc.md.datatypes.schemas.csemessage.EnvelopeType com.sc.md.datatypes.schemas.csemessage.cseMessage.envelope
    at com.sc.md.datatypes.schemas.csemessage.cseMessage

Et ce est la façon dont le type est défini dans xsd :

<xs:complexType name="EnvelopeType">
    <xs:sequence>
        <xs:element name="Sent" type="DateTimeType"/>
        <xs:element name="Identifier" type="String_1_14"/>
        <xs:element name="AcknowledgementCode" type="AcknowledgementCodeType"/>
    </xs:sequence>

<xs:simpleType name="AcknowledgementCodeType">
    <xs:restriction base="xs:string">
        <xs:enumeration value="m"/>
        <xs:enumeration value="p"/>
    </xs:restriction>
</xs:simpleType>

Ici est la pom.xml j'ai utilisé pour générer la liaison :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cs</groupId>
<artifactId>cs-jaxb</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.4-1</version>
</dependency>
</dependencies>
<name>cs jaxb</name>
<version>1.0.0</version>
<parent>
<artifactId>hip-jaxb-parent</artifactId>
<groupId>com.cs</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.8.0</version>
<executions>
<execution>
<id>CS</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaDirectory>src/main/resources/</schemaDirectory>
<schemaIncludes>
<include>**/*.xsd</include>
</schemaIncludes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>

S'il vous plaît être patient avec moi car c'est la première fois que je te pose une question sur le web 🙂

Poster plus d'info ne peut pas dire à partir de rien, vous avez posté.
Est 'EnvelopeType est vraiment une interface? Est-il possible que vous essayez d'utiliser un JAXB 1 modèle avec un JAXB 2 runtime?
Merci pour votre réponse, j'ai joint le pom.xml j'ai utilisé aussi mon exécution est JAXB2.
Un homme du nom de Kohsuke Kawaguchi :), qui a l'air très peu de relation avec JAXB 🙂 écrit à propos de cette question. JAXB et interfaces

OriginalL'auteur Alok Chandna | 2012-07-16