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


Reply via email to