gpt4 book ai didi

jakarta-ee - Glassfish web.xml servlet 映射到 @WebService 获取 ClassCastException

转载 作者:行者123 更新时间:2023-12-02 18:01:33 27 4
gpt4 key购买 nike

当部署到 Glassfish(最好也部署到 TomEE)时,我试图获得对 Web 服务 URL 端点的控制。

我有一个类:

@Stateless
@WebService(
targetNamespace = "http://foo.net/doc/2012-08-01",
name = "FooService",
portName = "FooPort",
serviceName = "FooService")
public class FooSoapService extends SoapBase {
...
}

还有一个 web.xml:

<servlet>
<description>SOAP Endpoint for Foo operations.</description>
<servlet-name>Foo</servlet-name>
<servlet-class>com.foo.FooSoapService</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FooPack</servlet-name>
<url-pattern>/soap/FooPack</url-pattern>
</servlet-mapping>

如果我在 Glassfish 中部署时访问/context-root/soap/FooPack?wsdl 我最终会得到:

java.lang.ClassCastException: com.foo.FooSoapService cannot be cast to javax.servlet.Servlet

除了一些 jax-rs 的内容之外,web.xml 中几乎没有其他内容。

有什么想法吗?

最佳答案

嗯,FooSoapService您声称是Web服务实现类的类需要实现服务接口(interface),可能是FooService在您的 @WebService 中定义注释serviceName属性。

您收到此异常的原因是因为您的 FooSoapService类不是 javax.servlet.Servlet 的实例可以肯定的是,它并不需要是一个。在 web.xml 中,您无法公开您的 Web 服务端点。需要通过 sun-jaxws.xml 完成。像这样的事情:

<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
<endpoint name="FooPort" implementation="com.foo.FooSoapService" url-pattern="/services/FooService"/>
</endpoints>

你的 web.xml 应该是这样的:

<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>Foo</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Foo</servlet-name>
<url-pattern>/services/FooService</url-pattern>
</servlet-mapping>

如果您进行这些更改,那么您将能够从以下位置获取 WSDL:

/context-root/services/FooService?wsdl

关于jakarta-ee - Glassfish web.xml servlet 映射到 @WebService 获取 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15156171/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com