#java #web-services #remoting
Вопрос:
Кто — нибудь знает действительно простой способ публикации методов Java в виде веб-служб? Мне действительно не нужны накладные расходы на использование Tomcat, Jetty или любой другой контейнерной платформы.
Сценарий: У меня есть набор методов Java в приложении типа службы, к которому я хочу получить доступ с других компьютеров в локальной сети.
Ответ №1:
Ну, Tomcat или Jetty могут быть излишними для публикации только некоторых методов в качестве веб-сервиса. Но, с другой стороны, это не слишком сложно, и они выполняют свою работу, так почему бы и нет?
Не так давно у меня была аналогичная проблема, и я использовал Tomcat вместе с Axis2. Просто скачайте Tomcat, распакуйте его, разверните ВОЙНУ Axis2. Для публикации веб-сервиса существует несколько подходов, тот, который я выбрал, вероятно, один из самых простых:
Просто создайте свое приложение, как обычно, и аннотируйте класс и методы веб-службы соответствующими аннотациями из javax.jws.*. Упакуйте все в банку. Создайте service.xml в каталоге META-INF вашего файла jar и поместите это в него:
<service name="name of the service" scope="<one of request, session or application>">
<description>
optional description of your service
</description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass" locked="false">put here the fully qualified name of your service class (e.g. x.y.z.FooService)</parameter>
</service>
Переименуйте файл .jar в .aar и поместите его в каталог /webapps/axis2/WEB-INF/services/. Запустите tomcat, и служба будет развернута. Вы можете проверить, работает ли он, посетив страницу axis2 (http://localhost:8080/axis2/). Там вы увидите, какие службы развернуты и какие методы экспортированы. Также вы можете получить URL-адрес WSDL для подключения к вашей службе.
Читать http://ws.apache.org/axis2/1_4_1/contents.html для получения дополнительной информации об использовании Axis2. Подход, который я описал здесь, не совсем такой, как в документах, но он работает очень хорошо.
Обновление: Если вы просто хотите предоставлять веб-сервисы и вам действительно не нужны какие-либо другие функции Tomcat (например, обслуживание старых веб-страниц, JSP или других материалов), вы также можете использовать автономный сервер Axis2. Но, за исключением части настройки, это не меняет ничего из того, что я описал.
Я написал немного более подробную версию этого, которую можно найти по адресу: http://www.slashslash.de/lang/en/2008/10/java-webservices-mit-apache-tomcat-und-axis2/ (не позволяйте немецкому языку в URL раздражать вас, он написан на английском языке)
Комментарии:
1. Как бы мы масштабировали это, чтобы обрабатывать миллионы запросов в секунду?
Ответ №2:
Веб-службы зависят от HTTP. Возможно, вам не нужны кот или Причал. В этом случае вам придется реализовать HTTP самостоятельно.
Комментарии:
1. Я вроде как надеялся, что есть какой-нибудь легкий HTTP-сервер, который мог бы работать внутри моего .JAR и обеспечивать минимальный уровень поддержки веб-служб.
2. Если бы такая вещь существовала, все бы уже ею пользовались. Помните, что бы вы ни искали, вы не первый, у кого возникает этот вопрос.
3. разве в JDK1.7 нет пакета javax.jws ? Или, может быть, просто используйте com.sun.net.httpserver из JDK1.6 ?
Ответ №3:
Эм. Почему бы просто не использовать RMI?
Ответ №4:
Причал довольно легкий. В противном случае, я думаю, что XML-RPC-ваш единственный разумный вариант.
Ответ №5:
Более простое решение, чем то, которое описал Саймон, заключается в использовании инструментов, с помощью которых это делает Алради. Если вы используете eclipse, вы могли бы использовать http://ws.apache.org/axis2/tools/1_2/eclipse/servicearchiver-plugin.html
для создания файла aar.