JAXB Exception: la Classe n'est pas connu à ce contexte
Quand je l'appelle un particulier de service restful méthode, qui est construit à l'aide de CXF, j'obtiens l'erreur suivante, quelqu'un sait pourquoi et comment le résoudre?
JAXBException produit : classe
com.octory.ws.dto.ProfileDto ni aucune
de sa super-classe est connue à ce
contexte...
Suivantes sont la méthode de service et pertinentes Otd:
public class Service {
public Response results() {
Collection<ProfileDto> profilesDto = new ArrayList<ProfileDto>();
...
SearchResultDto srd = new SearchResultDto();
srd.setResultEntities(profilesDto); //Setting profilesDto collection as resultEntities
srd.setResultSize(resultSize);
return Response.ok(srd).build();
}
}
SearchResultDto:
@XmlRootElement(name="searchResult")
public class SearchResultDto {
private Collection resultEntities;
private int resultSize;
public SearchResultDto() { }
@XmlElementWrapper(name="resultEntities")
public Collection getResultEntities() {
return resultEntities;
}
public void setResultEntities(Collection resultEntities) {
this.resultEntities = resultEntities;
}
public int getResultSize() {
return resultSize;
}
public void setResultSize(int resultSize) {
this.resultSize = resultSize;
}
}
ProfileDto:
@XmlRootElement(name="profile")
public class ProfileDto {
...
...
public ProfileDto() { }
...
}
Vous devez vous connecter pour publier un commentaire.
Votre
ProfileDto
classe n'est pas référencé dansSearchResultDto
. Essayez d'ajouter@XmlSeeAlso(ProfileDto.class)
àSearchResultDto
.SearchResultDto<T>
où T est générique ?@WebService
annotation). Si vous êtes aux prises avec les médicaments génériques, il est plus logique de déclarer des types additionnels de là que par ce stade, vous devez connaître l'ensemble des types.@XmlSeeAlso
pour le webservice lui-même. J'avais eu des problèmes avec les types générés et l'ajout de@XmlSeeAlso
pour les classes générées ne semble pas aider, mais en ajoutant que l'annotation à l'webservice éclairci le problème.@XMlSeeAlso
dansJAX-RS
annotée de ressources?J'ai eu ce message d'erreur parce que je me suis inscrit à la mauvaise classe dans cette ligne de code:
Ce message d'erreur peut se produire soit parce que votre
ProfileDto
classe n'est pas enregistré dans l'JAXB Contenu, ou la classe de l'utiliser ne pas utiliser@XmlSeeAlso(ProfileDto.class)
pour les rendre exploitables par JAXB.À propos de votre commentaire:
Non, ils sont également nécessaires lorsqu'il n'est pas déclaré dans le JAXB contexte ou, par exemple, lors de la seule classe à avoir un point de référence fixe à il a cette référence annoté avec
@XmlTransient
. Je maintiens un tutoriel ici.J'ai eu le même problème avec le printemps de démarrage. Il est résolu lorsque j'ai mis paquet pour marshaller.
Fixe en paramètre le nom de la classe à la propriété "classesToBeBound" de la JAXB marshaller:
J'ai eu la même exception sur Tomcat.. j'ai trouvé un autre problème quand j'utilise wsimport plus de plugin maven pour générer les stubs pour plus de 1 fichiers wsdl - classe
ObjectFactory
(talons de références à cette catégorie) contient des méthodes pour une SEULE wsdl. Donc, vous devez fusionner toutes les méthodes dans unObjectFactory
classe (pour chaque WSDL) ou générer de chaque wsdl talons dans des répertoires différents (il y aura sépareObjectFactory
classes). Il résout le problème pour moi avec cette exception..J