Jakarta ee JavaEE6教程,使用helloservice获得404错误

Jakarta ee JavaEE6教程,使用helloservice获得404错误,jakarta-ee,glassfish,jax-ws,Jakarta Ee,Glassfish,Jax Ws,我正在学习JavaEE6教程,现在是关于web服务的部分。我正在尝试运行helloservice,因为在不久的将来我需要做一些类似的事情。然而,尽管它构建和部署时没有错误,但当我尝试使用它时,GlassFish却出现了404个错误。我查看了GlassFish日志,没有发现任何问题。以下是服务的代码: package helloservice.endpoint; import javax.jws.WebService; import javax.jws.WebMethod; @WebServi

我正在学习JavaEE6教程,现在是关于web服务的部分。我正在尝试运行helloservice,因为在不久的将来我需要做一些类似的事情。然而,尽管它构建和部署时没有错误,但当我尝试使用它时,GlassFish却出现了404个错误。我查看了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(基类名+服务)的类。然而,当我去:

我得到一个404错误。我已经阅读了前面的所有示例,因此我知道GlassFish正在运行,并且它正在端口8080上响应我部署的其他应用程序。我可以在管理控制台中看到helloservice已部署并正在运行。“asadmin列表域”显示我的域1(我唯一的域)正在运行。我认为@WebService注释的默认值可能是错误的,所以我使用@WebService(serviceName=“Foobar”)设置了一个显式值,但当我尝试检查wsdl(用Foobar替换HelloService)时,这并没有什么不同

我看到其他一些人也有类似的问题,但我没有看到任何解决方案张贴。有人能解释一下什么地方可能出了问题,或者如何修复它吗

然而,尽管它构建和部署时没有错误,但当我尝试使用它时,GlassFish却出现了404个错误。我查看了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>

/helloservice
保留生成的servlet类的java代码的副本。
请注意
/helloservice
元素的使用,它出现在URL中服务名称之前。很可能您在请求中使用了不正确的上下文根,导致404错误

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

信息:WS00018:已部署Webservice终结点

您好,收听地址是

信息:Metro监控根名称已成功设置为:amx:pp=/mon/server mon[server],type=WSEndpoint,name=/helloservice helloservice HelloPort

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

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


确保您使用的是Glassfish完整配置文件,而不是Glassfish web配置文件。部署war后,启动Glassfish管理控制台,单击“应用程序”。您的“引擎”列应该类似于:

[ejb,jpa,web,webservices,weld]


如果web服务不存在,那么Glassfish实现就看不到SOAP服务。

如果您从管理控制台读取web.xml,您可以看到这一点

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

HelloService
/你好

我试着代替了(教程中的一个),效果很好。Guess教程没有正确更新。

在周五对它进行了进一步的研究之后,我发现如果我将同一个项目部署到远程Solaris box上的另一个Glassfish服务器上,它运行得很好。将其部署到本地主机上的Glassfish安装中,它不会运行。我使用相同的Glassfish构建安装了两个应用服务器。我想我的本地Windows安装一定有问题,但到目前为止我还没有什么线索。周一我会在两台服务器上查找这些信息行,看看是否能找到一个起点。这就是问题所在。我已经安装了网络配置文件。我想假设web配置文件支持web服务是不好的。显然,在对比图中,情况并非如此。非常感谢你!