Problème de la mise en œuvre de REPOS de service en raison de JAXBException:IllegalAnnotationExceptions

StackOverflow https://stackoverflow.com/questions/3213908

Question

Je suis vraiment très étrange problème de la mise en œuvre de Java service REST.Je suis en train de recevoir le modèle suivant:

@Data @EqualsAndHashCode(callSuper=false, of={"primaryKey"}) 
@Entity @Table(name = "T_UNIQUE_IDENT_TYPE")
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@XmlRootElement(name="UniqueIdentifierType") @XmlAccessorType(XmlAccessType.FIELD)
public class UniqueIdentifierType extends AbstractEntityWithTime implements Serializable {
    private static final long serialVersionUID = 1L;    
    @Id @Basic(optional = false) @Column(name = "F_TYPE_PK") @XmlTransient
    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="S_UNIQUE_IDENT_TYPE") @SequenceGenerator(name="S_UNIQUE_IDENT_TYPE",sequenceName="S_UNIQUE_IDENT_TYPE") 
    private Long primaryKey;
    @Column(name = "F_NAME", nullable=false, length=50)
    private String typeName;
    @Basic(optional = false) @Column(name = "F_CREATION_TIME") @Temporal(TemporalType.TIMESTAMP) @XmlTransient
    private Calendar creationTime;
    @Basic(optional = false) @Column(name = "F_LASTMODIFY_TIME") @Temporal(TemporalType.TIMESTAMP) @XmlTransient
    private Calendar lastModifyTime;
    @JoinColumn(name = "F_UNIT_PK", referencedColumnName = "F_UNIT_PK") @ManyToOne(optional = false) @XmlTransient
    private SoftwareProviderUnit softwareProviderUnit;
}

Mon repos de service a la signature suivante:

@GET 
@Path("/{name}") 
public UniqueIdentifierType get(@PathParam("unitId") final Long unitId, @PathParam("name") final String name) throws WebApplicationException {

Chaque fois que je fais un appel à ce service que je reçois 500 erreur contenant

java.lang.AssertionError: JAXBException occurred : 2 counts of IllegalAnnotationExceptions

J'ai été en mesure de retracer les deux erreurs suivantes:

javassist.util.proxy.MethodHandler is an interface, and JAXB can't handle interfaces.
    this problem is related to the following location:
        at javassist.util.proxy.MethodHandler
        at private javassist.util.proxy.MethodHandler com.rp.central.model.UniqueIdentifierType_$$_javassist_21.handler
        at com.rp.central.model.UniqueIdentifierType_$$_javassist_21

javassist.util.proxy.MethodHandler does not have a no-arg default constructor.
    this problem is related to the following location:
        at javassist.util.proxy.MethodHandler
        at private javassist.util.proxy.MethodHandler com.rp.central.model.UniqueIdentifierType_$$_javassist_21.handler
        at com.rp.central.model.UniqueIdentifierType_$$_javassist_21

La chose étrange est que si je change la méthode d'OBTENIR la signature de retourner une Liste je reçois 200 avec le JSON vue de l'objet, qui a tous les champs sauf pour le nom du type de terrain.Je suppose que l'exception est en quelque sorte liés à ce domaine.J'ai essayé d'ajouter explicite les méthodes de lecture tels que

@XmlElement(name="typeName")
public String getTypeName() {
    return typeName;
}

pour essayer de le forcer à envoyer le nom du type, il obtient le nom du type dans la "Liste" de la version de la méthode GET, mais renvoie toujours à 500 pour les non liste des.La chose étrange est que j'ai un autre modèle qui ressemble exactement le même que celui-ci et fonctionne sans aucun problème.J'ai été frapper ma tête contre ce pour un certain temps maintenant, toute aide sera grandement appréciée.

Je vous remercie.

Était-ce utile?

La solution

L'exception est clairement dit que JAXB ne peut pas mobiliser vos UniqueIdentifierType, parce que l'objet étant mobilisé est en fait une instance de la classe renforcée par Javassist (com.rp.central.model.UniqueIdentifierType_$$_javassist_21), et que la classe contient un champ (ajouté par Javassist) qui ne peuvent pas être muselé.Probablement, ehancement est fait par votre outil ORM.

La solution la plus évidente est de retour une nouvelle copie de l'objet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top