我正在学习Java EE 6教程,并且我在关于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 (基类名称+“服务”)公开类。但是,当我转到:
http://localhost:8080/helloservice/HelloService?wsdl
我得到一个404错误。我已经完成了前面的所有示例,所以我知道GlassFish正在运行,并且它在端口8080上响应我部署的其他应用程序。我可以在管理控制台中看到helloservice已部署并正在运行。"asadmin list-domain“显示我的domain1 (我唯一的域)正在运行。我认为@WebService注释的默认值可能是错误的,所以我使用@WebService( wsdl = "Foobar")设置了一个显式的值,但当我尝试检查wsdl(用Foobar替换HelloService )时,这并没有什么不同。
我见过其他一些人也有类似的问题,但我没有看到任何发布的解决方案。谁能解释一下哪里可能出了问题,或者如何修复它?
发布于 2011-07-10 22:56:48
确保您使用的是Glassfish完整配置文件,而不是Glassfish web配置文件。部署war后,启动Glassfish管理控制台,单击“应用程序”。您的"Engines“列应该如下所示:
ejb、jpa、web、webservices、weld
如果没有webservices,那么Glassfish实现就看不到SOAP服务。
发布于 2011-10-18 04:38:51
如果您从管理控制台读取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 (教程中的一个),它工作得很好。我猜教程没有正确更新。
发布于 2011-07-09 14:33:40
然而,虽然它的构建和部署没有错误,但当我尝试使用它时,我从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>请注意<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毫秒内成功部署。
https://stackoverflow.com/questions/6625817
复制相似问题