1

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

standard-jaxws-endpoint-config.xml在 META-INF 文件夹中。

@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包含哪些信息?任何帮助将不胜感激。

4

1 回答 1

1

我承认这是一个相当过时的问题,但对于那些仍然分享你(以及目前我的)困境的可怜的灵魂,这里有一些指针(从各种来源但主要来自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 上下文。

于 2013-02-04T14:01:44.590 回答