Работая с большим wsdl, можем ли мы его обрезать?

StackOverflow https://stackoverflow.com/questions/402160

Вопрос

Мой поставщик веб-сервисов предоставил мне большой файл WSDL, но мы собираемся использовать внутри него лишь несколько функций.

Я считаю, что большой размер WSDL отрицательно влияет на производительность приложения.

Мы используем веб-сервис в клиентском приложении, время запуска и использование памяти есть проблемы.Большой WSDL означает, что привязка jax-ws займет больше времени и потребует больше памяти для класса-заглушки.

Возможно ли обрезать файл WSDL до облегченной версии?Есть ли какой-нибудь инструмент для этой цели?

Я не думаю, что мой поставщик веб-сервисов сгенерирует для нас еще один WSDL.Возможно, нам придется сделайте это автоматически в скрипте сборки.

Это было полезно?

Решение

Короче говоря, ваши ответы: «Нет инструмента, но вы можете сделать это своими руками».

Мне бы хотелось, чтобы это мог сделать простой инструмент, потому что мой WSDL содержит слишком много неиспользуемых функций и схем структуры данных.

Если я смогу это автоматизировать, WSDL -> обрезанный WSDL -> создаст классы клиентских заглушек.Ничего неиспользованного не будет сгенерировано, никаких злоупотреблений, никакого обслуживания не потребуется, мы не будем касаться сгенерированного кода, и я действительно могу сосредоточиться на коде, который используется.Меньший JAR, более короткое время анализа XML.Если WSDL обновится, мне нужно будет только перестроить классы клиентских заглушек и запустить модульный тест.

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

Я не знаком со схемой WSDL.Я думаю, можно ли это сделать с помощью XSLT?

Другие советы

Размер WSDL не окажет никакого влияния на производительность...если только вы не загружаете его и/или не анализируете для каждого запроса.И если вы делаете последнее, не делайте этого.Его необходимо обрабатывать только при изменении службы, а служба всегда должна меняться совместимо с продолжающейся поддержкой старых сообщений (по крайней мере, в течение некоторого перекрывающегося периода времени).

Вам следует рассматривать обработку WSDL как изменение программы и делать это так же, как и любой другой выпуск, с управлением версиями, тестированием и т. д.

Проблема не в размере самого WSDL.Имеет значение размер сгенерированного кода.Например, если вы используете Axis2 для генерации кода из большого WSDL, вам придется создать класс запроса/ответа для каждой операции WSDL, а также классы их типов возвращаемых данных.Позже вы получите огромный класс-заглушку, что может повлиять на производительность, поскольку он будет импортировать классы, необходимые для операций веб-службы, которые вам не нужны.

Для этого не существует простого инструмента.Обычно я использую для этого блокнот ++, и ДА, при этом всегда можно допустить ошибку.

Другая распространенная ошибка — выбор создания методов стиля как Sync, так и Async, хотя в большинстве случаев (по крайней мере, в моем случае) вы будете использовать только методы стиля Sync.Это также может значительно увеличить размер вашей заглушки.

Я не использовал инструменты, о которых вы говорите, но вы можете успешно выполнять методы веб-сервиса, даже не касаясь кода WSDL-файла.

Кажется, сейчас самое время провести быстрый тест.Вырежьте из файла WSDL все, кроме того, что необходимо для выполнения одного из более простых методов, которые вы планируете использовать.Вместо этого обратитесь к этой копии WSDL.Если это сработает, вы знаете, что делать дальше!

Нет необходимости обрезать WSDL.Если вы решили пойти по этому пути, просто удалите в классах-заглушках все, что вам не нужно.Просто не забудьте протестировать его по ходу дела, чтобы убедиться, что все по-прежнему работает.

Вы можете просто вручную удалить элементы <wsdl:operation>, соответствующие ненужным вам методам, и посмотреть, достаточно ли этого.У вас должна быть возможность удалить эти элементы, не затрагивая остальную часть файла.

Физический размер WSDL не должен иметь значения, если вы создаете классы клиентских заглушек во время компиляции. (например.через AXIS wsdl2java.) Если вы загружаете WSDL и анализируете его для каждого запроса, то время загрузки, скорее всего, превысит время анализа.Если время загрузки становится проблемой, рассмотрите возможность локального кэширования файла.Если время анализа становится проблемой, вы можете рассмотреть возможность обрезки файла или кэширования проанализированных объектов.Будьте осторожны при кэшировании или обрезке файла, поскольку вам придется интегрировать любые изменения, когда ваш провайдер выдаст новый WSDL.Рассмотрите возможность обновления кэшированного/обрезанного WSDL каждый раз при перезапуске службы или через определенный интервал.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top