Настройка:
Я работаю над проектом Grails, который включает в себя множество передач XML-данных. Мы используем утилиту Apache CXF wsdl2java для создания соответствующих классов Java для форматов данных.
Мы кэшируем некоторые из результатов XML, и мне нужно выяснить, если мы уже кэшировали определенное значение в определенной точке кода (это было раньше).
Что я ищу:
Способ рекурсивного сброса случайных объектов.
То, что я пробовал до сих пор:
1) println() - Это хорошо работает для хэшмапов с базовыми типами, такими как строки и целые числа, но не работает с общими объектами. Он выводит вывод wsdl2java.toString(), который напоминает "[email protected]". Поскольку это автоматически сгенерированный класс, мы не можем легко заменить этот метод.
2) Метод, описанный здесь: http://padcom13.blogspot.com/2009/12/groovy-dumping-objects-properties.html
Я обернул это в функцию и добавил его в Object.metaClass в BootStrap.groovy. Это позволяет называть его рекурсивно; однако только половина классов wsdl2java, кажется, наследует эту функцию (проверяется с помощью "println (obj.metaClass.metaMethods *.name.sort())" ). Ни один из них явно не расширяет Object, поэтому я теряюсь.
Каков самый чистый способ рекурсивно сбрасывать свойства случайных объектов (желательно для человека)?
Спасибо заранее!
ИЗМЕНИТЬ
Большое спасибо @dmahapatro и @JavaDev за их идеи. Вот код, который я просматриваю прямо сейчас:
import grails.converters.JSON
Object.metaClass.debug_dump = {
JSON.use('deep')
println(new JSON(delegate).toString())
}
...
session.cxfResult.debug_dump()
И это ошибка, которую он создает при запуске:
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"
Это сохраняется, несмотря на следующие указания этого пользователя в списке пользователей Grails.