When I call a particular restful service method, which is built using CXF, I get the following error, anyone know why and how to resolve it?
JAXBException occurred : class com.octory.ws.dto.ProfileDto nor any of its super class is known to this context...
Following are the service method and relevant DTOs:
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() { } ... }
This exception indicates that an error has occurred while performing an unmarshal operation that prevents the JAXB Provider from completing the operation. class. ValidationException. This exception indicates that an error has occurred while performing a validate operation.
The JAXBContext instance is initialized from a list of colon separated Java package names. Each java package contains JAXB mapped classes, schema-derived classes and/or user annotated classes. Additionally, the java package may contain JAXB package annotations that must be processed.
A javax.xml.bind.MarshalException error may occur when a null object is used as an argument to a java.util.List parameter on a JAX-WS web method.
Annotation Type XmlRootElementMaps a class or an enum type to an XML element. Usage. The @XmlRootElement annotation can be used with the following program elements: a top level class. an enum type.
Your ProfileDto
class is not referenced in SearchResultDto
. Try adding @XmlSeeAlso(ProfileDto.class)
to SearchResultDto
.
I had this error because I registered the wrong class in this line of code:
JAXBContext context = JAXBContext.newInstance(MyRootXmlClass.class);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With