/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.axis2.scripting; import org.apache.axis2.AxisFault; import org.apache.axis2.context.ConfigurationContext; import org.apache.axis2.deployment.DeploymentException; import org.apache.axis2.description.AxisDescription; import org.apache.axis2.description.AxisModule; import org.apache.axis2.description.Parameter; import org.apache.axis2.engine.AxisConfiguration; import org.apache.axis2.modules.Module; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.neethi.Assertion; import org.apache.neethi.Policy; import java.io.File; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLDecoder; /** * Axis2 module to initialize script services. Uses a ScriptDeploymentEngine to * find all the scripts in the scriptServices directory and deploy them as Axis2 * services. */ public class ScriptModule implements Module { private static final Log log = LogFactory.getLog(ScriptModule.class); static String defaultEncoding = new OutputStreamWriter(System.out).getEncoding(); private ScriptDeploymentEngine deploymentEngine; /** * Init by creating and deploying AxisServices for each script */ public void init(ConfigurationContext configContext, AxisModule module) throws AxisFault { log.debug("script services init"); AxisConfiguration axisConfig = configContext.getAxisConfiguration(); if(axisConfig.getRepository() == null) { log.error("AxisConfiguration getRepository returns null, cannot deploy scripts"); } else { File scriptServicesDirectory = getScriptServicesDirectory(axisConfig); deploymentEngine = new ScriptDeploymentEngine(axisConfig); deploymentEngine.loadRepository(scriptServicesDirectory); deploymentEngine.loadServices(); } log.debug("script module activated"); } /** * Gets the repo directory for the scripts. The scripts directory is a * sub-directory of the Axis2 repository directory. Its name may be defined * by a 'scriptServicesDir' property in the axis2.xml otherwise it defaults * a to a directory named 'scriptServices'. */ protected File getScriptServicesDirectory(AxisConfiguration axisConfig) throws DeploymentException { try { URL axis2Repository = axisConfig.getRepository(); Parameter scriptsDirParam = axisConfig.getParameter("scriptServicesDir"); String scriptsDir = scriptsDirParam == null ? "scriptServices" : (String)scriptsDirParam.getValue(); String path = URLDecoder.decode(axis2Repository.getPath(), defaultEncoding); java.io.File repoDir = new java.io.File(path.replace('/', File.separatorChar).replace('|', ':')); return new File(repoDir, scriptsDir); } catch (UnsupportedEncodingException e) { throw new DeploymentException("UnsupportedEncodingException getting script service directory", e); } } // --- the following are unused methods on the Module interface --- public void applyPolicy(Policy policy, AxisDescription axisDescription) throws AxisFault { } public boolean canSupportAssertion(Assertion assertion) { return false; } public void engageNotify(AxisDescription axisDescription) throws AxisFault { } public void shutdown(ConfigurationContext configurationContext) throws AxisFault { if (deploymentEngine != null) { deploymentEngine.cleanup(); } } }