Я использую стороннюю веб-службу, определение и реализация которой находятся вне моего контроля.
Этот веб-сервис изменится в будущем.
Веб-служба должна использоваться для создания файла XML, который содержит некоторые из тех же данных (представленных теми же типами XSD), что и веб-служба, а также некоторую дополнительную информацию, сгенерированную программой.
Мой подход:
- создать свой собственный XSD, ссылаясь на определения XSD WSDL вызываемой веб-службы (этот XSD также включает в себя типы XSD для дополнительной информации.)
- использовать среду привязки данных Java XML (например, ADB или JiXB) для генерации классов привязки данных из моего собственного файла XSD, начиная с шага 1
- использовать инфраструктуру Java SOAP (например, Axis2 или CXF) с той же структурой привязки данных для генерации классов привязки данных из WSDL (это позволило бы мне использовать объекты, полученные веб-службой непосредственно при генерации XML.)
Типы XSD, которые я собираюсь использовать в своем собственном файле XSD, но они определены в WSDL, могут быть изменены. Всякий раз, когда они меняются, я бы хотел снова автоматически обрабатывать привязку данных XSD и WSDL. (Если изменение является достаточно значительным, это может вызвать некоторые усилия по разработке. (Но обычно это не так.))
Моя проблема:
На шаге 1 мне нужен XSD, относящийся к тем же типам, которые используются веб-службой.
WSDL ссылается на другой WSDL, который ссылается на другой WSDL и т. Д. В конце концов существует WSDL с необходимыми встроенными типами XSD. Насколько я знаю, нет никакого способа напрямую ссылаться на встроенные типы XSD WSDL из XSD.
Подход, который я считаю наиболее жизнеспособным, состоит в том, чтобы включить дополнительный этап в автоматическую обработку (до привязки данных), которая извлекает встроенный XSD из WSDL в другие файлы XSD. Эти другие XSD-файлы можно затем ссылаться на мой собственный XSD-файл.
Вещи, которые я бы хотел избежать:
- Скопируйте вручную вставку встроенного XSD в файл XSD (я ищу автоматический процесс).
- Любые шаги вручную. (Как и при определении WSDL, который содержит встроенные типы вручную. (Расположение этого WSDL также изменяется).)
- Использование xsd: any в моем собственном XSD. Я хотел бы, чтобы мой собственный XSD-файл был правильным.
- Использование не Java-технологии (например, .NET)
- Огромное количество реализации (но советы о том, как вы бы реализовали такое извлечение, приветствуются в любом случае)
PS: Я нашел несколько похожих вопросов, но у них были ответы: WTH, вы бы хотели это сделать? Вот причина моей довольно большой предыстории.