/* * 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; public class ParameterDescriptionComposite { private String parameterType; private Class parameterTypeClass; private WebParamAnnot webParamAnnot; private WebServiceRefAnnot webServiceRefAnnot; private int listOrder; // Will indicate whether or not we found an @XMLList annotation on the parameter private boolean isListType; private MethodDescriptionComposite parentMDC; public ParameterDescriptionComposite() { } public ParameterDescriptionComposite( String parameterType, Class parameterTypeClass, WebParamAnnot webParamAnnot, WebServiceRefAnnot webServiceRefAnnot) { this.parameterType = parameterType; this.parameterTypeClass = parameterTypeClass; this.webParamAnnot = webParamAnnot; this.webServiceRefAnnot = webServiceRefAnnot; } /** * Returns the String descrbing this Parameter type. Note that this string is unparsed. For * example, if it represents a java.util.List<my.package.Foo>, then that excact string will be * returned, i.e. "java.util.List<my.package.Foo>". You can use other methods to retrieve parsed * values for Generics and Holders. For example, getParameterTypeClass(), getRawType(), * getHolderActualType(), and getHolderActualTypeClass(). * * @return Returns the parameterType. */ public String getParameterType() { return parameterType; } /** * Returns the class associated with the Parameter. Note that if this is a generic (including a * JAXWS Holder<T>) then the class associated with the raw type is returned (i.e. Holder.class). * <p/> * For a JAX-WS Holder<T>, use getHolderActualType(...) to get the class associated with T. * * @return Returns the parameterTypeClass. */ public Class getParameterTypeClass() { if (parameterTypeClass == null) { if (getParameterType() != null) { parameterTypeClass = DescriptionBuilderUtils.getPrimitiveClass(getParameterType()); if (parameterTypeClass == null) { // If this is a Generic, we need to load the class associated with the Raw Type, // i.e. for JAX-WS Holder<Foo>, we want to load Holder. Othwerise, load the type directly. String classToLoad = null; if (DescriptionBuilderUtils.getRawType(parameterType) != null) { classToLoad = DescriptionBuilderUtils.getRawType(parameterType); } else { classToLoad = parameterType; } parameterTypeClass = loadClassFromPDC(classToLoad); } } } return parameterTypeClass; } /** * For JAX-WS Holder<T>, returns the class associated with T. For non-JAX-WS Holders returns * null. */ public Class getHolderActualTypeClass() { Class returnClass = null; if (DescriptionBuilderUtils.isHolderType(parameterType)) { String classToLoad = DescriptionBuilderUtils.getHolderActualType(parameterType); returnClass = loadClassFromPDC(classToLoad); } return returnClass; } private Class loadClassFromPDC(String classToLoad) { Class returnClass = null; ClassLoader classLoader = null; if (getMethodDescriptionCompositeRef() != null) { if (getMethodDescriptionCompositeRef().getDescriptionBuilderCompositeRef() != null) { classLoader = getMethodDescriptionCompositeRef().getDescriptionBuilderCompositeRef() .getClassLoader(); } } returnClass = DescriptionBuilderUtils.loadClassFromComposite(classToLoad, classLoader); return returnClass; } /** @return Returns the webParamAnnot. */ public WebParamAnnot getWebParamAnnot() { return webParamAnnot; } /** @return Returns the webServiceRefAnnot. */ public WebServiceRefAnnot getWebServiceRefAnnot() { return webServiceRefAnnot; } /** @return Returns the webServiceContextAnnot. */ public int getListOrder() { return listOrder; } /** @return Returns the parentMDC. */ public MethodDescriptionComposite getMethodDescriptionCompositeRef() { return this.parentMDC; } /** @param parameterType The parameterType to set. */ public void setParameterType(String parameterType) { this.parameterType = parameterType; } /** @param parameterTypeClass The parameterTypeClass to set. */ private void setParameterTypeClass(Class parameterTypeClass) { this.parameterTypeClass = parameterTypeClass; } /** @param webParamAnnot The webParamAnnot to set. */ public void setWebParamAnnot(WebParamAnnot webParamAnnot) { this.webParamAnnot = webParamAnnot; } /** @param webServiceRefAnnot The webServiceRefAnnot to set. */ public void setWebServiceRefAnnot(WebServiceRefAnnot webServiceRefAnnot) { this.webServiceRefAnnot = webServiceRefAnnot; } /** @param webServiceContextAnnot The webServiceContextAnnot to set. */ public void setListOrder(int listOrder) { this.listOrder = listOrder; } /** @param mdc The parent MethodDescriptionComposite to set. */ public void setMethodDescriptionCompositeRef(MethodDescriptionComposite mdc) { this.parentMDC = mdc; } public boolean compare(Object obj) { if (obj instanceof ParameterDescriptionComposite) { ParameterDescriptionComposite pdc = (ParameterDescriptionComposite)obj; if (!(this.parameterType.equals(pdc.getParameterType()))) { return false; } return true; } else { return super.equals(obj); } } public void setIsListType(boolean isListType) { this.isListType = isListType; } public boolean isListType() { return isListType; } /** 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(sameLine); sb.append("ParameterType: " + parameterType); if (webParamAnnot != null) { sb.append(newLine); sb.append("WebParam: "); sb.append(webParamAnnot.toString()); } if (webServiceRefAnnot != null) { sb.append(newLine); sb.append("WebServiceRef: "); sb.append(webServiceRefAnnot.toString()); } return sb.toString(); } public String getRawType() { return DescriptionBuilderUtils.getRawType(parameterType); } public String getHolderActualType() { return DescriptionBuilderUtils.getHolderActualType(parameterType); } public boolean isHolderType() { return DescriptionBuilderUtils.isHolderType(parameterType); } }