2012-04-19 18 views
1

seam 2.0.1を使用してWebサービスを構築し、jboss 4.2.2 GAにデプロイします。私は別のクラスにアクセスする私のWebサービスクラスを持っています(データベース内のものを更新します)。seamでWebサービスを設定する(「アクティブなアプリケーションコンテキストなし」)

META-INFフォルダにはstandard-jaxws-endpoint-config.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が含まれていますか? ご協力いただければ幸いです。

答えて

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のWebServiceの

継ぎ目に、あなたがウェブサービスとして定期的にPOJOを使用したい、場合は、あなたのクラスは、ハンドラチェーンを定義する別の特別な注釈を持たなければなりません:

@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は、SEAMであなたのためのトリックを行う必要があります:あなたはWebサービスとSEAM Contextを利用できます。

関連する問題