我承认这是一个相当过时的问题,但对于那些仍然分享你(以及目前我的)困境的可怜的灵魂,这里有一些指针(从各种来源但主要来自https://community。 jboss.org/thread/192046):
Java EE Web 服务
首先,使用 JBoss 4.2.2 可能意味着使用 Java EE5。那里的 Web 服务(有或没有 SEAM 2)只能在无状态会话 Bean 之上创建。Java EE 5 中的无状态会话 Bean 需要实现一个使用 @Local 或 @Remote 注释的服务端点接口。虽然这在 Java EE6 中已成为可选,但在这里仍然是强制性的。
所以:
@Local
public interface PluginHandlerInterface {
int processRequest(Account account);
}
@WebService
@Stateless
public PluginHandler implements PluginHandlerInterface { }
POJO 网络服务
如果在 seam 中,您想使用常规 POJO 作为 Web 服务,则您的类必须有另一个定义 Handler 链的特殊注释:
@WebService
// This here makes all the difference!
@HandlerChain(file = "web-service-handler-chain.xml")
public class PluginHandler {
...
}
这是您放入 /WEB-INF/classes/web-service-handler-chain.xml 的处理程序链:
<?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
<handler-chain>
<handler>
<description>seam request handler</description>
<!-- probably not necessary
<handler-name>org.jboss.seam.webservice.SOAPRequestHandler</handler-name>
-->
<handler-class>org.jboss.seam.webservice.SOAPRequestHandler</handler-class>
</handler>
</handler-chain>
</handler-chains>
你必须像这样向战争文件 web.xml 宣布你的服务类:
<listener> <!-- this might already be present in your web.xml -->
<listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
</listener>
<servlet> <!-- Which class is to be used? -->
<servlet-name>PluginHandler</servlet-name>
<servlet-class>your.package.name.PluginHandler</servlet-class>
</servlet>
<servlet-mapping>
<!-- you'll find it under http://localhost:8080/your-war/PluginHandler?wsdl-->
<servlet-name>PluginHandler</servlet-name>
<url-pattern>/PluginHandler</url-pattern>
</servlet-mapping>
所以这三个步骤,创建处理程序链、添加注释和向 web.xml 宣布您的服务,应该可以在 SEAM 中为您解决问题:您将拥有一个 Web 服务和其中可用的 SEAM 上下文。