Grails: Wie dump, der die Eigenschaften eines Objekts?

Das setup:

Arbeite ich an einem Grails-Projekt, das erfordert eine Menge von XML-Daten überträgt. Wir sind mit Apache CXF's wsdl2java" zum generieren der entsprechenden Java-Klassen für die Daten-Formate.

Sind wir Zwischenspeicherung einige der XML-Ergebnisse, und ich brauche, um herauszufinden, ob wir haben bereits zwischengespeichert, die einen bestimmten Wert an einem bestimmten Punkt im code (dies ist schon vorgekommen).

, Was ich bin auf der Suche nach:

Einen Weg, um rekursiv dump zufällige Objekte.

Was ich bisher versucht habe:

1) println() -- Dies funktioniert gut für hashmaps mit den grundlegenden Datentypen wie Strings und zahlen, aber nicht auf generische Objekte. Es gibt das wsdl2java-Klasse .toString () - Ausgabe, die ähnelt "com.company.services.provider.ADDRESS@2b1234ca1." Denn dies ist eine automatisch generierte Klasse, wir können nicht ersetzen, dass die Methode einfach.

2) Die Methode, die hier beschrieben werden: http://padcom13.blogspot.com/2009/12/groovy-dumping-objects-properties.html

Ich haben verpackt diese in eine Funktion Hinzugefügt, die es dem Objekt zu.metaClass in BootStrap.groovig. Das ermöglicht es, werden rekursiv aufgerufen, aber nur etwa die Hälfte der wsdl2java Klassen scheinen übernehmen diese Funktion (überprüft mit "println(obj.Metaklasse.metaMethods*.name.sort())"). Keiner von Ihnen explizit verlängern Objekt, so bin ich verloren.

Was ist der sauberste Weg, um rekursiv dump ein random-Objekt die Eigenschaften (vorzugsweise human-readable)?

Vielen Dank im Voraus!

BEARBEITEN:

Vielen Dank an @dmahapatro und @JavaDev für Ihre Ideen. Hier ist der code, den ich auf der Suche bin und jetzt:

import grails.converters.JSON
Object.metaClass.debug_dump = {
    JSON.use('deep')
    println(new JSON(delegate).toString())
}

...

session.cxfResult.debug_dump()

- Und das ist der Fehler, den es erzeugt, wenn Sie ausgeführt wird:

Class org.codehaus.groovy.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller can not access a member of class org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl with modifiers "public". Stacktrace follows:
Message: Class org.codehaus.groovy.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller can not access a member of class org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl with modifiers "public"

Diese besteht trotz der nach den Anweisungen von dieser Person, auf dem Grails-Benutzer-Liste.

InformationsquelleAutor EpicVoyage | 2013-06-25
Schreibe einen Kommentar