在seam中配置web服务(“无活动应用程序上下文”)

在seam中配置web服务(“无活动应用程序上下文”),web,service,jboss,Web,Service,Jboss,我正在使用seam 2.0.1构建一个web服务,并将其部署在jboss 4.2.2 GA上。我有一个web服务类,可以访问另一个类(更新数据库中的内容) 我在META-INF文件夹中有标准jaxws端点配置.xml @Name("pluginHandler") @Scope(ScopeType.APPLICATION) @Install(precedence = Install.BUILT_IN) @Startup(depends = "someclass") @Stateless @W

我正在使用seam 2.0.1构建一个web服务,并将其部署在jboss 4.2.2 GA上。我有一个web服务类,可以访问另一个类(更新数据库中的内容)

我在META-INF文件夹中有
标准jaxws端点配置.xml

@Name("pluginHandler")
@Scope(ScopeType.APPLICATION)  
@Install(precedence = Install.BUILT_IN)
@Startup(depends = "someclass")

@Stateless
@WebService(name = "Plugin", serviceName = "PluginService")


public class PlugInHandler {

@WebMethod
public int processRequest(Account account)
{

    Workbench wb = Component.getInstance("Workbench");
    //above line keeps throwing exception "No application context active"

    }

}
我一直在寻找不同的论坛,但我找不到一个解决方案。我尝试使用
Lifecycle.begincall()
Lifecycle.endCall()
,但没有任何效果。 我也需要
web.xml
吗?如果是,
web.xml
应该包含哪些信息?
任何帮助都将不胜感激。

我承认这个问题已经过时,但对于那些仍与你(目前是我)处境相同的少数可怜的灵魂,这里有一些建议(从各种来源收集,但主要来自):

Java EE Web服务

首先,使用JBoss4.2.2可能意味着使用JavaEE5。那里的Web服务(有或没有SEAM 2)只能在无状态会话bean之上创建。JavaEE5中的无状态会话bean需要实现带有@Local或@Remote注释的服务端点接口。虽然这在JavaEE6中是可选的,但在这里仍然是强制性的

因此:

POJO网络服务

如果在seam中,您希望将常规POJO用作web服务,则您的类必须具有另一个定义处理程序链的特殊注释:

@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>

seam请求处理程序
org.jboss.seam.webservice.SOAPRequestHandler
您必须向war文件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>

org.jboss.seam.servlet.SeamListener
插件处理器
您的.package.name.PluginHandler
插件处理器
/插件处理器

因此,这三个步骤,创建处理程序链,添加注释,并向web.xml宣布您的服务,应该可以在SEAM中为您提供技巧:您将有一个web服务和SEAM上下文在其中。

我认识到,这是一个相当过时的问题,但对于仍然分享您的服务的少数可怜的灵魂来说(以及,目前我的)困境,这里有几个指针(从各种来源汇集到一起,但主要来自):

Java EE Web服务

首先,使用JBoss 4.2.2可能意味着使用Java EE5。那里的Web服务(带或不带SEAM 2)只能在无状态会话bean上创建。Java EE 5中的无状态会话bean需要实现一个带有@Local或@Remote注释的服务端点接口。虽然这在Java EE6中是可选的,但在这里仍然是强制性的

因此:

POJO网络服务

如果在seam中,您希望将常规POJO用作web服务,则您的类必须具有另一个定义处理程序链的特殊注释:

@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>

seam请求处理程序
org.jboss.seam.webservice.SOAPRequestHandler
您必须向war文件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>

org.jboss.seam.servlet.SeamListener
插件处理器
您的.package.name.PluginHandler
插件处理器
/插件处理器
因此,在SEAM中,创建处理程序链、添加注释和向web.xml宣布您的服务这三个步骤应该可以帮到您:您将拥有一个web服务和SEAM上下文