| /* |
| * 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.builder; |
| |
| import org.apache.axis2.context.ConfigurationContext; |
| import org.apache.axis2.java.security.AccessController; |
| import org.apache.axis2.jaxws.ExceptionFactory; |
| import org.apache.axis2.jaxws.catalog.JAXWSCatalogManager; |
| import org.apache.axis2.jaxws.description.xml.handler.HandlerChainsType; |
| import org.apache.axis2.jaxws.i18n.Messages; |
| import org.apache.axis2.jaxws.util.WSDL4JWrapper; |
| import org.apache.commons.logging.Log; |
| import org.apache.commons.logging.LogFactory; |
| |
| import javax.wsdl.Definition; |
| import javax.xml.namespace.QName; |
| import java.lang.annotation.Annotation; |
| import java.lang.reflect.Method; |
| import java.net.URL; |
| import java.security.PrivilegedAction; |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.Iterator; |
| import java.util.LinkedList; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| import java.util.WeakHashMap; |
| |
| public class DescriptionBuilderComposite implements TMAnnotationComposite, TMFAnnotationComposite { |
| |
| private static final Log log = LogFactory.getLog(DescriptionBuilderComposite.class); |
| |
| /* |
| * This structure contains the full reflected class, as well as, the |
| * possible annotations found for this class...the class description |
| * must be complete enough for full validation between class info and annotations |
| * The annotations will be added to the corresponding class members. |
| */ |
| |
| public DescriptionBuilderComposite() { |
| this((ConfigurationContext)null); |
| } |
| |
| public DescriptionBuilderComposite(ConfigurationContext configContext) { |
| myConfigContext = configContext; |
| methodDescriptions = new ArrayList<MethodDescriptionComposite>(); |
| fieldDescriptions = new ArrayList<FieldDescriptionComposite>(); |
| webServiceRefAnnotList = new ArrayList<WebServiceRefAnnot>(); |
| interfacesList = new ArrayList<String>(); |
| genericAnnotationInstances = new ArrayList<CustomAnnotationInstance>(); |
| genericAnnotationProcessors = new HashMap<String, CustomAnnotationProcessor>(); |
| properties = new HashMap<String, Object>(); |
| } |
| |
| //Note: a WSDL is not necessary |
| private Definition wsdlDefinition = null; |
| private URL wsdlURL = null; |
| private WSDL4JWrapper wsdlWrapper = null; |
| |
| private ConfigurationContext myConfigContext; |
| |
| // Class-level annotations |
| private WebServiceAnnot webServiceAnnot; |
| private WebServiceProviderAnnot webServiceProviderAnnot; |
| private ServiceModeAnnot serviceModeAnnot; |
| private WebServiceClientAnnot webServiceClientAnnot; |
| private WebFaultAnnot webFaultAnnot; |
| private HandlerChainAnnot handlerChainAnnot; |
| private SoapBindingAnnot soapBindingAnnot; |
| private List<WebServiceRefAnnot> webServiceRefAnnotList; |
| private BindingTypeAnnot bindingTypeAnnot; |
| |
| // Collection of PortComposite objects which were created from |
| // this DescriptionBuilderComposite instance |
| private List<PortComposite> portCompositeList = new ArrayList<PortComposite>(); |
| |
| private List<Annotation> features; |
| |
| private Map<QName, Definition> wsdlDefs = new HashMap<QName, Definition>(); |
| |
| private Map<QName, URL> wsdlURLs = new HashMap<QName, URL>(); |
| |
| private Set<QName> serviceQNames = new HashSet<QName>(); |
| |
| private Map<QName, List<PortComposite>> sQNameToPC = new HashMap<QName, List<PortComposite>>(); |
| |
| // Class information |
| private String className; |
| /** |
| * Get an annotation by introspecting on a class. This is wrappered to avoid a Java2Security violation. |
| * @param cls Class that contains annotation |
| * @param annotation Class of requrested Annotation |
| * @return annotation or null |
| */ |
| private static Annotation getAnnotationFromClass(final Class cls, final Class annotation) { |
| return (Annotation) AccessController.doPrivileged(new PrivilegedAction() { |
| public Object run() { |
| |
| Annotation a = cls.getAnnotation(annotation); |
| return a; |
| } |
| }); |
| } |
| |
| private String[] classModifiers; //public, abstract, final, strictfp... |
| private String extendsClass; //Set to the name of the super class |
| private List<String> interfacesList; //Set this for all implemented interfaces |
| private boolean isInterface = false; |
| private QName preferredPort; // Port to use if no port QName given. May be null |
| private boolean isMTOMEnabled = false; |
| |
| private List<MethodDescriptionComposite> methodDescriptions; |
| private List<FieldDescriptionComposite> fieldDescriptions; |
| |
| // we can keep these in a singular list b/c for a given type-level annotation |
| // there can only one instance of the annotation |
| private List<CustomAnnotationInstance> genericAnnotationInstances; |
| |
| // a map that stores all the type-targetted GenericAnnotationProcessor instances |
| private Map<String, CustomAnnotationProcessor> genericAnnotationProcessors; |
| |
| private WsdlGenerator wsdlGenerator; |
| private ClassLoader classLoader; |
| |
| // JAXB object used to represent handler chain configuration info |
| // either this or the HandlerChainAnnot may be present, but |
| // not both, they may both be null |
| private HandlerChainsType handlerChainsType = null; |
| |
| // Does this composite represent a service requester or service provider. |
| // We default to service provider since composites were orginally not used by requesters. |
| private boolean isServiceProvider = true; |
| |
| // For a service requester, this will be the client-side class associated with this composite; |
| // It could be the Service class or the SEI class. On the service provider this will be null |
| // unless the deprecated service construction logic in DescriptionFactory was used. |
| private Class theCorrespondingClass; |
| |
| // Service-requesters (aka clients) can specify a sprase composite that may contain annotation |
| // information corresponding to information in a deployment descriptor or an injected |
| // resource. |
| private WeakHashMap<Object, DescriptionBuilderComposite> sparseCompositeMap = new WeakHashMap<Object, DescriptionBuilderComposite>(); |
| |
| // Allow a unique XML CatalogManager per service description. |
| private JAXWSCatalogManager catalogManager = null; |
| |
| // This is a bag of properties that apply to the DBC. Currently these properties will be |
| // copied over from the DBC to the description hierarchy. This will only occur on the |
| // server-side for now |
| private Map<String, Object> properties = null; |
| |
| public void setSparseComposite(Object key, DescriptionBuilderComposite sparseComposite) { |
| if (key != null && sparseComposite != null) { |
| this.sparseCompositeMap.put(key, sparseComposite); |
| } |
| } |
| public DescriptionBuilderComposite getSparseComposite(Object key) { |
| return sparseCompositeMap.get(key); |
| } |
| |
| /** |
| * For a service requester, set the QName of the preferred port for this service. This |
| * indicates which port (i.e. which EndpointDescription) should be returned if a port QName |
| * isn't specified. This may be null, indicating the first valid port in the WSDL should be |
| * returned. |
| * |
| * @param preferredPort |
| */ |
| public void setPreferredPort(QName preferredPort) { |
| this.preferredPort = preferredPort; |
| } |
| |
| /** |
| * For a service requester, the QName of the prefered port for this service. This indicates |
| * which port should be returned if a port QName wasn't specified. This may be null, |
| * indicating the first valid port in the WSDL should be returned. |
| * @return |
| */ |
| public QName getPreferredPort() { |
| return preferredPort; |
| } |
| public QName getPreferredPort(Object key) { |
| QName returnPreferredPort = null; |
| // See if there's a sparse composite override for this composite |
| if (key != null) { |
| DescriptionBuilderComposite sparse = getSparseComposite(key); |
| if (sparse != null |
| && !DescriptionBuilderUtils.isEmpty(sparse.getPreferredPort())) { |
| returnPreferredPort = sparse.getPreferredPort(); |
| } else { |
| returnPreferredPort = getPreferredPort(); |
| } |
| } else { |
| returnPreferredPort = getPreferredPort(); |
| } |
| |
| return returnPreferredPort; |
| |
| } |
| |
| public void setIsMTOMEnabled(boolean isMTOMEnabled) { |
| this.isMTOMEnabled = isMTOMEnabled; |
| } |
| |
| public boolean isMTOMEnabled() { |
| return isMTOMEnabled; |
| } |
| |
| public boolean isMTOMEnabled(Object key) { |
| boolean returnIsMTOMEnabled = false; |
| if (key != null) { |
| DescriptionBuilderComposite sparseDBC = getSparseComposite(key); |
| if (sparseDBC != null && sparseDBC.isMTOMEnabled()) { |
| returnIsMTOMEnabled = sparseDBC.isMTOMEnabled(); |
| } else { |
| returnIsMTOMEnabled = isMTOMEnabled(); |
| } |
| |
| } else { |
| returnIsMTOMEnabled = isMTOMEnabled(); |
| } |
| |
| return returnIsMTOMEnabled; |
| } |
| |
| // Methods |
| public WebServiceAnnot getWebServiceAnnot() { |
| return webServiceAnnot = |
| (WebServiceAnnot) getCompositeAnnotation(webServiceAnnot, |
| WebServiceAnnot.class, |
| javax.jws.WebService.class); |
| } |
| |
| /** @return Returns the classModifiers. */ |
| public String[] getClassModifiers() { |
| return classModifiers; |
| } |
| |
| /** @return Returns the className. */ |
| public String getClassName() { |
| if (className != null) { |
| return className; |
| } |
| else if (theCorrespondingClass != null) { |
| return theCorrespondingClass.getName(); |
| } |
| else { |
| return null; |
| } |
| } |
| |
| |
| /** @return Returns the super class name. */ |
| public String getSuperClassName() { |
| return extendsClass; |
| } |
| |
| /** @return Returns the list of implemented interfaces. */ |
| public List<String> getInterfacesList() { |
| return interfacesList; |
| } |
| |
| /** @return Returns the handlerChainAnnotImpl. */ |
| public HandlerChainAnnot getHandlerChainAnnot() { |
| return handlerChainAnnot = |
| (HandlerChainAnnot) getCompositeAnnotation(handlerChainAnnot, |
| HandlerChainAnnot.class, |
| javax.jws.HandlerChain.class); |
| } |
| |
| /** @return Returns the serviceModeAnnot. */ |
| public ServiceModeAnnot getServiceModeAnnot() { |
| return serviceModeAnnot = |
| (ServiceModeAnnot) getCompositeAnnotation(serviceModeAnnot, |
| ServiceModeAnnot.class, |
| javax.xml.ws.ServiceMode.class); |
| } |
| |
| /** @return Returns the soapBindingAnnot. */ |
| public SoapBindingAnnot getSoapBindingAnnot() { |
| return soapBindingAnnot = |
| (SoapBindingAnnot) getCompositeAnnotation(soapBindingAnnot, |
| SoapBindingAnnot.class, |
| javax.jws.soap.SOAPBinding.class); |
| } |
| |
| /** @return Returns the webFaultAnnot. */ |
| public WebFaultAnnot getWebFaultAnnot() { |
| return webFaultAnnot = |
| (WebFaultAnnot) getCompositeAnnotation(webFaultAnnot, |
| WebFaultAnnot.class, |
| javax.xml.ws.WebFault.class); |
| } |
| |
| /** @return Returns the webServiceClientAnnot. */ |
| public WebServiceClientAnnot getWebServiceClientAnnot() { |
| return webServiceClientAnnot = |
| (WebServiceClientAnnot) getCompositeAnnotation(webServiceClientAnnot, |
| WebServiceClientAnnot.class, |
| javax.xml.ws.WebServiceClient.class); |
| } |
| |
| public WebServiceClientAnnot getWebServiceClientAnnot(Object key) { |
| WebServiceClientAnnot annot = getWebServiceClientAnnot(); |
| DescriptionBuilderComposite sparseComposite = getSparseComposite(key); |
| WebServiceClientAnnot sparseAnnot = null; |
| if (sparseComposite != null) { |
| sparseAnnot = sparseComposite.getWebServiceClientAnnot(); |
| } |
| return WebServiceClientAnnot.createFromAnnotation(annot, sparseAnnot); |
| } |
| |
| /** |
| * Return a composite annotation of the specified type. If the composite annotation is |
| * null, then the associated class (if not null) will be examined for the appropriate java |
| * annotation. If one is found, it will be used to create a new composite annotation. |
| * |
| * @param compositeAnnotation May be null. The current composite annotation. If this is |
| * non-null, it will simply be returned. |
| * @param compositeAnnotClass The class of the composite annotation. This is a subclass of |
| * the java annotation class. |
| * @param javaAnnotationClass The java annotation class. The associated class will be |
| * reflected on to see if this annotation exists. If so, it is used to create an instance of |
| * the composite annotation class. |
| * @return |
| */ |
| private Annotation getCompositeAnnotation(Annotation compositeAnnotation, |
| Class compositeAnnotClass, |
| Class javaAnnotationClass) { |
| Annotation returnAnnotation = compositeAnnotation; |
| if (returnAnnotation == null && theCorrespondingClass != null) { |
| // Get the annotation from the class and if one exists, construct a composite annot for it |
| Annotation annotationFromClass = getAnnotationFromClass(theCorrespondingClass, javaAnnotationClass); |
| if (annotationFromClass != null) { |
| try { |
| Method createAnnot = compositeAnnotClass.getMethod("createFromAnnotation", Annotation.class); |
| returnAnnotation = (Annotation) createAnnot.invoke(null, annotationFromClass); |
| } catch (Exception e) { |
| if (log.isDebugEnabled()) { |
| log.debug("Unable to create composite annotation due to exception." |
| + " Composite Annotation: " + compositeAnnotation |
| + "; Composite Annot class: " + compositeAnnotClass |
| + "; Java Annot class: " + javaAnnotationClass, e); |
| } |
| String msg = Messages.getMessage("DescriptionBuilderErr1", |
| compositeAnnotClass.toString(), |
| e.toString()); |
| throw ExceptionFactory.makeWebServiceException(msg, e); |
| } |
| } |
| } |
| return returnAnnotation; |
| } |
| |
| /** @return Returns the webServiceProviderAnnot. */ |
| public WebServiceProviderAnnot getWebServiceProviderAnnot() { |
| return webServiceProviderAnnot = |
| (WebServiceProviderAnnot) getCompositeAnnotation(webServiceProviderAnnot, |
| WebServiceProviderAnnot.class, |
| javax.xml.ws.WebServiceProvider.class); |
| } |
| |
| /** @return Returns the webServiceRefAnnot list. */ |
| public List<WebServiceRefAnnot> getAllWebServiceRefAnnots() { |
| return webServiceRefAnnotList; |
| } |
| |
| /** @return Returns the webServiceRefAnnot. */ |
| public WebServiceRefAnnot getWebServiceRefAnnot(String name) { |
| |
| WebServiceRefAnnot wsra = null; |
| Iterator<WebServiceRefAnnot> iter = |
| webServiceRefAnnotList.iterator(); |
| |
| while (iter.hasNext()) { |
| wsra = iter.next(); |
| if (wsra.name().equals(name)) |
| return wsra; |
| } |
| return wsra; |
| } |
| |
| /** @return Returns the webServiceRefAnnot. */ |
| public BindingTypeAnnot getBindingTypeAnnot() { |
| return (BindingTypeAnnot) getCompositeAnnotation(bindingTypeAnnot, |
| BindingTypeAnnot.class, |
| javax.xml.ws.BindingType.class); |
| } |
| |
| public List<Annotation> getWebServiceFeatures() { |
| return features; |
| } |
| |
| public void setWebServiceFeatures(List<Annotation> list) { |
| features = list; |
| } |
| |
| public void addWebServiceFeature(Annotation a) { |
| if (features == null) |
| features = new ArrayList<Annotation>(); |
| |
| features.add(a); |
| } |
| |
| /** @return Returns the wsdlDefinition */ |
| public Definition getWsdlDefinition() { |
| if (wsdlDefinition != null) { |
| return wsdlDefinition; |
| } else if (wsdlWrapper != null) { |
| wsdlDefinition = wsdlWrapper.getDefinition(); |
| } else { |
| wsdlDefinition = createWsdlDefinition(wsdlURL); |
| } |
| return wsdlDefinition; |
| } |
| |
| /** @return Returns the wsdlURL */ |
| public URL getWsdlURL() { |
| return this.wsdlURL; |
| } |
| |
| /** Returns a collection of all MethodDescriptionComposites that match the specified name */ |
| public List<MethodDescriptionComposite> getMethodDescriptionComposite(String methodName) { |
| ArrayList<MethodDescriptionComposite> matchingMethods = |
| new ArrayList<MethodDescriptionComposite>(); |
| Iterator<MethodDescriptionComposite> iter = methodDescriptions.iterator(); |
| while (iter.hasNext()) { |
| MethodDescriptionComposite composite = iter.next(); |
| |
| if (composite.getMethodName() != null) { |
| if (composite.getMethodName().equals(methodName)) { |
| matchingMethods.add(composite); |
| } |
| } |
| } |
| |
| return matchingMethods; |
| } |
| |
| /** |
| * Returns the nth occurence of this MethodComposite. Since method names are not unique, we have |
| * to account for multiple occurrences |
| * |
| * @param methodName |
| * @param occurence The nth occurance to return; not this is NOT 0 based |
| * @return Returns the methodDescriptionComposite |
| */ |
| public MethodDescriptionComposite getMethodDescriptionComposite( |
| String methodName, |
| int occurence) { |
| MethodDescriptionComposite returnMDC = null; |
| List<MethodDescriptionComposite> matchingMethods = |
| getMethodDescriptionComposite(methodName); |
| if (matchingMethods != null && !matchingMethods.isEmpty() && |
| occurence > 0 && occurence <= matchingMethods.size()) { |
| returnMDC = matchingMethods.get(--occurence); |
| } |
| return returnMDC; |
| } |
| |
| public List<MethodDescriptionComposite> getMethodDescriptionsList() { |
| return methodDescriptions; |
| } |
| |
| /** @return Returns the methodDescriptionComposite..null if not found */ |
| public FieldDescriptionComposite getFieldDescriptionComposite(String fieldName) { |
| |
| FieldDescriptionComposite composite = null; |
| Iterator<FieldDescriptionComposite> iter = |
| fieldDescriptions.iterator(); |
| |
| while (iter.hasNext()) { |
| composite = iter.next(); |
| if (composite.getFieldName().equals(fieldName)) |
| return composite; |
| } |
| return composite; |
| } |
| |
| /** @return Returns the ModuleClassType. */ |
| public WsdlGenerator getCustomWsdlGenerator() { |
| |
| return this.wsdlGenerator; |
| } |
| |
| /** @return Returns the ClassLoader. */ |
| public ClassLoader getClassLoader() { |
| |
| return this.classLoader; |
| } |
| |
| /** @return Returns true if this is an interface */ |
| public boolean isInterface() { |
| |
| return isInterface; |
| } |
| |
| //++++++++ |
| //Setters |
| //++++++++ |
| public void setWebServiceAnnot(WebServiceAnnot webServiceAnnot) { |
| this.webServiceAnnot = webServiceAnnot; |
| } |
| |
| /** @param classModifiers The classModifiers to set. */ |
| public void setClassModifiers(String[] classModifiers) { |
| this.classModifiers = classModifiers; |
| } |
| |
| /** @param className The className to set. */ |
| public void setClassName(String className) { |
| this.className = className; |
| } |
| |
| /** @param extendsClass The name of the super class to set. */ |
| public void setSuperClassName(String extendsClass) { |
| this.extendsClass = extendsClass; |
| } |
| |
| /** @param interfacesList The interfacesList to set. */ |
| public void setInterfacesList(List<String> interfacesList) { |
| this.interfacesList = interfacesList; |
| } |
| |
| /** @param handlerChainAnnot The handlerChainAnnot to set. */ |
| public void setHandlerChainAnnot(HandlerChainAnnot handlerChainAnnot) { |
| this.handlerChainAnnot = handlerChainAnnot; |
| } |
| |
| /** @param serviceModeAnnot The serviceModeAnnot to set. */ |
| public void setServiceModeAnnot(ServiceModeAnnot serviceModeAnnot) { |
| this.serviceModeAnnot = serviceModeAnnot; |
| } |
| |
| /** @param soapBindingAnnot The soapBindingAnnot to set. */ |
| public void setSoapBindingAnnot(SoapBindingAnnot soapBindingAnnot) { |
| this.soapBindingAnnot = soapBindingAnnot; |
| } |
| |
| /** @param webFaultAnnot The webFaultAnnot to set. */ |
| public void setWebFaultAnnot(WebFaultAnnot webFaultAnnot) { |
| this.webFaultAnnot = webFaultAnnot; |
| } |
| |
| /** @param webServiceClientAnnot The webServiceClientAnnot to set. */ |
| public void setWebServiceClientAnnot( |
| WebServiceClientAnnot webServiceClientAnnot) { |
| this.webServiceClientAnnot = webServiceClientAnnot; |
| } |
| |
| /** @param webServiceProviderAnnot The webServiceProviderAnnot to set. */ |
| public void setWebServiceProviderAnnot( |
| WebServiceProviderAnnot webServiceProviderAnnot) { |
| this.webServiceProviderAnnot = webServiceProviderAnnot; |
| } |
| |
| /** @param webServiceRefAnnot The webServiceRefAnnot to add to the list. */ |
| public void addWebServiceRefAnnot( |
| WebServiceRefAnnot webServiceRefAnnot) { |
| webServiceRefAnnotList.add(webServiceRefAnnot); |
| } |
| |
| public void setWebServiceRefAnnot(WebServiceRefAnnot webServiceRefAnnot) { |
| addWebServiceRefAnnot(webServiceRefAnnot); |
| } |
| |
| public void addCustomAnnotationProcessor(CustomAnnotationProcessor processor) { |
| genericAnnotationProcessors.put(processor.getAnnotationInstanceClassName(), processor); |
| } |
| |
| public Map<String, CustomAnnotationProcessor> getCustomAnnotationProcessors() { |
| return genericAnnotationProcessors; |
| } |
| |
| public void addCustomAnnotationInstance(CustomAnnotationInstance annotation) { |
| genericAnnotationInstances.add(annotation); |
| } |
| |
| public List<CustomAnnotationInstance> getCustomAnnotationInstances() { |
| return genericAnnotationInstances; |
| } |
| |
| |
| /** |
| * @param wsdlDefinition The wsdlDefinition to set. |
| */ |
| public void setWsdlDefinition(Definition wsdlDef) { |
| |
| Definition def = null; |
| |
| if (wsdlDef != null) { |
| if (wsdlDef instanceof WSDL4JWrapper) { |
| wsdlWrapper = (WSDL4JWrapper) wsdlDef; |
| |
| def = wsdlWrapper.getDefinition(); |
| } else { |
| try { |
| if (myConfigContext != null) { |
| // Construct WSDL4JWrapper with configuration information |
| wsdlWrapper = new WSDL4JWrapper(wsdlDef, |
| myConfigContext); |
| } else { |
| // If there is no configuration, default to using a |
| // memory sensitive wrapper |
| wsdlWrapper = new WSDL4JWrapper(wsdlDef, true, 2); |
| } |
| def = wsdlWrapper.getDefinition(); |
| } catch (Exception ex) { |
| // absorb |
| } |
| } |
| |
| if (def != null) { |
| String wsdlDefinitionBaseURI = def.getDocumentBaseURI(); |
| |
| if ((wsdlDefinitionBaseURI != null) && (wsdlURL == null)) { |
| try { |
| wsdlURL = new URL(wsdlDefinitionBaseURI); |
| } catch (Exception e) { |
| if (log.isDebugEnabled()) { |
| log.debug("DescriptionBuilderComposite:setWsdlDefinition(): " |
| +"Caught exception creating WSDL URL :" |
| + wsdlDefinitionBaseURI + "; exception: " |
| +e.toString(),e); |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| /** @param wsdlURL The wsdlURL to set. */ |
| public void setwsdlURL(URL wsdlURL) { |
| this.wsdlURL = wsdlURL; |
| } |
| |
| /** @param BindingTypeAnnot The BindingTypeAnnot to set. */ |
| public void setBindingTypeAnnot( |
| BindingTypeAnnot bindingTypeAnnot) { |
| this.bindingTypeAnnot = bindingTypeAnnot; |
| } |
| |
| /** @param isInterface Sets whether this composite represents a class or interface */ |
| public void setIsInterface(boolean isInterface) { |
| this.isInterface = isInterface; |
| } |
| |
| /** @param methodDescription The methodDescription to add to the set. */ |
| public void addMethodDescriptionComposite(MethodDescriptionComposite methodDescription) { |
| methodDescriptions.add(methodDescription); |
| } |
| |
| /** @param methodDescription The methodDescription to add to the set. */ |
| public void addFieldDescriptionComposite(FieldDescriptionComposite fieldDescription) { |
| fieldDescriptions.add(fieldDescription); |
| } |
| |
| public void setCustomWsdlGenerator(WsdlGenerator wsdlGenerator) { |
| |
| this.wsdlGenerator = wsdlGenerator; |
| } |
| |
| public void setClassLoader(ClassLoader classLoader) { |
| |
| this.classLoader = classLoader; |
| } |
| |
| public HandlerChainsType getHandlerChainsType() { |
| return handlerChainsType; |
| } |
| |
| public void setHandlerChainsType(HandlerChainsType handlerChainsType) { |
| this.handlerChainsType = handlerChainsType; |
| } |
| |
| /** |
| * Answer does this composite represent a service requester (aka client) or a service |
| * provider (aka server). |
| * |
| * @return true if this is a service provider (aka an endpoint or a service implementation |
| * or a server) |
| * |
| */ |
| public boolean isServiceProvider() { |
| return isServiceProvider; |
| } |
| |
| /** |
| * Set the indication of whether this composite represents a service requester (aka client) or |
| * a service provider (aka server). |
| */ |
| public void setIsServiceProvider(boolean value) { |
| isServiceProvider = value; |
| } |
| |
| /** |
| * Set the class associated with this composite. For a service requester, this could be the |
| * Service class or the SEI class. For a service provider this will be null (unless the |
| * deprecated service construction logic in DescriptionFactory is used) |
| * @param theClass |
| */ |
| public void setCorrespondingClass(Class theClass) { |
| this.theCorrespondingClass = theClass; |
| } |
| |
| /** |
| * Returns the corresponding class associated with this composite, if any. |
| * @return |
| */ |
| public Class getCorrespondingClass() { |
| return theCorrespondingClass; |
| } |
| |
| /** |
| * Set the Catalog Manager associated with this composite. |
| * @param theCatalogManger |
| */ |
| public void setCatalogManager(JAXWSCatalogManager theCatalogManager) { |
| this.catalogManager = theCatalogManager; |
| } |
| |
| /** |
| * Returns the catalog manager associated with this composite, if any. |
| * @return |
| */ |
| public JAXWSCatalogManager getCatalogManager() { |
| return catalogManager; |
| } |
| |
| public void setProperties(Map<String, Object> properties) { |
| this.properties = properties; |
| } |
| |
| public Map<String, Object> getProperties() { |
| return properties; |
| } |
| |
| /** |
| * Store a WSDL Definition keyed by a service QName |
| */ |
| public void setWsdlDefinition(QName serviceQName, Definition definition) { |
| this.wsdlDefs.put(serviceQName, definition); |
| } |
| |
| /** |
| * Retrive a WSDL Definition by a service QName |
| */ |
| public Definition getWsdlDefinition(QName serviceQName) { |
| return wsdlDefs.get(serviceQName); |
| } |
| |
| /** |
| * Store a WSDL URL keyed by a service QName |
| */ |
| public void setwsdlURL(QName serviceQName, URL url) { |
| wsdlURLs.put(serviceQName, url); |
| } |
| |
| /** |
| * Retrive a WSDL URL by a service QName |
| */ |
| public URL getWsdlURL(QName serviceQName) { |
| return wsdlURLs.get(serviceQName); |
| } |
| |
| /** |
| * Add the set of wsdl:service QNames that are represented by this DBC's metadata |
| */ |
| public void setServiceQNames(Set<QName> serviceQNames) { |
| this.serviceQNames = serviceQNames; |
| } |
| |
| /** |
| * Get the set of wsdl:service QNames represented by this DBC's metadata |
| * @return |
| */ |
| public Set<QName> getServiceQNames() { |
| return serviceQNames; |
| } |
| |
| |
| /** |
| * Convenience method for unit testing. We will print all of the |
| * data members here. |
| */ |
| |
| public String toString() { |
| StringBuffer sb = new StringBuffer(); |
| final String newLine = "\n"; |
| final String sameLine = "; "; |
| sb.append(super.toString()); |
| sb.append(newLine); |
| sb.append("ClassName: " + className); |
| sb.append(sameLine); |
| sb.append("SuperClass:" + extendsClass); |
| |
| sb.append(newLine); |
| sb.append("Class modifiers: "); |
| if (classModifiers != null) { |
| for (int i = 0; i < classModifiers.length; i++) { |
| sb.append(classModifiers[i]); |
| sb.append(sameLine); |
| } |
| } |
| |
| sb.append(newLine); |
| sb.append("is Service Provider: " + isServiceProvider() ); |
| |
| sb.append(newLine); |
| sb.append("wsdlURL: " + getWsdlURL() ); |
| |
| sb.append(newLine); |
| sb.append("has wsdlDefinition?: "); |
| if (wsdlDefinition !=null) { |
| sb.append("true"); |
| } else { |
| sb.append("false"); |
| } |
| |
| sb.append(newLine); |
| sb.append("Interfaces: "); |
| Iterator<String> intIter = interfacesList.iterator(); |
| while (intIter.hasNext()) { |
| String inter = intIter.next(); |
| sb.append(inter); |
| sb.append(sameLine); |
| } |
| |
| if (webServiceAnnot != null) { |
| sb.append(newLine); |
| sb.append("WebService: "); |
| sb.append(webServiceAnnot.toString()); |
| } |
| |
| if (webServiceProviderAnnot != null) { |
| sb.append(newLine); |
| sb.append("WebServiceProvider: "); |
| sb.append(webServiceProviderAnnot.toString()); |
| } |
| |
| if (bindingTypeAnnot != null) { |
| sb.append(newLine); |
| sb.append("BindingType: "); |
| sb.append(bindingTypeAnnot.toString()); |
| } |
| |
| if (webServiceClientAnnot != null) { |
| sb.append(newLine); |
| sb.append("WebServiceClient: "); |
| sb.append(webServiceClientAnnot.toString()); |
| } |
| |
| if (webFaultAnnot != null) { |
| sb.append(newLine); |
| sb.append("WebFault: "); |
| sb.append(webFaultAnnot.toString()); |
| } |
| |
| if (serviceModeAnnot != null) { |
| sb.append(newLine); |
| sb.append("ServiceMode: "); |
| sb.append(serviceModeAnnot.toString()); |
| } |
| |
| if (soapBindingAnnot != null) { |
| sb.append(newLine); |
| sb.append("SOAPBinding: "); |
| sb.append(soapBindingAnnot.toString()); |
| } |
| |
| if (handlerChainAnnot != null) { |
| sb.append(newLine); |
| sb.append("HandlerChain: "); |
| sb.append(handlerChainAnnot.toString()); |
| } |
| |
| if (webServiceRefAnnotList.size() > 0) { |
| sb.append(newLine); |
| sb.append("Number of WebServiceRef: " + webServiceRefAnnotList.size()); |
| Iterator<WebServiceRefAnnot> wsrIter = webServiceRefAnnotList.iterator(); |
| while (wsrIter.hasNext()) { |
| WebServiceRefAnnot wsr = wsrIter.next(); |
| sb.append(wsr.toString()); |
| sb.append(sameLine); |
| } |
| } |
| |
| sb.append(newLine); |
| sb.append("Number of Method Descriptions: " + methodDescriptions.size()); |
| Iterator<MethodDescriptionComposite> mdcIter = methodDescriptions.iterator(); |
| while (mdcIter.hasNext()) { |
| sb.append(newLine); |
| MethodDescriptionComposite mdc = mdcIter.next(); |
| sb.append(mdc.toString()); |
| } |
| |
| sb.append(newLine); |
| sb.append("Number of Field Descriptions: " + fieldDescriptions.size()); |
| Iterator<FieldDescriptionComposite> fdcIter = fieldDescriptions.iterator(); |
| while (fdcIter.hasNext()) { |
| sb.append(newLine); |
| FieldDescriptionComposite fdc = fdcIter.next(); |
| sb.append(fdc.toString()); |
| } |
| |
| if(portCompositeList != null |
| && |
| !portCompositeList.isEmpty()) { |
| sb.append(newLine); |
| sb.append(newLine); |
| sb.append("** PortComposite Objects**"); |
| sb.append(newLine); |
| for(PortComposite pc : portCompositeList) { |
| sb.append("PortComposite"); |
| sb.append(newLine); |
| sb.append(pc.toString()); |
| sb.append(newLine); |
| } |
| } |
| |
| return sb.toString(); |
| } |
| |
| |
| /** |
| * Create a wsdl definition from the supplied |
| * location. |
| * |
| * @param _wsdlURL The URL where the wsdl is located |
| * @return The WSDL Definition or NULL |
| */ |
| private Definition createWsdlDefinition(URL _wsdlURL) { |
| if (_wsdlURL == null) { |
| return null; |
| } |
| |
| Definition wsdlDef = null; |
| try { |
| if (log.isDebugEnabled() ) { |
| log.debug("new WSDL4JWrapper(" + _wsdlURL.toString() + ",ConfigurationContext" ); |
| } |
| |
| wsdlWrapper = new WSDL4JWrapper(_wsdlURL, myConfigContext); |
| |
| if (wsdlWrapper != null) { |
| wsdlDef = wsdlWrapper.getDefinition(); |
| } |
| } catch (Exception e) { |
| if (log.isDebugEnabled()) { |
| log.debug("DescriptionBuilderComposite:createWsdlDefinition(" |
| + _wsdlURL.toString() |
| + "): Caught exception trying to create WSDL Definition: " |
| +e, e); |
| } |
| } |
| |
| return wsdlDef; |
| } |
| |
| public ConfigurationContext getConfigurationContext() { |
| return myConfigContext; |
| } |
| |
| /** |
| * Adds a PortComposite to the generic list. This list of PortComposite objects |
| * is not keyed by wsdl:service QName. |
| */ |
| public void addPortComposite(PortComposite portDBC) { |
| portCompositeList.add(portDBC); |
| } |
| |
| /** |
| * Adds a PortComposite to a list that is keyed by a wsdl:service QName. |
| */ |
| public void addPortComposite(QName serviceQName, PortComposite portDBC) { |
| List<PortComposite> pcList = sQNameToPC.get(serviceQName); |
| if(pcList == null) { |
| pcList = new LinkedList<PortComposite>(); |
| sQNameToPC.put(serviceQName, pcList); |
| } |
| pcList.add(portDBC); |
| } |
| |
| /** |
| * Gets the generic PortComposite instances. |
| */ |
| public List<PortComposite> getPortComposites() { |
| return portCompositeList; |
| } |
| |
| /** |
| * Gets all the PortComposite instances associated with a particular wsdl:service QName. |
| * @return |
| */ |
| public List<PortComposite> getPortComposites(QName serviceQName) { |
| return sQNameToPC.get(serviceQName); |
| } |
| |
| } |