Публикация конечной точки на Bluemix Server

Я пытаюсь опубликовать конечную точку веб-службы на сервере Bluemix. Когда я попытался вызвать метод как:

public class HelloWorldPublisher{

    public static void main(String[] args) {
        Endpoint.publish("http://myapp.eu-gb.mybluemix.net/ws/hello", new HelloWorldImpl());
    }
}

или как:

public class HelloWorldPublisher{

    public static void main(String[] args) {
        Endpoint.publish("/ws/hello", new HelloWorldImpl());
        }
}

и попробуйте получить доступ к документу wsdl, я получаю Error 404: java.io.FileNotFoundException: SRVE0190E: File not found: /ws/hello

Кстати, я следую этому руководству. Спасибо за помощь.


person smtnkc    schedule 30.05.2015    source источник


Ответы (2)


При публикации веб-службы вы должны использовать формат http://<host>:<port>/<path>.

Пример:

Endpoint.publish("http://localhost:80/ws/hello", new HelloWorldImpl());

Однако, когда вы указываете localhost, не очень понятно, на каком сетевом адаптере будет доступен ваш веб-сервис. Если на вашем сервере есть адаптер локальной сети и беспроводной сети, возможно, ваша служба доступна только на одном из этих 2.

Если вы знаете, на каком сетевом адресе будет работать служба, то вам следует заменить его конкретным IP-адресом. В качестве альтернативы, если вы укажете 0.0.0.0, он будет работать на ВСЕХ сетевых адаптерах.

Endpoint.publish("http://0.0.0.0:80/ws/hello", new HelloWorldImpl());

Я предлагаю попробовать адрес «0.0.0.0» и дважды проверить номер порта.

ИЗМЕНИТЬ:

Я вижу, что здесь есть источник путаницы. Итак, здесь следует более длинное объяснение. (пропустите это, если не нужно):

В наши дни компьютеры имеют несколько сетевых адаптеров. Некоторые из них могут быть виртуальными, некоторые — реальными физическими соединениями. Смотрите, у меня 7. Мои сетевые адаптеры

Большинство современных сетевых приложений основаны на TCP/IP (например, FTP, HTTP, электронная почта и т. д.). Приложениям TCP/IP требуется IP-адрес и номер порта для размещения или подключения к службам. . Веб-сервисы ничем не отличаются. Вам необходимо опубликовать свой веб-сервис по IP-адресу и номеру порта.

Здесь все становится сложнее. Ваш компьютер имеет несколько сетевых адаптеров. Поэтому вполне вероятно, что у вашего компьютера несколько IP-адресов. Если вы просто опубликуете свой сервис, не указав адрес, который он должен использовать, возможно, что ваш веб-сервис будет доступен только через один конкретный сетевой адаптер. И возможно, что это неправильный.

По этой причине рекомендуется точно указать, на каком адресе вы хотите разместить свою службу. Например, если ваш предпочтительный адаптер локальной сети имеет фиксированный IP-адрес (например, 192.168.1.20), тогда вы можете опубликовать свой сервис на http://192.168.1.20:80/ws/hello. Теперь абсолютно понятно, на каком адаптере вы хотите запустить свой сервис.

Проблема в том, что не все компьютеры имеют фиксированный IP-адрес. Так что, к счастью, вы также можете указать http://localhost:80/ws/hello. В этом случае ваш веб-сервис также будет доступен для других компьютеров в вашей сети. Кроме !!!! ...и это важно!!! кроме случаев, когда ваш веб-сервис был запущен на неправильном сетевом адаптере. Видите ли, поскольку вы не указали точный IP-адрес, ваш компьютер выберет сетевой адаптер или несколько. Но не всегда понятно, какой. Он может быть неправильным.

Итак, это приводит нас к http://0.0.0.0:80/ws/hello, который является специальным IP-адресом. Это означает, что веб-сервис будет доступен на ВСЕХ возможных сетевых адаптерах. (Обратите внимание, что IP-адрес действительно должен быть 0.0.0.0 точно таким, как написано здесь. Его не можно заменить реальным IP-адресом. 0.0.0.0 — это IP-адрес, который вам нужно использовать. Это специальный адрес. .)

Есть еще вопросы ? :)

person bvdb    schedule 03.06.2015
comment
Спасибо, но что, если я не хочу публиковать его на локальном компьютере? Я имею в виду, что мне нужно опубликовать его на сервере и поделиться URL-адресом wsdl с моими клиентами. Возможно ли и как мне назначить URL-адрес для конечной точки? - person smtnkc; 05.06.2015
comment
Я добавил еще несколько пояснений в свой пост выше. -- По вашему конкретному вопросу: конечная точка http://localhost:80/... обычно также доступна с других компьютеров. Указанное имя хоста — это просто способ помочь вашему серверу приложений запустить веб-сервис для правильной сети. Но вы должны выбрать URL-адрес http://0.0.0.0:80/ws/hello , этот URL-адрес будет работать всегда , потому что он делает ваш веб-сервис доступным для ВСЕХ сетей. - person bvdb; 05.06.2015
comment
Спасибо за четкое объяснение :) У меня возникла эта проблема, когда я запускаю свой сервис в bluemix или работаю на сервере websphere. На самом деле это почти тот же вопрос, но вы можете проверить тему THE. - person smtnkc; 06.06.2015

Дважды проверьте, что вы активируете функцию JAX-WS в файле server.xml профиля Liberty. Что-то вроде:

   <featureManager>
        <feature>jsp-2.2</feature>
        <feature>jaxws-2.2</feature>
   </featureManager>

Вы можете проверить различные варианты публикации приложения в Bluemix. в пакет сборки Bluemix Liberty. Один из них отправляет файлы конфигурации с приложением, что вам нужно для активации функции JAX-WS.

Надеюсь, поможет,

Химия.

person Jose Miguel Ordax    schedule 31.05.2015
comment
Я вижу функцию jaxws-2.2 на странице «Файлы и журналы», как вы показываете. - person smtnkc; 31.05.2015
comment
А ошибок в /logs/messages.log при запуске сервера и приложения нет? - person Jose Miguel Ordax; 31.05.2015
comment
Он не видит функцию [ERROR ] CWWKF0001E: A feature definition could not be found for jaxws-2.2 - person smtnkc; 31.05.2015