1 /* 2 Copyright (c) 2006, University of Tromsø 3 All rights reserved. 4 5 Redistribution and use in source and binary forms, with or without 6 modification, are permitted provided that the following conditions are met: 7 8 * Redistributions of source code must retain the above copyright notice, this list 9 of conditions and the following disclaimer. 10 11 * Redistributions in binary form must reproduce the above copyright notice, this 12 list of conditions and the following disclaimer in the documentation and/or other 13 materials provided with the distribution. 14 15 * Neither the name of the University of Tromsø nor the names of its contributors may 16 be used to endorse or promote products derived from this software without specific 17 prior written permission. 18 19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 20 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 21 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 22 SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 23 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 24 TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 25 BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 27 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 28 DAMAGE. 29 */ 30 31 package axis.dynamic; 32 33 import java.util.Collections; 34 import java.util.Hashtable; 35 import java.util.List; 36 import java.util.Map; 37 import java.util.concurrent.ConcurrentHashMap; 38 39 import javax.xml.namespace.QName; 40 41 import org.apache.axis.AxisEngine; 42 import org.apache.axis.ConfigurationException; 43 import org.apache.axis.EngineConfiguration; 44 import org.apache.axis.Handler; 45 import org.apache.axis.encoding.TypeMappingRegistry; 46 import org.apache.axis.encoding.TypeMappingRegistryImpl; 47 48 /** 49 * abstract base class for dynamic Axis {@link EngineConfiguration}s. 50 */ 51 public abstract class SoapConfiguration implements EngineConfiguration 52 { 53 /** the transport handlers. */ 54 protected final Map<QName, Handler> _transports = new ConcurrentHashMap<QName, Handler>(); 55 56 /** this will register the Axis default type mappings */ 57 protected final TypeMappingRegistry _tmr = new TypeMappingRegistryImpl(); 58 59 /** the global request handler (may be a handler chain) */ 60 protected Handler _globalRequest = null; 61 62 /** the global response handler (may be a handler chain) */ 63 protected Handler _globalResponse = null; 64 65 /** reference to the engine that uses this configuration, set in {@link #configureEngine} */ 66 protected /* volatile ? */ AxisEngine _engine; 67 68 /** synchronization shouldn't be necessary, it's a Hashtable and only modified on startup */ 69 protected final Hashtable<String, String> _globalOptions = new Hashtable<String, String>(); 70 71 /** 72 * called from {@link AxisEngine#init()}. Note: when this method is called, the given engine already 73 * has a reference to this object. 74 * @param engine 75 * @throws ConfigurationException 76 * @see EngineConfiguration#configureEngine(AxisEngine) 77 * @see AxisEngine#init() 78 */ 79 public void configureEngine( AxisEngine engine ) throws ConfigurationException 80 { 81 _engine = engine; 82 // engine already knows this object - now it loads our options. 83 _engine.refreshGlobalOptions(); 84 } 85 86 /** 87 * We don't write ourselves out, so this is a no-op. 88 * @param engine 89 */ 90 public void writeEngineConfig(AxisEngine engine) 91 { 92 // nothing to do 93 } 94 95 /** 96 * Returns the global configuration options. 97 * @return the global options 98 */ 99 public Hashtable<String, String> getGlobalOptions() 100 { 101 return _globalOptions; 102 } 103 104 /** 105 * Returns a global request handler. 106 * @return the global request handler (may be a handler chain) 107 */ 108 public Handler getGlobalRequest() 109 { 110 return _globalRequest; 111 } 112 113 /** 114 * Set the global request Handler 115 * @param globalRequest (may be a handler chain) 116 */ 117 public void setGlobalRequest( Handler globalRequest ) 118 { 119 _globalRequest = globalRequest; 120 } 121 122 /** 123 * Returns a global response handler. 124 * @return the global response handler (may be a handler chain) 125 */ 126 public Handler getGlobalResponse() 127 { 128 return _globalResponse; 129 } 130 131 /** 132 * Set the global response Handler 133 * @param globalResponse (may be a handler chain) 134 */ 135 public void setGlobalResponse( Handler globalResponse ) 136 { 137 _globalResponse = globalResponse; 138 } 139 140 /** 141 * We do not use handlers with a 'global' name, so this method always returns null. 142 * @param qname 143 * @return global handler with given name 144 * @see EngineConfiguration#getHandler(QName) 145 */ 146 public Handler getHandler( QName qname ) 147 { 148 return null; 149 } 150 151 /** 152 * Get our TypeMappingRegistry. 153 * @return the TypeMappingRegistry of this configuration. 154 */ 155 public TypeMappingRegistry getTypeMappingRegistry() 156 { 157 return _tmr; 158 } 159 160 /** 161 * @param qname 162 * @return the transport for the given name, may be null 163 * @see EngineConfiguration#getTransport(QName) 164 */ 165 public Handler getTransport( QName qname ) 166 { 167 return _transports.get(qname); 168 } 169 170 /** 171 * sets the transport for the given name 172 * @param name e.g. "http" 173 * @param transport 174 */ 175 public void deployTransport( String name, Handler transport ) 176 { 177 _transports.put(new QName(name), transport); 178 } 179 180 /** 181 * removes the transport for the given name 182 * @param name 183 */ 184 public void undeployTransport( String name ) 185 { 186 _transports.remove(new QName(name)); 187 } 188 189 /** 190 * currently, we don't use roles, so this method always returns null. 191 * @return empty list 192 */ 193 public List<String> getRoles() 194 { 195 return Collections.emptyList(); 196 } 197 198 }