Saltar al contenido

javax.xml.bind.JAXBException: Class *** ni ninguna de sus superclases es conocida en este contexto

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 Objectcreo 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *