Мне нужно взаимодействовать с набором веб-сервисов, каждый из которых имеет свои собственные WSDL и XSD. XSD иногда объединяются в один файл, иногда распространяемый по нескольким файлам (20-30). Однако, по опыту, я знаю, что большая часть структуры сообщений и данных имеет большое общее подмножество, возможно, только 20% отличаются от разных транзакций.
К сожалению, я не контролирую серверные части или объявление служб, поэтому их исправление не может быть и речи. Первая версия клиента генерировала каждую услугу отдельно, а затем использовала их как отдельные фасады, чтобы сформировать связную услугу более высокого уровня в качестве адаптера для другой системы.
Я использовал CXF с привязкой JAXB по умолчанию и наложил разные сгенерированные пакеты для каждой службы. Я сделал это, потому что некоторые из большинства служб используют общую модель данных, но не все используют одну и ту же версию или настройку, поэтому у меня есть конфликты и, таким образом, выбрал грубую силу, чтобы я мог сделать систему.
Однако это приводит к тому, что требования к памяти адаптера проходят через крышу, поскольку каждая служба загружает их контекст. Прямо сейчас у меня есть 500 МБ памяти, используемой только для адаптера, в котором хранятся клиенты службы, даже до того, как я начну отправлять запросы и обрабатывать ответы. Хотя я могу запускать систему без проблем с использованием текущей ситуации, это создает ограничения, которые ставят под угрозу развертывание решения; мой клиент хотел бы уменьшить это резко (60% и более), чтобы эта система могла быть установлена вместе с другими, не требуя модернизации оборудования.
Вопрос: Есть ли инструмент или техника, которые позволили бы мне объединить общие части каждой транзакции, чтобы их можно было создать один раз и ссылаться там, где это необходимо?
Я не привязан к CXF или JAXB, кроме времени, необходимого для перераспределения системы по отношению к другой структуре или привязкам данных.
Заранее благодарим вас за помощь.
--- EDIT ---
Спасибо, Блейз. Это указывает на особенность JAXB, которая была бы полезна: эпизоды. К сожалению, мне все еще нужно извлечь общую базовую часть различных сервисов. Итак, теперь мне нужно извлечь эти общие части через структурный diff, то есть инструмент diff, который будет знать об иерархии структуры и типа, которую описывает XSD, чтобы были установлены правильные ссылки для подключения общих разделов с специализированные части.