9
votes

JAX-WS: Comment exclure un "membre / champ" dans un objet de réponse (réponse WS) hérité?

J'ai un WebService que les rendements à la suite de l'Invokation du WebService un ResponseObject appelé " CustomerResponse code>". Lorsque je mets en œuvre cet objet « à partir de zéro » tout fonctionne bien: Ma mise en œuvre dans ce cas, ne contient que tous les nécessaires « Types simples » comme les chaînes, Entiers mais NO Références d'objets / associations

Mais ce que je voulais faire est ». réutiliser » objets existants. J'ai dans mon domaine un modèle « client code> » objet qui est utilisé dans l'application elle-même. Au lieu de clonage bêtement plus ou moins le client code> dans l'objet « CustomerReponse » (en tapant manuellement à nouveau tous les membres / champs), je voulais fonder CutomerResponse code> sur la client code> par extension: p>

class CustomerResponse extends Customer


0 commentaires

3 Réponses :


7
votes

L'annotation @xmlTransient est utilisée pour masquer les membres que vous ne souhaitez pas afficher. Vous devriez être capable d'annoter ces membres et ils ne seront pas liés. Vous pouvez également modifier votre @xmlaccessorType vers Xmlaccessype.none et uniquement des méthodes annotées spécifiquement annotées seront liées à XML.


1 commentaires

Bonjour KT, merci beaucoup pour votre réponse. Eh bien, j'ai effectivement essayé @xmlTransifiant mais cela ne fonctionnait pas d'une manière ou d'une autre. (Apache CXF sembla néanmoins semblé au moins "ramper" l'objetGraph sur le chargement du service Web et j'ai jeté quelques exceptions près (comme mon objetgraphique a un peu nom de statique intérieure intérieure ...). Je vais essayer de nouveau et va parcourir votre xmlaccessype.none. Tanks. !



-10
votes

C # résout ce problème avec des classes partielles. Je ne sais pas comment le faire avec Jax-Ws.


0 commentaires

11
votes

Concernant l'annotation @xmlTransient, j'ai découvert que vous devez le mettre sur la méthode Getter du champ que vous souhaitez masquer.

public class InputBean
{
    private String fieldShow;
    private transient String fieldHide;

    public String getFieldShow() {
        return fieldShow;
    }

    public void setFieldShow(String fieldShow) {

        this.fieldShow = fieldShow;
    }

    @XmlTransient
    public String getFieldHide() {
        return fieldHide;
    }

    public void setFieldHide(String fieldHide) {
        this.fieldHide = fieldHide;
    }
}


3 commentaires

Bon endroit. Vous avez besoin des deux transitoires pour votre champ et @xmlTransient pour le getter.


Travaillé pour moi sans transitoire


Ne fonctionne pas pour des types booléens. Cependant, si vous annotez votre champ booléen, cela fonctionne.