@Override protected ServerServiceDesc createServiceDesc(ServiceId id) throws ServiceException { ServerServiceId serverSvcId = (ServerServiceId) id; String adminName = id.getAdminName(); ServiceConfigHolder config = ServiceConfigManager.getInstance().getConfig(adminName); QName serviceQName = config.getServiceQName(); ClassLoader cl = Thread.currentThread().getContextClassLoader(); MessageProcessorConfigHolder processorConfig = config.getMessageProcessorConfig(); TypeMappingConfigHolder typeMappingsCfg = config.getTypeMappings(); Pipeline requestPipeline = createPipeline(id, PipelineMode.REQUEST, processorConfig, cl); Pipeline responsePipeline = createPipeline(id, PipelineMode.RESPONSE, processorConfig, cl); Class serviceInterfaceClass = loadServiceInterfaceClass(config, true, cl); ServiceTypeMappings typeMappings = createTypeMappings(id, typeMappingsCfg, serviceInterfaceClass, cl); Collection<String> unsupportedOperations = config.getUnsupportedOperation(); Map<String, ServiceOperationDesc> operations = createOperations( id, typeMappingsCfg, unsupportedOperations, typeMappings, serviceQName, cl, config.getOperationProperties()); RequestPatternMatcher<ServiceOperationDesc> operationMatcher = createOperationsMatcher(operations.values()); Map<String, ProtocolProcessorDesc> protocols = createProtocolProcessors(serverSvcId, processorConfig.getProtocolProcessors(), cl); RequestPatternMatcher<ProtocolProcessorDesc> protocolMatcher = createProtocolProcessorsMatcher(processorConfig.getProtocolProcessors(), protocols); Collection<String> supportedDataBindings = config.getSupportedDataBindings(); Set<Class> rootClasses = getRootClassesFromOperations(operations.values()); for (String className : typeMappingsCfg.getJavaTypes()) { Class clazz = ReflectionUtils.loadClass(className, null, true, cl); if (clazz == null) { if (LOGGER.isLogEnabled(LogLevel.WARN)) { LOGGER.log(LogLevel.WARN, "Unable to load type mapping class: " + className); } } else { rootClasses.add(clazz); } } Map<String, DataBindingDesc> bindings = createDataBindings( serverSvcId, processorConfig, supportedDataBindings, rootClasses, true, cl, true); DataBindingDesc defaultRequestBinding = getDefaultRequestDataBinding(config, supportedDataBindings, bindings, adminName); DataBindingDesc defaultResponseBinding = getDefaultResponseDataBinding(config, supportedDataBindings, bindings, adminName); RequestPatternMatcher<DataBindingDesc> bindingMatcherForRequest = new RequestPatternMatcher<DataBindingDesc>(true); RequestPatternMatcher<DataBindingDesc> bindingMatcherForResponse = new RequestPatternMatcher<DataBindingDesc>(true); createDataBindingsMatchers( bindings.values(), bindingMatcherForRequest, bindingMatcherForResponse); ErrorMapper errorMapper = createErrorMapper(processorConfig, serverSvcId, cl); ErrorDataProvider errorDataProviderClass = getErrorDataProviderClass(processorConfig, cl); List<LoggingHandler> loggingHandlers = createLoggingHandlers(id, processorConfig, cl); String serviceDispatcherClassName = getDispatcherClassName(config); String serviceImplClassName = config.getServiceImplClassName(); String implFactory = config.getServiceImplFactoryClassName(); BaseServiceRequestDispatcher<?> serviceDispatcher = null; try { serviceDispatcher = ReflectionUtils.createInstance( serviceDispatcherClassName, BaseServiceRequestDispatcher.class, cl); } catch (ServiceException se) { String mode = "Service Impl"; if (implFactory != null) { mode += " factory"; } throw new ServiceCreationException( ErrorDataFactory.createErrorData( ErrorConstants.SVC_FACTORY_MISSING_DISPATCHER_IMPL, ErrorConstants.ERRORDOMAIN, new Object[] {serviceDispatcherClassName}), se.getCause()); } VersionCheckHandler versionCheckHandler = createVersionCheckHandler(serverSvcId, config, cl); serviceDispatcher.init( serverSvcId, serviceInterfaceClass, serviceImplClassName, cl, operations.values(), versionCheckHandler, implFactory, config.isImplCached()); Dispatcher requestDispatcher = new SimpleInvokerDispatcher(serviceDispatcher); Dispatcher responseDispatcher = new SimpleServerResponseDispatcher(true); Collection<GlobalIdEntry> registryEntries = GlobalRegistryConfigManager.getInstance().getAllEntries(); Map<String, GlobalIdDesc> globalIdMap = createGlobalIdMap(registryEntries, config); Charset serviceCharset = null; // default is to use request charset String serviceCharsetName = config.getDefaultEncoding(); if (serviceCharsetName != null) { try { serviceCharset = Charset.forName(serviceCharsetName); } catch (Exception e) { throw new ServiceException( ErrorDataFactory.createErrorData( ErrorConstants.SVC_FACTORY_UNSUPPORTED_CHARSET, ErrorConstants.ERRORDOMAIN, new Object[] {serviceCharsetName, adminName}), e); } } UrlMappingsDesc urlMappings = loadUrlMappings(adminName, config); OperationMappings operationMappings = config.getOperationMappings(); if (operationMappings == null) { operationMappings = new OperationMappings(); } HeaderMappingsDesc requestHeaderMappings = loadHeaderMappings(adminName, config.getRequestHeaderMappingOptions(), true); HeaderMappingsDesc responseHeaderMappings = loadHeaderMappings(adminName, config.getResponseHeaderMappingOptions(), false); SecurityPolicyConfigHolder securityPolicy = config.getSecurityPolicy(); Map<String, Map<String, String>> authentOperationsMap = new HashMap<String, Map<String, String>>(); loadSecurityPolicy(adminName, securityPolicy, operations, authentOperationsMap); CachePolicyDesc cachePolicyDesc = null; if (config.getCachePolicy() != null) { cachePolicyDesc = CachePolicyDesc.create(config.getCachePolicy(), createOpRequestTypeDesc(operations)); } List<String> serviceLayers = ServiceConfigManager.getInstance().getGlobalConfig().getServiceLayerNames(); String httpErrorMapperClassName = config.getHttpErrorMapper(); HttpErrorMapper httpErrorMapper = null; if (httpErrorMapperClassName != null) { httpErrorMapper = ReflectionUtils.createInstance(httpErrorMapperClassName, HttpErrorMapper.class, cl); } ServerServiceDesc result = new ServerServiceDesc( serverSvcId, serviceQName, config, requestPipeline, responsePipeline, requestDispatcher, responseDispatcher, operations, protocols, bindings, typeMappings, cl, loggingHandlers, serviceInterfaceClass, operationMatcher, protocolMatcher, bindingMatcherForRequest, bindingMatcherForResponse, serviceImplClassName, errorMapper, errorDataProviderClass, globalIdMap, versionCheckHandler, serviceCharset, urlMappings, operationMappings, requestHeaderMappings, responseHeaderMappings, authentOperationsMap, defaultRequestBinding, defaultResponseBinding, serviceLayers, cachePolicyDesc, config.getRequestParamsDescriptor(), implFactory, httpErrorMapper); return result; }
public ServerServiceDesc createFallbackServiceDesc(QName serviceQName) throws ServiceException { ServerServiceId serverSvcId = ServerServiceId.createFallbackServiceId(serviceQName.getLocalPart()); ClassLoader cl = ServiceDesc.class.getClassLoader(); // create empty pipelines Pipeline requestPipeline = createFallbackPipeline(serverSvcId, PipelineMode.REQUEST); Pipeline responsePipeline = createFallbackPipeline(serverSvcId, PipelineMode.RESPONSE); // create empty operation lists Map<String, ServiceOperationDesc> operations = new HashMap<String, ServiceOperationDesc>(); RequestPatternMatcher<ServiceOperationDesc> operationMatcher = new RequestPatternMatcher<ServiceOperationDesc>(true); // create empty protocol processor lists Map<String, ProtocolProcessorDesc> protocols = new HashMap<String, ProtocolProcessorDesc>(); RequestPatternMatcher<ProtocolProcessorDesc> protocolMatcher = new RequestPatternMatcher<ProtocolProcessorDesc>(true); Set<Class> rootClasses = getRootClassesFromOperations(operations.values()); // create default bindings Map<String, DataBindingDesc> bindings = new HashMap<String, DataBindingDesc>(); addDefaultDataBindings(serverSvcId, bindings, null, rootClasses, null, true); // create matchers for bindings RequestPatternMatcher<DataBindingDesc> bindingMatcherForRequest = new RequestPatternMatcher<DataBindingDesc>(true); RequestPatternMatcher<DataBindingDesc> bindingMatcherForResponse = new RequestPatternMatcher<DataBindingDesc>(true); createDataBindingsMatchers( bindings.values(), bindingMatcherForRequest, bindingMatcherForResponse); ServiceTypeMappings typeMappings = createFallbackTypeMappings(); ErrorMapper errorMapper = new DefaultErrorMapperImpl(); ErrorDataProvider errorDataProviderClass = getDefaultErrorDataProviderClass(); ErrorMapperInitContextImpl errorMapperInitCtx = new ErrorMapperInitContextImpl(serverSvcId); errorMapper.init(errorMapperInitCtx); errorMapperInitCtx.kill(); List<LoggingHandler> loggingHandlers = new ArrayList<LoggingHandler>(); addDefaultLoggingHandler(serverSvcId, cl, loggingHandlers); Dispatcher requestDispatcher = new FallbackRequestDispatcher(); Dispatcher responseDispatcher = new SimpleServerResponseDispatcher(true); VersionCheckHandler versionCheckHandler = new NullVersionCheckHandler(); VersionCheckHandlerInitContextImpl versionInitCtx = new VersionCheckHandlerInitContextImpl(serverSvcId, "1.0", null); versionCheckHandler.init(versionInitCtx); versionInitCtx.kill(); Collection<GlobalIdEntry> registryEntries = GlobalRegistryConfigManager.getInstance().getAllEntries(); Map<String, GlobalIdDesc> globalIdMap = createGlobalIdMap(registryEntries, null); List<String> serviceLayers = ServiceConfigManager.getInstance().getGlobalConfig().getServiceLayerNames(); ServerServiceDesc result = new ServerServiceDesc( serverSvcId, serviceQName, null, // config requestPipeline, responsePipeline, requestDispatcher, responseDispatcher, operations, protocols, bindings, typeMappings, cl, loggingHandlers, null, // service interface class operationMatcher, protocolMatcher, bindingMatcherForRequest, bindingMatcherForResponse, null, // service impl class name errorMapper, errorDataProviderClass, globalIdMap, versionCheckHandler, null, UrlMappingsDesc.EMPTY_MAPPINGS, new OperationMappings(), HeaderMappingsDesc.EMPTY_MAPPINGS, HeaderMappingsDesc.EMPTY_MAPPINGS, Collections.unmodifiableMap(new HashMap<String, Map<String, String>>()), bindings.get(BindingConstants.PAYLOAD_XML), bindings.get(BindingConstants.PAYLOAD_XML), serviceLayers, null, null, null, null); return result; }
protected static void initializeCommonSubsystems() throws ServiceException { ErrorDataFactory.initialize(ErrorConstants.ERRORDOMAIN); ErrorDataFactory.initialize( org.ebayopensource.turmeric.security.errorlibrary.ErrorConstants.ERRORDOMAIN); GlobalRegistryConfigManager.getInstance(); }