首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java EE 6教程,使用helloservice获取404错误

Java EE 6教程,使用helloservice获取404错误
EN

Stack Overflow用户
提问于 2011-07-08 22:21:40
回答 3查看 3.5K关注 0票数 1

我正在学习Java EE 6教程,并且我在关于web服务的部分。我正在尝试让helloservice运行起来,因为在不久的将来我也需要做一些类似的事情。然而,虽然它的构建和部署没有错误,但当我尝试使用它时,我从GlassFish得到了404个错误。我查看了GlassFish日志,没有发现任何问题。以下是该服务的代码:

代码语言:javascript
复制
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-domain“显示我的domain1 (我唯一的域)正在运行。我认为@WebService注释的默认值可能是错误的,所以我使用@WebService( wsdl = "Foobar")设置了一个显式的值,但当我尝试检查wsdl(用Foobar替换HelloService )时,这并没有什么不同。

我见过其他一些人也有类似的问题,但我没有看到任何发布的解决方案。谁能解释一下哪里可能出了问题,或者如何修复它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-10 22:56:48

确保您使用的是Glassfish完整配置文件,而不是Glassfish web配置文件。部署war后,启动Glassfish管理控制台,单击“应用程序”。您的"Engines“列应该如下所示:

ejb、jpa、web、webservices、weld

如果没有webservices,那么Glassfish实现就看不到SOAP服务。

票数 2
EN

Stack Overflow用户

发布于 2011-10-18 04:38:51

如果您从管理控制台读取web.xml,则可以看到以下内容。

代码语言:javascript
复制
<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 (教程中的一个),它工作得很好。我猜教程没有正确更新。

票数 1
EN

Stack Overflow用户

发布于 2011-07-09 14:33:40

然而,虽然它的构建和部署没有错误,但当我尝试使用它时,我从GlassFish得到了404个错误。我查看了GlassFish日志,没有发现任何问题。

这通常表示服务器上部署的工件没有问题。毕竟,404错误表明客户端发出了无效的HTTP请求。简而言之,发出的GET请求是不正确的,您应该发送一个不同的请求。

根据我所读到的内容,@WebService应该使用服务名称HelloService (基类名称+“

”)公开类

是的,这是默认设置。但是,更重要的是,您是否正确地指定了应用程序的上下文根?以下是本教程中glassfish-web.xml的内容:

代码语言:javascript
复制
<?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错误。

如果您需要验证您打算向其发送请求的位置,您可以在部署web服务时的Glassfish日志中找到相同的提示,如下所示

信息: WS00018:已部署INFO服务端点

您好,正在收听http://localhost:8080/helloservice/HelloService的地址

信息: Metro监控根名称已成功设置为:amx:pp=/mon/服务器-monserver,type=WSEndpoint,名称=/HelloService-HelloService-HelloPort

信息: WEB0671:在/helloservice加载应用程序helloservice

信息: helloservice在1616毫秒内成功部署。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6625817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档