Author: amilas Date: Mon Aug 29 05:50:10 2011 New Revision: 1162649 URL: http://svn.apache.org/viewvc?rev=1162649&view=rev Log: applying patch for AXIS2-5124
Modified: axis/axis2/java/core/trunk/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java Modified: axis/axis2/java/core/trunk/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java?rev=1162649&r1=1162648&r2=1162649&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java (original) +++ axis/axis2/java/core/trunk/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java Mon Aug 29 05:50:10 2011 @@ -55,6 +55,7 @@ import java.io.IOException; import java.io.OutputStream; import java.net.URL; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -720,10 +721,11 @@ public class JavaBeanWriter implements B } else { qName = metainf.getQNameArray(); } - + for (int i = 0; i < qName.length; i++) { qNames.add(qName[i]); } + //adding missing QNames to the end, including elements & attributes. // for the simple types we have already add the parent elements // it is almost consider as an extension @@ -731,12 +733,27 @@ public class JavaBeanWriter implements B addMissingQNames(metainf, qNames, missingQNames); } + List<BeanWriterMetaInfoHolder> parents=new ArrayList<BeanWriterMetaInfoHolder>(); + BeanWriterMetaInfoHolder immediateParent=metainf.getParent(); + while(immediateParent != null){ + parents.add(immediateParent); + immediateParent=immediateParent.getParent(); + } + for (QName name : qNames) { Element property = XSLTUtils.addChildElement(model, "property", rootElt); String xmlName = name.getLocalPart(); + + String xmlNameNew=identifyUniqueNameForQName(parents,xmlName, metainf, name,name); + while(!xmlName.equalsIgnoreCase(xmlNameNew)){ + xmlName=xmlNameNew; + xmlNameNew=identifyUniqueNameForQName(parents,xmlNameNew, metainf, name,new QName(xmlNameNew)); + } + XSLTUtils.addAttribute(model, "name", xmlName, property); XSLTUtils.addAttribute(model, "nsuri", name.getNamespaceURI(), property); + String javaName; if (metainf.isJavaNameMappingAvailable(xmlName)) { @@ -796,7 +813,8 @@ public class JavaBeanWriter implements B metainf.getDefaultValueForQName(name), property); } } - + + //in the case the original element is an array but the derived one is not. if (parentMetaInf != null && metainf.isRestriction() && !missingQNames.contains(name) && (parentMetaInf.getArrayStatusForQName(name) && !metainf.getArrayStatusForQName(name))) { @@ -862,7 +880,6 @@ public class JavaBeanWriter implements B groupTypeMap, javaClassNameForElement); } - } // end of foo } @@ -1452,5 +1469,46 @@ public class JavaBeanWriter implements B } + + /** + * This method is used to generate a unique name for a given QName and a metainf. + * First we check the parents whether they have the given QName, If yes, then we check the java type for QName. + * If they are similar, no issue. If they are different, java name has to be changed. + * After changing also, we need to check whether the changed name contains in the parentinfs. + * @param parents + * @param xmlName + * @param metainf + * @param original + * @param modified + * @return + */ + private String identifyUniqueNameForQName(List<BeanWriterMetaInfoHolder> parents, String xmlName,BeanWriterMetaInfoHolder metainf,QName original,QName modified){ + + int count=0; + for (BeanWriterMetaInfoHolder beanWriterMetaInfoHolder : parents) { + QName[] pQNmame = null; + if (beanWriterMetaInfoHolder.isOrdered()) { + pQNmame = beanWriterMetaInfoHolder.getOrderedQNameArray(); + } else { + pQNmame = beanWriterMetaInfoHolder.getQNameArray(); + } + + List<QName> pQNameList = null; + if (pQNmame != null) { + pQNameList = Arrays.asList(pQNmame); + } + + if (pQNameList != null + && pQNameList.contains(modified) + && metainf.getClassNameForQName(original) != null + && !metainf.getClassNameForQName(original).equalsIgnoreCase( + beanWriterMetaInfoHolder.getClassNameForQName(modified))) { + xmlName += count; + break; + } + count++; + } + return xmlName; + } } \ No newline at end of file