JAX-WS: Wie ausgeschlossen "Mitglied/Feld" in ein Antwort-Objekt (WS Response), die übernommen wird?
Ich habe einen WebService, der gibt als Ergebnis den Aufruf des Web-Service eine ResponseObject genannt "CustomerResponse
". Wenn ich die Implementierung dieses Objekt "from scratch" alles gut funktioniert: Meine Implementierung nur in diesem Fall enthält alle benötigten "Einfachen Typen" wie Zeichenketten, ganze zahlen, aber KEINE Objekt-Referenzen/Assoziationen.
Jedoch, was ich tun wollte ist, "reuse" vorhandenen Objekte. Ich habe in meinem domain-Modell eine " Customer
" - Objekt, das verwendet wird, in der Anwendung selbst. Statt dumm zu mehr oder weniger Klonen der Customer
in der "CustomerReponse" Objekt (durch manuelle Eingabe wieder alle Mitglieder/- Felder), wollte ich auf Basis der CutomerResponse
Objekt auf der Customer
Objekt durch die Erweiterung:
class CustomerResponse extends Customer
==> Das Problem ist, dass jetzt CustomerResponse
enthält einige "interne" Felder, die geerbt wurden, aus der Customer
Objekt (wie DatabaseID -, Sicherheits-Sachen), dass ich nicht wollen, zu setzen, die über die Web-Service. Außerdem (und das ist derzeit das Hauptproblem") Customer
enthält auch eine Menge von "Objekt-Referenzen/Assoziationen", um andere Objekte wie Address
, Orders
, History
dass ich nicht wollen, zu setzen über den Webservice entweder. (Es scheint, dass Apache CXF "wertet" die ganze Objectgraph und versucht Sie in die ResponseObject...)
==> Ist es möglich, zu "Erweitern" WebService-Response-Objekte basierend auf existierenden Objekten und irgendwie ausschließen einige "Mitglieder/Felder" der erweiterte supertyp? (Also ich will nicht ausschließen, dass einige Mitglieder (wie die DatabseID) und alle von der "Objekt-Assoziationen" wie (Anschrift/Bestellung/Histroy)..
Wie kann ich acomplish dies, mit dem, was Anmerkungen und Verfahren?
Vielen Dank!!
Jan
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den @XmlTransient-annotation wird verwendet, um zu verbergen die Mitglieder, die Sie nicht wollen, gezeigt. Sie sollten in der Lage sein, um kommentieren diese Mitglieder, und Sie werden nicht gebunden werden. Alternativ ändern Sie Ihre @XmlAccessorType zu XmlAccessType.KEINER und nur speziell annotierten Methoden werden in XML gebunden werden.
Bezug auf die @XmlTransient-Anmerkung, fand ich heraus, dass Sie brauchen, um es auf die getter-Methode des Feldes, das Sie ausblenden möchten.
Im Beispiel "fieldHide" werden nicht sichtbar auf der service xsd.
transient
für Ihre Feld-und@XmlTransient
für die get.transient
C# löst dieses problem mit partiellen Klassen. Ich weiß nicht, wie es mit jax-ws.