Как объединить общие части WSDL и XSD из разных служб?

мне приходится взаимодействовать с набором веб-сервисов, каждый из которых имеет свои собственные WSDL и XSD. XSD иногда объединяются в один файл, иногда распределяются по нескольким файлам (20-30). Однако по опыту я знаю, что большая часть структуры сообщения и данных имеет большое общее подмножество, возможно, только 20% различаются среди разных транзакций.

К сожалению, я не могу контролировать серверные части или объявление служб, поэтому заставить их исправить это не может быть и речи. Первая версия клиента генерировала каждую службу отдельно, а затем использовала их как отдельные фасады, чтобы сформировать согласованную службу более высокого уровня в качестве адаптера для другой системы.

Я использовал CXF с привязкой JAXB по умолчанию и наложил разные сгенерированные пакеты для каждой службы . Я сделал это, потому что некоторые службы используют общую модель данных, но не все используют одну и ту же версию или настройку, поэтому у меня возникают конфликты, и поэтому я выбрал грубую силу, чтобы я мог завершить работу системы.

Однако это вызывает требования к памяти адаптера, чтобы пройти через крышу, поскольку каждая служба загружает свой контекст. Прямо сейчас у меня более 500 МБ памяти используется только для адаптера, в котором размещаются клиенты служб, даже до того, как я начну отправлять запросы и обрабатывать ответы. Хотя я могу без проблем запустить систему в текущей ситуации, это создает ограничения, которые ставят под угрозу развертывание решения; мой клиент хотел бы резко уменьшить это количество (60% или более), чтобы эту систему можно было установить вместе с другими без необходимости обновления оборудования.

Вопрос следующий: Есть ли инструмент или методика, которые позволили бы мне объединить общие части каждой транзакции, чтобы их можно было сгенерировать один раз и ссылаться там, где это необходимо?

Я не привязан к CXF или JAXB, кроме необходимого времени чтобы переформатировать систему в сторону другой структуры или привязки данных.

Заранее благодарю вас за вашу помощь.

--- РЕДАКТИРОВАТЬ ---

Спасибо, Блэз. Это указывает на полезную функцию JAXB: эпизоды. К сожалению, мне все еще нужно извлечь общую базовую часть из разных сервисов. Итак, теперь мне нужно средство для извлечения этих общих частей через структурный diff, то есть инструмент diff, который будет знать о структуре и иерархии типов, описываемых XSD, чтобы были размещены правильные ссылки для соединения общих разделов с специализированные части.

22
задан Newtopian 29 March 2011 в 02:41
поделиться