📄 axisengine.java
字号:
/* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed 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.axis;import org.apache.axis.components.logger.LogFactory;import org.apache.axis.encoding.TypeMappingRegistry;import org.apache.axis.encoding.TypeMappingImpl;import org.apache.axis.handlers.BasicHandler;import org.apache.axis.handlers.soap.SOAPService;import org.apache.axis.session.Session;import org.apache.axis.session.SimpleSession;import org.apache.axis.utils.JavaUtils;import org.apache.axis.utils.Messages;import org.apache.axis.utils.cache.ClassCache;import org.apache.commons.logging.Log;import javax.xml.namespace.QName;import javax.xml.rpc.server.ServiceLifecycle;import java.util.ArrayList;import java.util.Enumeration;import java.util.Hashtable;/** * An <code>AxisEngine</code> is the base class for AxisClient and * AxisServer. Handles common functionality like dealing with the * handler/service registries and loading properties. * * @author Glen Daniels (gdaniels@apache.org) * @author Glyn Normington (glyn@apache.org) */public abstract class AxisEngine extends BasicHandler{ /** * The <code>Log</code> for all message logging. */ protected static Log log = LogFactory.getLog(AxisEngine.class.getName()); // Engine property names public static final String PROP_XML_DECL = "sendXMLDeclaration"; public static final String PROP_DEBUG_LEVEL = "debugLevel"; public static final String PROP_DEBUG_FILE = "debugFile"; public static final String PROP_DOMULTIREFS = "sendMultiRefs"; public static final String PROP_DISABLE_PRETTY_XML = "disablePrettyXML"; public static final String PROP_ENABLE_NAMESPACE_PREFIX_OPTIMIZATION = "enableNamespacePrefixOptimization"; public static final String PROP_PASSWORD = "adminPassword"; public static final String PROP_SYNC_CONFIG = "syncConfiguration"; public static final String PROP_SEND_XSI = "sendXsiTypes"; public static final String PROP_ATTACHMENT_DIR = "attachments.Directory"; public static final String PROP_ATTACHMENT_IMPLEMENTATION = "attachments.implementation" ; public static final String PROP_ATTACHMENT_CLEANUP = "attachment.DirectoryCleanUp"; public static final String PROP_DEFAULT_CONFIG_CLASS = "axis.engineConfigClass"; public static final String PROP_SOAP_VERSION = "defaultSOAPVersion"; public static final String PROP_SOAP_ALLOWED_VERSION = "singleSOAPVersion"; public static final String PROP_TWOD_ARRAY_ENCODING = "enable2DArrayEncoding"; public static final String PROP_XML_ENCODING = "axis.xmlEncoding"; public static final String PROP_XML_REUSE_SAX_PARSERS = "axis.xml.reuseParsers"; public static final String PROP_BYTE_BUFFER_BACKING = "axis.byteBuffer.backing"; public static final String PROP_BYTE_BUFFER_CACHE_INCREMENT = "axis.byteBuffer.cacheIncrement"; public static final String PROP_BYTE_BUFFER_RESIDENT_MAX_SIZE = "axis.byteBuffer.residentMaxSize"; public static final String PROP_BYTE_BUFFER_WORK_BUFFER_SIZE = "axis.byteBuffer.workBufferSize"; public static final String PROP_EMIT_ALL_TYPES = "emitAllTypesInWSDL"; /** * Set this property to 'true' when you want Axis to avoid soap encoded * types to work around a .NET problem where it wont accept soap encoded * types for a (soap encoded!) array. */ public static final String PROP_DOTNET_SOAPENC_FIX = "dotNetSoapEncFix"; /** Compliance with WS-I Basic Profile. */ public static final String PROP_BP10_COMPLIANCE = "ws-i.bp10Compliance"; public static final String DEFAULT_ATTACHMENT_IMPL="org.apache.axis.attachments.AttachmentsImpl"; public static final String ENV_ATTACHMENT_DIR = "axis.attachments.Directory"; public static final String ENV_SERVLET_REALPATH = "servlet.realpath"; public static final String ENV_SERVLET_CONTEXT = "servletContext"; // Default admin. password private static final String DEFAULT_ADMIN_PASSWORD = "admin"; /** Our go-to guy for configuration... */ protected EngineConfiguration config; /** Has the user changed the password yet? True if they have. */ protected boolean _hasSafePassword = false; /** * Should we save the engine config each time we modify it? True if we * should. */ protected boolean shouldSaveConfig = false; /** Java class cache. */ protected transient ClassCache classCache = new ClassCache(); /** * This engine's Session. This Session supports "application scope" * in the Apache SOAP sense... if you have a service with "application * scope", have it store things in this Session. */ private Session session = new SimpleSession(); /** * What actor URIs hold for the entire engine? Find them here. */ private ArrayList actorURIs = new ArrayList(); /** * Thread local storage used for locating the active message context. * This information is only valid for the lifetime of this request. */ private static ThreadLocal currentMessageContext = new ThreadLocal(); /** * Set the active message context. * * @param mc - the new active message context. */ protected static void setCurrentMessageContext(MessageContext mc) { currentMessageContext.set(mc); } /** * Get the active message context. * * @return the current active message context */ public static MessageContext getCurrentMessageContext() { return (MessageContext) currentMessageContext.get(); } /** * Construct an AxisEngine using the specified engine configuration. * * @param config the EngineConfiguration for this engine */ public AxisEngine(EngineConfiguration config) { this.config = config; init(); } /** * Initialize the engine. Multiple calls will (may?) return the engine to * the intialized state. */ public void init() { if (log.isDebugEnabled()) { log.debug("Enter: AxisEngine::init"); } // The SOAP/XSD stuff is in the default TypeMapping of the TypeMappingRegistry. //getTypeMappingRegistry().setParent(SOAPTypeMappingRegistry.getSingletonDelegate()); try { config.configureEngine(this); } catch (Exception e) { throw new InternalException(e); } /*Set the default attachment implementation */ setOptionDefault(PROP_ATTACHMENT_IMPLEMENTATION, AxisProperties.getProperty("axis." + PROP_ATTACHMENT_IMPLEMENTATION )); setOptionDefault(PROP_ATTACHMENT_IMPLEMENTATION, DEFAULT_ATTACHMENT_IMPL); // Check for the property "dotnetsoapencfix" which will turn // off soap encoded types to work around a bug in .NET where // it wont accept soap encoded array types. final Object dotnet = getOption(PROP_DOTNET_SOAPENC_FIX); if (JavaUtils.isTrue(dotnet)) { // This is a static property of the type mapping // that will ignore SOAPENC types when looking up // QNames of java types. TypeMappingImpl.dotnet_soapenc_bugfix = true; } if (log.isDebugEnabled()) { log.debug("Exit: AxisEngine::init"); } } /** * Cleanup routine removes application scoped objects. * * There is a small risk of this being called more than once * so the cleanup should be designed to resist that event. */ public void cleanup() { super.cleanup(); // Let any application-scoped service objects know that we're going // away... Enumeration keys = session.getKeys(); if (keys != null) { while (keys.hasMoreElements()) { String key = (String)keys.nextElement(); Object obj = session.get(key); if (obj != null && obj instanceof ServiceLifecycle) { ((ServiceLifecycle)obj).destroy(); } session.remove(key); } } } /** Write out our engine configuration. */ public void saveConfiguration() { if (!shouldSaveConfig) return; try { config.writeEngineConfig(this); } catch (Exception e) { log.error(Messages.getMessage("saveConfigFail00"), e); } } /** * Get the <code>EngineConfiguration</code> used throughout this * <code>AxisEngine</code> instance. * * @return the engine configuration instance */ public EngineConfiguration getConfig() { return config; } /** * Discover if this <code>AxisEngine</code> has a safe password. * * @return true if it is safe, false otherwise */ public boolean hasSafePassword() { return _hasSafePassword; } /** * Set the administration password. * * @param pw the literal value of the password as a <code>String</code> */ public void setAdminPassword(String pw)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -