Axis2、Spring、Hibernate を使用しています。.aar file
以下のコマンド で作成しました。
jar cvf someName.aar *
私の.aar
ファイルは次のようになります。
_ classFilesWithInPackage (E.g. com/test/.../fileName.java)
|_ META-INF/(MANIFEST.MF and services.xml)
|_ applicationContext.xml
|_ lib/required jars
そして私のservices.xml
は
<serviceGroup>
<service name="SpringInitializationService" class="com.test.service.SpringInitService">
<description>
This web service initializes Spring.
</description>
<parameter name="ServiceClass">com.test.service.SpringInitService
</parameter>
<parameter name="ServiceTCCL">composite</parameter>
<parameter name="load-on-startup">true</parameter>
</service>
<service name="TestService">
<Description>
Policy Web Service
</Description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</messageReceivers>
<parameter name="ServiceClass" locked="false">com.test.service.TestService
</parameter>
<parameter name="ServiceObjectSupplier">
org.apache.axis2.extensions.spring.receivers.SpringAppContextAwareObjectSupplier
</parameter>
<parameter name="SpringBeanName">axis2SpringIntegrationService</parameter>
<parameter name="SpringContextLocation">applicationContext.xml</parameter>
</service>
</serviceGroup>
インターフェイスを実装しServiceLifeCycle
、次のメソッドもオーバーライドします。参考サイトhttp://fazlansabar.blogspot.com.es/2012/04/apache-axis2-tutorial-integrating-with.html .
public class SpringInitService implements ServiceLifeCycle {
ClassLoader classLoader = null;
ClassPathXmlApplicationContext appCtx = null;
@Override
public void shutDown(ConfigurationContext configContext, AxisService axisService) {
appCtx = null;
classLoader = null;
}
@Override
public void startUp(ConfigurationContext configContext, AxisService axisService) {
System.out.println("Inside Spring Init");
try {
classLoader = axisService.getClassLoader();
appCtx = new ClassPathXmlApplicationContext(new String[] {"classpath:**applicationContext.xml"}, false);
appCtx.setClassLoader(classLoader);
appCtx.refresh();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Out of Spring Init");
}
}
そこから.aarファイルを作成してデプロイすると、インターフェースを実装しているためWSO2 server
、正常にデプロイされ、com.test.service.SpringInitService
起動時にクラスもエラーなしで初期化されました。しかし、 (services.xmlの2番目のサービス)で ServiceLifeCycle
利用可能なサービスを呼び出すと、エラーが発生しました。TestService
org.apache.axis2.AxisFault: Axis2 Can't find Spring's ApplicationContext
誰かが私が間違っていることを教えてください。
また、明確にし、
Whether my .aar folder structure is right?
Can we have more than one service in services.xml as above?
What is the best way to have Axis2, Spring and Hibernate together?
更新:
Axis2 サイトの以下のリファレンスに従ってみましたが、うまくいきませんでした。
http://axis.apache.org/axis2/java/core/docs/spring.html
どんな助けでも大歓迎です。前もって感謝します。