EclipseLink MOXy: Supprime xsi: type lors du marshaling

J'ai un fichier de liaison avec le contenu suivant:


  
  
    ...
  

Lorsque je classe la classe JavaType en utilisant cette liaison, le xml ressemble à ceci


Je ne veux pas que le xsi: type soit là, comment est-ce que je peux le supprimer en marshalling?

2

2 Réponses

L'attribut xsi: type apparaîtra lorsque vous regrouperez une sous-classe. Vous pouvez le faire supprimer en enveloppant votre objet dans un JAXBElement qui fournit des informations sur l'élément racine, y compris le type.

JAXBElement je = new JAXBElement(new QName(), JavaType.class javaType);
marshaller.marshal(je, System.out); 

Exemple


MISE À JOUR

Merci. J'ai maintenant fait la super classe XmlTransient, ce qui rend le   xsi: tapez disapear aussi. J'ai utilisé l'annotation pour le faire. Y a-t-il   en fait une façon d'utiliser pour faire un java-type   transitoire? Je ne pouvais que le faire fonctionner pour les attributs java.

Vous avez raison. Vous pouvez utiliser @XmlTransient au niveau de la classe pour le supprimer de la hiérarchie d'héritage. Voici comment cela peut être fait en utilisant le document de cartographie externe de MOXy.

<?xml version="1.0" encoding="UTF-8"?>

     
        
     

Pour plus d'informations

1
ajouté
Merci. J'ai maintenant fait la superclasse XmlTransient, ce qui fait que le type xsi: disparait aussi. J'ai utilisé l'annotation pour le faire. Existe-t-il réellement un moyen d'utiliser pour rendre transitoire un type java? Je ne pouvais que le faire fonctionner pour les attributs java.
ajouté l'auteur hansi, source
@hansi - J'ai mis à jour ma réponse avec cette information.
ajouté l'auteur Blaise Doughan, source

J'ai essayé la suggestion de blaise-doughan et ajouté l'annotation @XmlTransient au sommet de ma classe de base abstraite.

With my environment (so my product depends something strictly), the jaxb-api library says "The annotation @XmlTransient is disallowed for this location" because of the version of it high probably older than 2.1. I realized that when I tried to adding the annotation with a new test class-path which contains version >=2.1, so it allows to defining it top of a class.

Donc laissez-moi aller droit au but, je suggère la méthode ci-dessous afin de se débarrasser des champs type qui apparaissent sur les réponses qui construisent et marshaling à partir de classes étendues.

J'ai seulement ajouté @XmlDiscriminatorNode ("") au sommet de ma classe de base et j'ai supposé que vous utilisiez le MOXy EclipseLink:

import org.eclipse.persistence.oxm.annotations.XmlDiscriminatorNode;

@XmlDiscriminatorNode("")
public abstract class Base {

    private int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

}

En résumé, vous pouvez utiliser @XmlTransient si vous avez la version jaxb-api supérieure à 2.1 ou utiliser ma méthode si vous avez EclipseLink MOXy.

0
ajouté