Jakarta ee JavaEE6教程,使用helloservice获得404错误
我正在学习JavaEE6教程,现在是关于web服务的部分。我正在尝试运行helloservice,因为在不久的将来我需要做一些类似的事情。然而,尽管它构建和部署时没有错误,但当我尝试使用它时,GlassFish却出现了404个错误。我查看了GlassFish日志,没有发现任何问题。以下是服务的代码: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
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服务是不好的。显然,在对比图中,情况并非如此。非常感谢你!