Java: использование конечной точки для публикации веб-сервиса на сервере Tomcat - PullRequest
11 голосов
/ 18 января 2010

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

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

У меня такой вопрос: использует ли Endpoint.publish сервер tomcat для размещения этого сервера, или это сервер типа мини-стеклянной рыбы?

Должен ли я расширять 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";
    }
}

Ответы [ 2 ]

25 голосов
/ 18 января 2010

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

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

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

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

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

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

1 голос
/ 12 октября 2010

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

...