JAXB Customizing - Generierung von equals und hashCode
Nachdem ich, wie im vorherigen Blogeintrag beschrieben, das Mapping von XMLGregorianCalendar angepasst hatte, stellte sich kurz darauf ein weiteres Problem heraus. Ich mußte mehrere Listen mit Webservice Client Stub Objekte mergen und sortieren. Dies wollte ich über eine java.util.TreeSet lösen. Um Duplikate feststellen zu können, benötigt dieses aber eine Implementierung der Um die Genierung zu veranlassen, kann man auf bestehende Plugins des
<plugin>
<artifactId>cxf-codegen-plugin</artifactId>
.
.
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>0.6.1</version>
</dependency>
</plugin>
Zur Laufzeit der Generierung muß folgende Abhängigkeit vorhanden sein: <dependency> <groupId>org.jvnet.jaxb2_commons</groupId> <artifactId>jaxb2-basics-runtime</artifactId> <version>0.6.1</version> </dependency> Da jetzt das Plugin verfügbar ist, kann der Aufruf in der <plugin> <artifactId>cxf-codegen-plugin</artifactId> . . . <wsdl>example.wsdl</wsdl> <bindingFiles> <bindingFile>jaxb-binding.xml</bindingFile> </bindingFiles> <extraargs> <extraarg>-xjc-Xequals</extraarg> <extraarg>-xjc-XhashCode</extraarg> </extraargs> . . . </plugin> Standardmäßig wird vom Compiler die Ich wollte wiederum nicht die Strategie wechseln, sondern nur die Auswahl der Properties einschränken. Denn mein Objekt hatte schon ein ID-Property, die ich verwenden wollte. Das andere Property (standardText), sollte nicht für die EqualsStrategy verwendet werden. Um dies zu erreichen, muß man die <jaxb:bindings version="2.0" <jaxb:bindings schemaLocation="example.wsdl#types4" node="//xs:schema"> </jaxb:bindings> Über Danach hangelte ich mich mit weiteren XPath Ausdrücken zu meinem Element, das ich dann mit Nach einer weiteren Stub-Generierung kam dann dabei die von mir gewünschte equals-Methode heraus.
public boolean equals(ObjectLocator thisLocator,
ObjectLocator thatLocator,
Object object,
EqualsStrategy strategy) {
if (!(object instanceof DataItem)) {
return false;
}
if (this == object) {
return true;
}
final DataItem that = ((DataItem) object);
{
String lhsId;
lhsId = this.getId();
String rhsId;
rhsId = that.getId();
if (!strategy.equals(LocatorUtils.property(thisLocator, "id", lhsId),
LocatorUtils.property(thatLocator, "id", rhsId), lhsId, rhsId)) {
return false;
}
}
return true;
}
public boolean equals(Object object) {
final EqualsStrategy strategy = JAXBEqualsStrategy.INSTANCE;
return equals(null, null, object, strategy);
}
| Willkommen auf dem avono BlogHier auf dem avono Blog finden Sie in regelmäßigen Abständen sowohl technische Neuigkeiten aus unserer Partnerproduktwelt als auch nützliche Entwicklertipps.Und jetzt kommt der obligatorische Disclaimer: Die Ausführungen der Blogeinträge spiegeln nicht die Meinung der avono AG sondern nur die Sicht der einzelnen Autoren wider. Weitere Blogbeiträge JIRA5 – Statusprüfung abgegebener Aufgaben
am 30. April 2012 FishEye als Git Repository Manager
am 12. April 2012 Unite - Erste europäische Atlassian Anwenderkonferenz
am 11. April 2012 So macht Groovy Scripting in JIRA mehr Spaß
am 22. Dezember 2011 Mens sana in corpore sano
am 15. August 2011 |
