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