Простые веб-службы Java

#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.