Hacemos una revisión completa cada una de las secciones en nuestra página web con la meta de mostrarte siempre información veraz y certera.
Solución:
Las implementaciones de JAX-RS admiten automáticamente la clasificación/desclasificación de clases en función de las anotaciones JAXB detectables, pero debido a que su carga útil se declara como Object
creo que la creó JAXBContext
extraña el Department
clase y cuándo es el momento de organizarlo, no sabe cómo hacerlo.
Una solución rápida y sucia sería agregar un XmlSeeAlso
anotación a su clase de respuesta:
@XmlRootElement
@XmlSeeAlso(Department.class)
public class Response implements Serializable {
....
o algo un poco más complicado sería “enriquecer” el contexto JAXB para el Response
clase usando un ContextResolver
:
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
@Provider
@Produces( MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML )
public class ResponseResolver implements ContextResolver
private JAXBContext ctx;
public ResponseResolver()
try
this.ctx = JAXBContext.newInstance(
Response.class,
Department.class
);
catch (JAXBException ex)
throw new RuntimeException(ex);
public JAXBContext getContext(Class> type)
return (type.equals(Response.class) ? ctx : null);
Tengo el mismo problema y lo resolví agregando el paquete para explorar al Jaxb2marshaller. Para la primavera se definirá un frijol como este:
@Bean
public Jaxb2Marshaller marshaller()
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
String[] packagesToScan= "";
marshaller.setPackagesToScan(packagesToScan);
return marshaller;
De esta manera, si todas sus clases de solicitud y respuesta están en el mismo paquete, no necesita indicar específicamente las clases en el JAXBcontext
Esta excepción se puede resolver especificando una ruta de clase completa.
Ejemplo:
Si está utilizando una clase llamada ExceptionDetails
Manera incorrecta de pasar argumentos
JAXBContext jaxbContext = JAXBContext.newInstance(ExceptionDetails.class);
Manera correcta de pasar argumentos
JAXBContext jaxbContext = JAXBContext.newInstance(com.tibco.schemas.exception.ExceptionDetails.class);
Puntuaciones y comentarios
Eres capaz de añadir valor a nuestro contenido informacional colaborando tu veteranía en las observaciones.