Как динамически создавать WSDL программно, а также анализировать запросы без сгенерированного кода или заглушек на Java?

#java #web-services #wsdl

#java #веб-сервисы #wsdl

Вопрос:

Вот что я хочу сделать:

У меня есть веб-приложение Java, в котором я могу определить сервис, который выполняет код (например, JRuby), и в нем также указываются входные и выходные параметры. Вся эта информация хранится в базе данных.

Сегодня на основе этой информации я могу отобразить веб-страницу, представляющую поля формы для входных данных. Если пользователь отправляет форму, я анализирую параметры входного запроса и передаю их фактическому коду JRuby и возвращаю выходные данные обратно на страницу ответа.

Что я хочу сделать сейчас, так это сделать то же самое, но не показывать пользователю веб-сайт в формате HTML, а вместо этого показывать WSDL. Предполагая, что потребитель этого WSDL создает SOAP-клиент на своей стороне и вызывает мой веб-сервис, включая требуемые входные параметры, я хотел бы иметь некоторый Java-код, который может анализировать входящий SOAP-запрос, проверять его на соответствие динамически сгенерированному файлу WSDL, извлекать параметры входного запроса, передавать их в код JRuby и возвращать результаты в виде другого SOAP-запроса.

Короче говоря:

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

Я думаю, что мог бы сгенерировать WSDL действительно вручную (конкатенация строк или какой-нибудь, например, шаблон freemarker), а затем проанализировать xml также вручную, но я подумал, есть ли лучший способ сделать это программно.

Спасибо Christoph

Комментарии:

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

2. @artbristol Хм, я не знаю. Возможно, да. Как это могло бы выглядеть тогда? У меня будет операция с 0 .. n входными параметрами, например, типа string и 0 .. n выходными параметрами, скажем, также типа string. все это должно быть передано некоторому методу (URL). есть ссылки для чтения? Спасибо.

3. Я бы придерживался одного параметра ввода и вывода в операции WSDL, но придал параметру тип XML, который может содержать список строк.

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

5. Я думаю, что нашел хорошую библиотеку, которая делает именно то, что я хочу, а также может быть использована для oposite, который программно создает запрос SOAP. membrane-soa.org/wsdl-java-api-create.htm

Ответ №1:

Вы могли бы попробовать взглянуть на wsdl4j. У меня похожая проблема, и я наткнулся на wsdl4j в поисках решения, я еще не полностью протестировал его. здесь есть PDF-документ, объясняющий, как его использовать (глава 10 «Программное создание определений»), надеюсь, это может помочь.

Maxx

Комментарии:

1. Это отличный документ. Он содержит раздел под названием «10. Программное создание определений «, которое звучит так, как будто это то, что мне нужно. Теперь я углублюсь в эту информацию.