В моем приложении у нас есть метод веб-сервиса getFoo (), который возвращает объект Foo. Метод getFoo () вызывается несколько сотен раз в секунду . Объект Foo переносится из нашего Java-объекта в ответ SOAP XML с использованием Apache CXF.
По результатам профилирования нашего приложения мы определили, что сортировка этого объекта (java-объект -> кодированный мылом xml) является единственным наибольшим потребителем циклов ЦП. , и поскольку наш объект Foo не меняется часто повторная обработка этого объекта каждый раз не нужна.
Я подумал, что это обычная оптимизация, и поинтересовался, как к ней относятся другие.
Я кратко посмотрел на документы CXF, и есть перехватчик Маршалла, который я, вероятно, мог бы использовать. Я мог бы создать карту, которая могла бы сопоставить объекты Foo с версией в кодировке XML. Но затем возникает несколько других проблем, например, как вы удаляете объекты с этой карты, когда они больше не нужны и т. Д. Было бы хорошо, если бы была встроенная поддержка для какого-либо обнаружения изменений в объекте и повторного маршалинга. Ничего невозможного, но не хотел изобретать велосипед.
РЕДАКТИРОВАТЬ (16.06.09) : добились определенного прогресса, создав собственный BareOutInterceptor и изменив цепочку перехватчиков для вызова пользовательского. Пользовательский интерфейс добавляет некоторую дополнительную логику для вызова только метода «writeParts (....)», который выполняет маршалинг только один раз для данного объекта Java. Разместим решение, как только закончим. Также я переименовал вопрос.