Cuando invoco un método de servicio restful en particular, que se genera utilizando CXF, aparece el siguiente error: ¿Alguien sabe por qué y cómo resolverlo?JAXB Excepción: Clase desconocida en este contexto
JAXBException se produjo: clase com.octory.ws.dto. ProfileDto ni ninguna de su superclase que se conoce a este contexto ...
A continuación se presentan el método de servicio y dtos relevantes:
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;
}
}
PerfilD a:
@XmlRootElement(name="profile")
public class ProfileDto {
...
...
public ProfileDto() { }
...
}
Añadiendo @XmlSeeAlso resolvió el problema; Tenía la impresión de que las anotaciones solo eran necesarias cuando la clase a la que se hacía referencia era una subclase. Gracias. – ABK07
¿Qué sucede si la clase es 'SearchResultDto' donde T es genérico? –
@Hendy Irawan: la anotación también se puede agregar al servicio web en sí (es decir, después de la anotación '@ WebService'). Si está tratando con medicamentos genéricos, tiene más sentido declarar tipos adicionales, ya que en esa etapa debe conocer el conjunto completo de tipos. – CurtainDog