Работая с большим wsdl, мы можем обрезать его? - PullRequest
5 голосов
/ 31 декабря 2008

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

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

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

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

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

Ответы [ 7 ]

3 голосов
/ 01 января 2009

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

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

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

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

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

2 голосов
/ 03 июля 2014

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

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

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

2 голосов
/ 31 декабря 2008

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

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

1 голос
/ 31 декабря 2008

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

1 голос
/ 31 декабря 2008

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

1 голос
/ 31 декабря 2008

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

1 голос
/ 31 декабря 2008

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

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

...