サービスのデプロイ
AxisConfiguraion が取得できるところを見落としてました。いやはや、お恥ずかしい。
ServletContext に ConfigurationContext が格納されるようなので、そこから AxisConfiguraion が取得できるようですね。
ということで、早速サービスのデプロイを試してみました。
まずは、dicon で定義したコンポーネントをWebサービスに登録する AxisDeployer(S2Axis2版)を作成。
public class AxisDeployer { protected S2Container container; protected AxisConfiguration axisConfig; public AxisDeployer() {} public void deploy() { if (this.axisConfig != null) { forEach(container.getRoot()); } } protected void forEach(final S2Container container) { final int componentDefSize = container.getComponentDefSize(); for (int i = 0; i < componentDefSize; ++i) { process(container.getComponentDef(i)); } final int childContainerSize = container.getChildSize(); for (int i = 0; i < childContainerSize; ++i) { forEach(container.getChild(i)); } } protected void process(final ComponentDef componentDef) { final MetaDef serviceMetaDef = getMetaDef(componentDef, "service"); if (serviceMetaDef != null) { serviceDeploy(componentDef, serviceMetaDef); } } private void serviceDeploy(ComponentDef componentDef, MetaDef metaDef) { try { String className = componentDef.getComponentClass().getName(); Parameter parameter = new Parameter(Constants.SERVICE_CLASS, className); AxisService service = new AxisService(componentDef.getComponentName()); service.addParameter(parameter); service.setClassLoader(Thread.currentThread() .getContextClassLoader()); Utils.fillAxisService(service, this.axisConfig); this.axisConfig.addService(service); } catch (AxisFault e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } // S2Axis と同じメソッドは省略。 public void setServletContext(final ServletContext servletContext) { ConfigurationContext configContext = (ConfigurationContext) servletContext .getAttribute("CONFIGURATION_CONTEXT"); this.axisConfig = configContext.getAxisConfiguration(); } }
続いて、S2Axis の「ex01 コンポーネントをWebサービスとして公開する」のサンプルを登録してみる。
S2AxisExamples 1.0.1 で、中身のjarファイルをAxis2のものに入れ替えて、サンプルプロジェクトを作成。
既存のサンプルをそのまま利用して、次のURLにアクセスしてみます。
diconでcomponentタグのname属性に "Echo" と指定しているので、サービス名がEchoとなっています。
http://localhost:8080/s2axis2-example/services/Echo?wsdl
すると・・・
成功です!! WSDLの表示ができました。
AxisServiceクラスの作成方法などは、まだ理解不足な点があるので、各プロパティの意味をちょっと調べる必要がありそうですね。
でも、まずは一歩前進。