001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: */
019: package org.apache.axis2.scripting.convertors;
020:
021: import org.apache.axis2.AxisFault;
022: import org.apache.axis2.description.AxisService;
023: import org.apache.axis2.description.Parameter;
024: import org.apache.axis2.engine.AxisConfiguration;
025: import org.apache.axis2.scripting.ScriptReceiver;
026:
027: public class ConvertorFactory {
028:
029: /**
030: * Creates an OMElementConvertor for the script.
031: *
032: * The OMElementConvertor impl class name is either:
033: * - the convertor class name attribute from the script element in the sevices.xml
034: * - the value of the parameter name XXOMElementConvertor in the axis2.xml
035: * where XX is the script language suffix upper cased, eg. JS or RB
036: * - org.apache.axis2.receivers.scripting.convertors.XXOMElementConvertor where
037: * where XX is the script language suffix upper cased, eg. JS or RB
038: * - org.apache.axis2.receivers.scripting.convertors.DefaultOMElementConvertor
039: */
040: public static OMElementConvertor createOMElementConvertor(
041: AxisService axisService, String scriptName)
042: throws AxisFault {
043: OMElementConvertor oc = getScriptConvertor(axisService);
044: if (oc == null) {
045: oc = getAxis2Convertor(axisService, scriptName);
046: }
047: if (oc == null) {
048: try {
049: oc = getDefaultScriptConvertor(axisService, scriptName);
050: } catch (Exception e) {
051: throw AxisFault.makeFault(e);
052: }
053: }
054: if (oc == null) {
055: oc = new DefaultOMElementConvertor();
056: }
057: return oc;
058: }
059:
060: /**
061: *
062: */
063: protected static OMElementConvertor getScriptConvertor(
064: AxisService axisService) {
065: OMElementConvertor oc = null;
066: Parameter convertorParam = axisService
067: .getParameter(ScriptReceiver.CONVERTOR_ATTR);
068: if (convertorParam != null) {
069: String convertorClassName = (String) convertorParam
070: .getValue();
071: try {
072: oc = (OMElementConvertor) Class.forName(
073: convertorClassName, true,
074: axisService.getClassLoader()).newInstance();
075: } catch (Exception e) {
076: // ignore
077: }
078: }
079: return oc;
080: }
081:
082: protected static OMElementConvertor getAxis2Convertor(
083: AxisService axisService, String scriptName) {
084: OMElementConvertor oc = null;
085: int lastDot = scriptName.lastIndexOf('.');
086: String suffix = scriptName.substring(lastDot + 1).toUpperCase();
087: String className = OMElementConvertor.class.getName();
088: int i = className.lastIndexOf('.');
089: String convertorClassNameProp = suffix.toUpperCase()
090: + className.substring(i + 1);
091: AxisConfiguration axisConfig = axisService
092: .getAxisConfiguration();
093: Parameter convertorParam = axisConfig
094: .getParameter(convertorClassNameProp);
095: if (convertorParam != null) {
096: String convertorClassName = (String) convertorParam
097: .getValue();
098: try {
099: oc = (OMElementConvertor) Class.forName(
100: convertorClassName, true,
101: axisService.getClassLoader()).newInstance();
102: } catch (Exception e) {
103: // ignore
104: }
105: }
106: return oc;
107: }
108:
109: protected static OMElementConvertor getDefaultScriptConvertor(
110: AxisService axisService, String scriptName)
111: throws InstantiationException, IllegalAccessException {
112: OMElementConvertor oc = null;
113: int lastDot = scriptName.lastIndexOf('.');
114: String suffix = scriptName.substring(lastDot + 1).toUpperCase();
115: String className = OMElementConvertor.class.getName();
116: int i = className.lastIndexOf('.');
117: String convertorClassName = suffix.toUpperCase()
118: + className.substring(i + 1);
119: AxisConfiguration axisConfig = axisService
120: .getAxisConfiguration();
121: Parameter convertorParam = axisConfig
122: .getParameter(convertorClassName);
123: if (convertorParam != null) {
124: try {
125: oc = (OMElementConvertor) Class.forName(
126: (String) convertorParam.getValue(), true,
127: axisService.getClassLoader()).newInstance();
128: } catch (ClassNotFoundException e) {
129: // ignore
130: }
131: } else {
132: String fqConvertorClassName = className.substring(0, i + 1)
133: + convertorClassName;
134: try {
135: oc = (OMElementConvertor) Class.forName(
136: fqConvertorClassName, true,
137: axisService.getClassLoader()).newInstance();
138: } catch (ClassNotFoundException e) {
139: // ignore
140: }
141: if (oc == null) {
142: try {
143: oc = (OMElementConvertor) Class.forName(
144: fqConvertorClassName, true,
145: ConvertorFactory.class.getClassLoader())
146: .newInstance();
147: } catch (ClassNotFoundException e) {
148: // ignore
149: }
150: }
151: }
152: return oc;
153: }
154:
155: }
|