1

Seam 2.0.1 を使用して Web サービスを構築し、jboss 4.2.2 GA にデプロイしています。別のクラスにアクセスするWebサービスクラスがあります(データベース内のものを更新します)。

standard-jaxws-endpoint-config.xmlMETA-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 のアノテーションが付けられた Service Endpoint Interface を実装する必要があります。これは Java EE6 ではオプションになりましたが、ここではまだ必須です。

そう:

@Local
public interface PluginHandlerInterface {
   int processRequest(Account account);
}

@WebService
@Stateless
public PluginHandler implements PluginHandlerInterface { }

POJO Web サービス

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>

そして、次のようにサービス クラスを 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>

したがって、ハンドラー チェーンの作成、注釈の追加、web.xml へのサービスのアナウンスの 3 つの手順は、SEAM でうまく機能するはずです。

于 2013-02-04T14:01:44.590 に答える