Axis 2+Spring開発時にService注入が空の問題に遭遇

1914 ワード

需要:SSIプロジェクトでAxis 2のWEBSERVICE技術を使用する.新しいAxis 2のサービスクラスが元のプロジェクトのACTIONとして機能します.
質問説明:Axis 2クラスを作成した後、@Resourceを直接使用してSpringのServiceクラスをAxis 2クラスに直接注入しようとしたが、直接空になった.コードは次のとおりです.
構成クラス:server-config.wsdd

<service name="test" provider="java:RPC">
  <parameter name="allowedMethods" value="*"/>
  <parameter name="className" value="com.webservice.ServerTest"/>
 </service>

サービスJAVA類:ServerTest.java

public class ServerTest {
    @Resource
    private TestService testService;
    public String test(String name){	
        return testService.toString();	
    }
}

サーバはこれだけで,クライアントコードが貼り付けられ,クライアントがアクセスすると,5行目の場所でポインタが直接空になり,testServiceが注入に成功しなかったことを示す.
フレームワークはSSIで、通常のActionでは、直接このように書くことができます.
 @Resource
    private TestService testService;

その後、ネット上の資料を調べてみると、
この実装手法自体は逆方向に生成されspringによって管理されるものではないため,注入を用いたモードでは結果が得られず,他の方法で取得する必要がある.
-----------------------------------------------
次のようなサーバTestを変更します.JAva、以下の通りです.

public class ServerTest {
    private static WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
    TestService testService= (TestService)getContext().getBean("testService");
    public String test(String name){	
        return testService.toString();	
    }
}

これで問題が解決する.
2、3行のコードに注意してください.
-----------------------------------------------
まとめ:
1、Axis 2を使用する場合は、XML配置でOKです.
2、ANNOTATIONでBeanを取得するには、私が上記のようにしてもいいです.contextをグローバルにして静的にすることが望ましい.
3、CXFを使えば、Springともっとうまく結合できるようです.
4、Axis 2に対しても、使うか解決するかの段階にすぎず、深く研究していないので、上記の解決方法がもっと良い方法があれば、伝言を歓迎します.