|
Axis 2 example source code file (DescriptionFactoryImpl.java)
The Axis 2 DescriptionFactoryImpl.java source code
/*
* 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.jaxws.description.impl;
/**
*
*/
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.jaxws.ClientConfigurationFactory;
import org.apache.axis2.jaxws.ExceptionFactory;
import org.apache.axis2.jaxws.description.DescriptionFactory;
import org.apache.axis2.jaxws.description.DescriptionKey;
import org.apache.axis2.jaxws.description.EndpointDescription;
import org.apache.axis2.jaxws.description.ServiceDescription;
import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite;
import org.apache.axis2.jaxws.description.builder.converter.JavaClassToDBCConverter;
import org.apache.axis2.jaxws.description.validator.ServiceDescriptionValidator;
import org.apache.axis2.jaxws.description.validator.EndpointDescriptionValidator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.xml.namespace.QName;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* Creates the JAX-WS metadata descritpion hierachy from some combinations of WSDL, Java classes
* with annotations, and (in the future) deployment descriptors. This is the implementation and is
* not intended to be a public API. The API is:
*
* @see org.apache.axis2.jaxws.description.DescriptionFactory
*/
public class DescriptionFactoryImpl {
private static final Log log = LogFactory.getLog(DescriptionFactoryImpl.class);
private static ClientConfigurationFactory clientConfigFactory =
ClientConfigurationFactory.newInstance();
private static Map<DescriptionKey, ServiceDescription> cache =
new Hashtable<DescriptionKey, ServiceDescription>();
/** A DescrptionFactory can not be instantiated; all methods are static. */
private DescriptionFactoryImpl() {
}
/**
* @see org.apache.axis2.jaxws.description.DescriptionFactory#createServiceDescription(URL,
* QName, Class)
*/
public static ServiceDescription createServiceDescription(URL wsdlURL,
QName serviceQName,
Class serviceClass) {
ConfigurationContext configContext = DescriptionFactory.createClientConfigurationFactory()
.getClientConfigurationContext();
DescriptionKey key = new DescriptionKey(serviceQName, wsdlURL, serviceClass, configContext);
if (log.isDebugEnabled()) {
log.debug("Cache Map = " + cache.toString());
if (key != null)
log.debug("Description Key = " + key.printKey());
}
ServiceDescription serviceDesc = null;
synchronized(configContext) {
serviceDesc = cache.get(key);
if (log.isDebugEnabled()) {
log.debug("Check to see if ServiceDescription is found in cache");
}
if (serviceDesc != null) {
if (log.isDebugEnabled()) {
log.debug("ServiceDescription found in the cache");
log.debug(serviceDesc.toString());
}
}
if (serviceDesc == null) {
if (log.isDebugEnabled()) {
log.debug("ServiceDescription not found in the cache");
log.debug(" creating new ServiceDescriptionImpl");
}
ServiceDescriptionImpl serviceDescImpl = new ServiceDescriptionImpl(wsdlURL, serviceQName, serviceClass);
serviceDescImpl.setAxisConfigContext(configContext);
serviceDesc = serviceDescImpl;
if (log.isDebugEnabled()) {
log.debug("ServiceDescription created with WSDL URL: " + wsdlURL + "; QName: " +
serviceQName + "; Class: " + serviceClass);
log.debug(serviceDesc.toString());
}
if (log.isDebugEnabled()) {
log.debug("Caching new ServiceDescription in the cache");
}
cache.put(key, serviceDesc);
}
}
return serviceDesc;
}
/**
* Clears the entire ServiceDescription cache.
*
* <h4>Note
* This function might cause unpredictable results when configuration contexts are being reused
* and/or there are outstanding requests using the cached ServiceDescription objects. Also,
* in-flight requests (both client and server) using ServiceDelegates MUST be done and out of
* scope before this method is called.
*
*/
public static void clearServiceDescriptionCache() {
cache.clear();
}
/**
* Clears all the ServiceDescription objects in the cache associated with the specified
* configuration context.
*
* <h4>Note
* This function should only be used to clear the cache when the specified configuration context
* will not be used anymore and there are no outstanding requests using the associated
* ServiceDescription objects. Also, in-flight requests (both client and server) using
* ServiceDelegates MUST be done and out of scope before this method is called.
* Otherwise, unpredictable results might occur.
*
* @param configContext The configuration context associated with the ServiceDescription
* objects in the cache.
*/
public static void clearServiceDescriptionCache(ConfigurationContext configContext) {
if (configContext == null) {
return;
}
synchronized (configContext) {
synchronized (cache) {
Iterator<DescriptionKey> iter = cache.keySet().iterator();
while (iter.hasNext()) {
DescriptionKey key = iter.next();
if (key.getConfigContext() == configContext) {
iter.remove();
}
}
}
}
}
/**
* @see org.apache.axis2.jaxws.description.DescriptionFactory#createServiceDescriptionFromServiceImpl(Class,
* AxisService)
* @deprecated
*/
public static ServiceDescription createServiceDescriptionFromServiceImpl(
Class serviceImplClass, AxisService axisService) {
ServiceDescription serviceDesc = new ServiceDescriptionImpl(serviceImplClass, axisService);
if (log.isDebugEnabled()) {
log.debug("Deprecated method used! ServiceDescription created with Class: " +
serviceImplClass + "; AxisService: " + axisService);
log.debug(serviceDesc.toString());
}
return serviceDesc;
}
/** @see org.apache.axis2.jaxws.description.DescriptionFactory#createServiceDescription(Class) */
public static ServiceDescription createServiceDescription(Class serviceImplClass) {
ServiceDescription serviceDesc = null;
if (serviceImplClass != null) {
JavaClassToDBCConverter converter = new JavaClassToDBCConverter(serviceImplClass);
HashMap<String, DescriptionBuilderComposite> dbcMap = converter.produceDBC();
List<ServiceDescription> serviceDescList = createServiceDescriptionFromDBCMap(dbcMap);
if (serviceDescList != null && serviceDescList.size() > 0) {
serviceDesc = serviceDescList.get(0);
if (log.isDebugEnabled()) {
log.debug("ServiceDescription created with class: " + serviceImplClass);
log.debug(serviceDesc);
}
} else {
if (log.isDebugEnabled()) {
log.debug("ServiceDesciption was not created for class: " + serviceImplClass);
}
// TODO: NLS & RAS
throw ExceptionFactory.makeWebServiceException(
"A ServiceDescription was not created for " + serviceImplClass);
}
}
return serviceDesc;
}
/** @see org.apache.axis2.jaxws.description.DescriptionFactory#createServiceDescriptionFromDBCMap(HashMap) */
public static List<ServiceDescription> createServiceDescriptionFromDBCMap(
HashMap<String, DescriptionBuilderComposite> dbcMap) {
List<ServiceDescription> serviceDescriptionList = new ArrayList
Other Axis 2 examples (source code examples)Here is a short list of links related to this Axis 2 DescriptionFactoryImpl.java source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.