JAXB @XmlValue no puede obtener el texto, no genera un elemento XML vacío y no puede leer el atributo

Tengo un controlador Spring Rest, que acepta solicitudes como Xml. Este es el formato de solicitud de muestra que viene.

<Message>
   <Header id="101" desc="Header content description">
      <title text="The quick brown fox" />
   </Header>
   <Content />
   <Footer name="test">Footer content sample.</Footer>
</Message>

este es mi controlador:

@RestController
@RequestMapping("myservice")
public class MessageController {

    @PostMapping(consumes = MediaType.APPLICATION_XML_VALUE)
    public String handler(@RequestBody Message message) {
        System.out.println(message);
        System.out.println("\n\n\n");

        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(Message.class);
            Marshaller marshaller = jaxbContext.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.marshal(message, System.out);
        } catch(JAXBException ex) {
            System.out.println(ex.toString());
        }

        return "Done!";
    }

}

y tengo las siguientes clases, para la clase Mensaje:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Message")
public class Message {
   @XmlElement(name = "Header", required = true)
   private Header header;

   @XmlElement(name = "Content", required = true)
   private Content content;

   @XmlElement(name = "Footer", required = true)
   private Footer footer;

   // Getters and setters here...

   @Override
   public String toString() {
      // In here, I outputted the values of the header and footer.
   }
}

lase @Header:

@XmlRootElement(name = "Header")
@XmlAccessorType(XmlAccessType.FIELD)
public class Header {
    @XmlAttribute(name = "id", required = true)
    private String id;

    @XmlAttribute(name = "desc", required = true)
    private String description;

    // Getters and setters here...
}

Clase de contenido:

@XmlRootElement(name = "Content")
@XmlAccessorType(XmlAccessType.FIELD)
public class Content {
}

y para la clase Footer:

@XmlRootElement(name = "Footer")
@XmlAccessorType(XmlAccessType.FIELD)
public class Footer {
    @XmlValue
    private String value;

    @XmlAttribute(name = "name")
    private String name;

    //Getter and setters here...
}

Así que hay tres problemas que veo aquí desde la salida:

El valor del atributo de descripción del encabezado siempre es nulo. Básicamente, quería tener un nombre de campo diferente en la clase pero leer un atributo ("desc") del XML. Sin embargo, el atributo "id" está bien, puedo recuperar el valor de él.

No puede generar un XML de contenido vacío, p. Ej. . Si pongo nillable = true, generará contenido con atributos adicionales, p. xmnls = "..." />. No estoy seguro de cómo eliminar esos atributos adicionales para que solo genere un elemento de contenido vacío.

l valor de "nombre" del atributo @Footer se puede leer pero no el texto que dice "Muestra de contenido de pie de página".

¿Alguna idea

Respuestas a la pregunta(1)

Su respuesta a la pregunta