Java: использование конечной точки для публикации webservice на сервере tomcat

Я создаю простой веб-сервис SOAP. я должен убедиться, что он работает на веб-службе tomcat.

im пытается реализовать это с помощью JAX-WS (см. код)

мой вопрос: использует ли Endpoint.publish сервер tomcat для размещения этого сервера или является ли он сервером типа mini glassfish?

Должен ли я распространять UnicastRemoveObject или что-то похожее вместо этого?

в идеале он мог бы быть упакован в .WAR и упал в каталог и просто работать.

Кажется, он не работает с моим установленным сервером tomcat, поскольку он говорит, что порт уже используется. Я использую Ubuntu karmic с установленным пакетом tomcat6, также может быть у моего пользователя нет разрешений на публикацию в текущем tomcat на 8080

Надеюсь, этот вопрос достаточно ясен.

пример кода:

@WebService
public class UserAttributes {
    public static void main(String[] args) {
        UserAttributes instance = new UserAttributes();
        Endpoint.publish("http://localhost:8082/WebServices/userattributes", 
            instance);
    }

    public string Hello() {
       return "Hello World";
    }
}

Ответ 1

Использует ли Endpoint.publish сервер tomcat для размещения этого сервера или является ли он сервером мини-сотового типа?

JAX-WS RI Endpoint.publish API по умолчанию использует легкую HTTP-версию сервера, которая включена в Sun Java SE 6. Итак, Нет, он использует не встроенный GlassFish и встроенный Tomcat, а тем более ваш существующий Tomcat install: он использует контейнер embedded, то есть что-то работает внутри одной JVM. Просто FYI, однако, возможно подключить другие реализации до тех пор, пока они предоставляют реализацию поставщика услуг (SPI). Например, Jetty 6 делает это, см. J2se6HttpServerSPI. Но я не собираюсь описывать все подробности здесь:)

Кажется, он не работает с моим установленным сервером tomcat, поскольку он говорит, что порт уже используется.

Как я уже говорил выше, API Enpoint.publish не использует вашу существующую установку Tomcat. Он использует собственный сервер и позволяет развертывать веб-службу без необходимости упаковки и развертывания вашего приложения. Это особенно полезно при разработке (поскольку оно ускоряет работу). На самом деле это очень удобно.

Теперь, если у вас есть сервер Tomcat, работающий на порту 8082, и если вы попытаетесь опубликовать свой Endpoint с помощью одного и того же порта, все будет работать так, как вы заметили. Используйте другой (и неиспользуемый) порт во время разработки.

И если вы хотите развернуть свои веб-службы для существующей установки Tomcat, вам придется упаковать их в войну и развернуть эту войну на Tomcat. Но это совершенно другое и не имеет никакого отношения к использованию API Endpoint.publish.

Ответ 2

Очень интересно. Мне кажется, что встроенный сервер также содержит мыльный движок для обработки мыльных сообщений, отправленных на этот порт. Является ли это также встроенным мыльным движком или использует один из популярных мыльных двигателей (axis2, cxf, metro)