Учебник по Java EE 6, ошибка 404 с помощью helloservice - PullRequest
1 голос
/ 08 июля 2011

Я пробираюсь через учебник по Java EE 6 и нахожусь в разделе о веб-сервисах. Я пытаюсь запустить helloservice, потому что мне нужно сделать что-то подобное в ближайшем будущем. Однако, хотя он собирается и развертывается без ошибок, при попытке его использовать я получаю 404 ошибки от GlassFish. Я посмотрел в журналах GlassFish и не нашел ничего, указывающего на какие-либо проблемы. Вот код из сервиса:

package helloservice.endpoint;

import javax.jws.WebService;
import javax.jws.WebMethod;

@WebService
public class Hello {
    private String message = "Hello, ";

    public void Hello() {
    }

    @WebMethod
    public String sayHello(String name) {
        return message + name + ".";
    }
}

Исходя из того, что я прочитал, @WebService должен предоставить класс с именем службы HelloService (имя базового класса + «Служба»). Тем не менее, когда я иду к:

http://localhost:8080/helloservice/HelloService?wsdl

Я получаю ошибку 404. Я работал со всеми предыдущими примерами, поэтому я знаю, что GlassFish работает и отвечает на порт 8080 для других приложений, которые я развернул. Я вижу в консоли администратора, что helloservice развернут и работает. «asadmin list-domains» показывает, что мой домен1 (мой единственный домен) работает. Я подумал, что, возможно, значение по умолчанию для аннотации @WebService было неправильным, поэтому я установил явное значение с помощью @WebService (serviceName = "Foobar"), но это не имело значения, когда я попытался проверить wsdl (заменив HelloService на Foobar).

Я видел, что у некоторых других людей была похожая проблема, но я не видел опубликованных решений. Может кто-нибудь объяснить, что может быть не так, или как это исправить?

Ответы [ 3 ]

2 голосов
/ 10 июля 2011

Убедитесь, что вы используете полный профиль Glassfish, а не веб-профиль Glassfish.После развертывания войны запустите консоль администрирования Glassfish и нажмите «Приложения».Ваша колонка «Двигатели» должна выглядеть примерно так:

[ejb, jpa, web, веб-сервисы , сварка]

Если веб-сервисов нет, ваша реализация Glassfish нене вижу ваш сервис SOAP.

1 голос
/ 18 октября 2011

Если вы читаете web.xml из консоли администратора, вы можете увидеть это.

<servlet-mapping>
    <servlet-name>HelloService</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

Я попытался http://localhost:8080/helloservice/hello?wsdl вместо http://localhost:8080/helloservice/HelloService?wsdl (один в учебнике), и он работал нормально.Учебное пособие по догадкам не было обновлено должным образом.

0 голосов
/ 09 июля 2011

Однако, хотя он собирается и развертывается без ошибок, при попытке его использовать я получаю 404 ошибки от GlassFish. Я посмотрел в журналах GlassFish и не нашел ничего, что указывало бы на какие-либо проблемы.

Обычно это означает, что с развернутыми артефактами на сервере проблем нет. Ведь ошибка 404 указывает на то, что клиент выдал неверный HTTP-запрос. Проще говоря, выданный запрос GET неверен, и вам следует отправить другой.

Исходя из прочитанного, @WebService должен предоставлять класс с именем службы HelloService (имя базового класса + "Служба")

Да, это по умолчанию. Но, что более важно, правильно ли вы указали контекстный корень приложения? Ниже приводится содержание glassfish-web.xml из учебника:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
  <context-root>/helloservice</context-root>
  <class-loader delegate="true"/>
  <jsp-config>
    <property name="keepgenerated" value="true">
      <description>Keep a copy of the generated servlet class' java code.</description>
    </property>
  </jsp-config>
</glassfish-web-app>

Обратите внимание на использование элемента <context-root>/helloservice</context-root>, который отображается перед именем службы в URL. Вероятно, вы используете неверный контекстный корень в своем запросе, что приводит к ошибке 404.

Если вам нужно проверить местоположение, в которое вы собираетесь отправлять запросы, вы найдете подсказки о них в журналах Glassfish при развертывании веб-службы, как показано ниже

ИНФОРМАЦИЯ: WS00018: конечная точка веб-службы развернута

Здравствуйте, слушаю по адресу http://localhost:8080/helloservice/HelloService

ИНФОРМАЦИЯ: Корневое имя мониторинга Metro успешно установлено в: amx: pp = / mon / server-mon [server], type = WSEndpoint, name = / helloservice-HelloService-HelloPort

ИНФОРМАЦИЯ: WEB0671: загрузка приложения [helloservice] в [/ helloservice]

ИНФОРМАЦИЯ: helloservice был успешно развернут за 1616 миллисекунд.

...