You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by aj...@apache.org on 2005/10/26 07:49:33 UTC
svn commit: r328568 - in
/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2:
databinding/schema/ databinding/schema/template/ wsdl/template/java/
Author: ajith
Date: Tue Oct 25 22:49:21 2005
New Revision: 328568
URL: http://svn.apache.org/viewcvs?rev=328568&view=rev
Log:
1. Fixed the sequence handling in the schema compiler
2. Updated the ADBSupporterTemplate.xsl so that the generated code using the ADB works! We still has a bit of a problem
Modified:
webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/BeanWriterMetaInfoHolder.java
webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/JavaBeanWriter.java
webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaCompiler.java
webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.xsl
webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/wsdl/template/java/ADBSupporterTemplate.xsl
Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/BeanWriterMetaInfoHolder.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/BeanWriterMetaInfoHolder.java?rev=328568&r1=328567&r2=328568&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/BeanWriterMetaInfoHolder.java (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/BeanWriterMetaInfoHolder.java Tue Oct 25 22:49:21 2005
@@ -1,9 +1,8 @@
package org.apache.axis2.databinding.schema;
import javax.xml.namespace.QName;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Iterator;
+import java.util.*;
+import java.lang.reflect.Array;
/*
* Copyright 2004,2005 The Apache Software Foundation.
*
@@ -37,6 +36,7 @@
private Map specialTypeFlagMap = new HashMap();
private Map qNameMaxOccursCountMap = new HashMap();
private Map qNameMinOccursCountMap = new HashMap();
+ private Map qNameOrderMap = new HashMap();
public String getExtensionClassName() {
return extensionClassName;
@@ -119,6 +119,15 @@
}
/**
+ *
+ * @param qName
+ * @param index
+ */
+ public void registerQNameIndex(QName qName, int index){
+ this.qNameOrderMap.put(new Integer(index),qName);
+ }
+
+ /**
*
* @param qName
* @return
@@ -155,5 +164,30 @@
return elementToJavaClassMap.keySet().iterator();
}
+ /**
+ *
+ * @return
+ */
+ public QName[] getQNameArray(){
+ Set keySet =elementToJavaClassMap.keySet();
+ return (QName[])keySet.toArray(new QName[keySet.size()]);
+ }
+
+
+ public QName[] getOrderedQNameArray(){
+ //get the keys of the order map
+ Set set = qNameOrderMap.keySet();
+ int count = set.size();
+ Integer[] keys =(Integer[]) set.toArray(new Integer[count]);
+ Arrays.sort(keys);
+
+ //Now refill the Ordered QName Array
+ QName[] returnQNames = new QName[count];
+ for (int i = 0; i < keys.length; i++) {
+ returnQNames[i] = (QName)qNameOrderMap.get(keys[i]);
+
+ }
+ return returnQNames;
+ }
}
Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/JavaBeanWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/JavaBeanWriter.java?rev=328568&r1=328567&r2=328568&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/JavaBeanWriter.java (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/JavaBeanWriter.java Tue Oct 25 22:49:21 2005
@@ -84,7 +84,8 @@
private String process(QName qName, BeanWriterMetaInfoHolder metainf, Map typeMap, boolean isElement) throws Exception {
String packageName = URLProcessor.getNameSpaceFromURL(qName.getNamespaceURI());
- String className = getNonConflictingName(this.namesList,qName.getLocalPart());
+ String originalName = qName.getLocalPart();
+ String className = getNonConflictingName(this.namesList,originalName);
ArrayList propertyNames = new ArrayList();
@@ -98,6 +99,7 @@
//make the XML
Element rootElt = XSLTUtils.addChildElement(model,"bean",model);
XSLTUtils.addAttribute(model,"name",className,rootElt);
+ XSLTUtils.addAttribute(model,"originalName",originalName,rootElt);
XSLTUtils.addAttribute(model,"package",packageName,rootElt);
XSLTUtils.addAttribute(model,"nsuri",qName.getNamespaceURI(),rootElt);
XSLTUtils.addAttribute(model,"nsprefix",qName.getPrefix(),rootElt);
@@ -109,19 +111,28 @@
XSLTUtils.addAttribute(model,"extension",metainf.getExtensionClassName(),rootElt);
}
// go in the loop and add the part elements
- Iterator qNameIterator = metainf.getElementQNameIterator();
+ QName[] qNames = null;
+ if (metainf.isOrdered()){
+ qNames = metainf.getOrderedQNameArray();
+ }else{
+ qNames = metainf.getQNameArray();
+ }
QName name;
- while (qNameIterator.hasNext()) {
+ for (int i = 0; i < qNames.length; i++) {
Element property = XSLTUtils.addChildElement(model,"property",rootElt);
- name = (QName)qNameIterator.next();
+ name = qNames[i];
String xmlName = name.getLocalPart();
+ System.out.println(xmlName);
+ XSLTUtils.addAttribute(model,"name",xmlName,property);
+
String javaName = "";
if (JavaUtils.isJavaKeyword(xmlName)){
javaName = JavaUtils.makeNonJavaKeyword(xmlName);
}else{
javaName = JavaUtils.xmlNameToJava(xmlName,false);
}
+
javaName = getNonConflictingName(propertyNames,javaName);
XSLTUtils.addAttribute(model,"name",xmlName,property);
XSLTUtils.addAttribute(model,"javaname",javaName,property);
@@ -160,7 +171,7 @@
javaClassNameForElement.substring(0,javaClassNameForElement.indexOf("[")),
property);
-
+
long minOccurs = metainf.getMinOccurs(name);
if (minOccurs >0){
Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaCompiler.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaCompiler.java?rev=328568&r1=328567&r2=328568&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaCompiler.java (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaCompiler.java Tue Oct 25 22:49:21 2005
@@ -389,15 +389,23 @@
boolean order) throws SchemaCompilationException {
int count = items.getCount();
Map processedElements = new HashMap();
+ Map elementOrderMap = new HashMap();
for (int i = 0; i < count; i++) {
XmlSchemaObject item = items.getItem(i);
+
if (item instanceof XmlSchemaElement){
//recursively process the element
XmlSchemaElement xsElt = (XmlSchemaElement) item;
+
boolean isArray = isArray(xsElt);
processElement(xsElt,false,isArray); //we know for sure this is not an outer type
processedElements.put(xsElt, (isArray) ? Boolean.TRUE : Boolean.FALSE);
+ if (order){
+ //we need to keep the order of the elements. So push the elements to another
+ //hashmap with the order number
+ elementOrderMap.put(xsElt,new Integer(i));
+ }
}else if (item instanceof XmlSchemaComplexContent){
// process the extension
XmlSchemaContent content = ((XmlSchemaComplexContent)item).getContent();
@@ -419,18 +427,28 @@
Iterator processedElementsIterator= processedElements.keySet().iterator();
while(processedElementsIterator.hasNext()){
XmlSchemaElement elt = (XmlSchemaElement)processedElementsIterator.next();
- String clazzName = (String)processedElementMap.get(elt.getQName());
- metainfHolder.registerMapping(elt.getQName(),
+ QName qName = elt.getQName();
+ String clazzName = (String)processedElementMap.get(qName);
+ metainfHolder.registerMapping(qName,
elt.getSchemaTypeName()
,clazzName,
((Boolean)processedElements.get(elt)).booleanValue()?
SchemaConstants.ANY_ARRAY_TYPE:
SchemaConstants.ELEMENT_TYPE);
+
//register the occurence counts
- metainfHolder.addMaxOccurs(elt.getQName(),elt.getMaxOccurs());
- metainfHolder.addMinOccurs(elt.getQName(),elt.getMinOccurs());
+ metainfHolder.addMaxOccurs(qName,elt.getMaxOccurs());
+ metainfHolder.addMinOccurs(qName,elt.getMinOccurs());
+ //we need the order to be preserved. So record the order also
+ if (order){
+ //record the order in the metainf holder
+ Integer integer = (Integer) elementOrderMap.get(elt);
+ metainfHolder.registerQNameIndex(qName,
+ integer.intValue());
+ }
}
+
//set the ordered flag in the metainf holder
metainfHolder.setOrdered(order);
}
Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.xsl
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.xsl?rev=328568&r1=328567&r2=328568&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.xsl (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.xsl Tue Oct 25 22:49:21 2005
@@ -12,7 +12,7 @@
implements org.apache.axis2.databinding.ADBBean{
<xsl:choose>
<xsl:when test="@type">/* This type was generated from the piece of schema that had
- name = <xsl:value-of select="$name"/>
+ name = <xsl:value-of select="@originalName"/>
Namespace URI = <xsl:value-of select="@nsuri"/>
Namespace Prefix = <xsl:value-of select="@nsprefix"/>
*/
@@ -20,12 +20,12 @@
<xsl:otherwise>
public static final javax.xml.namespace.QName MY_QNAME = new javax.xml.namespace.QName(
"<xsl:value-of select="@nsuri"/>",
- "<xsl:value-of select="$name"/>",
+ "<xsl:value-of select="@originalName"/>",
"<xsl:value-of select="@nsprefix"/>");
</xsl:otherwise>
</xsl:choose>
- <xsl:if test="@type"></xsl:if>
+
<xsl:for-each select="property">
<xsl:variable name="propertyType"><xsl:value-of select="@type"></xsl:value-of></xsl:variable>
@@ -75,8 +75,9 @@
* Note - this is not complete
*/
public javax.xml.stream.XMLStreamReader getPullParser(javax.xml.namespace.QName qName){
-
- Object[] elementList = new Object[]{
+ <xsl:choose>
+ <xsl:when test="@type">
+ Object[] elementList = new Object[]{
<xsl:for-each select="property[not(@attribute)]">
<xsl:variable name="propertyName"><xsl:value-of select="@name"/></xsl:variable>
<xsl:variable name="varName">local<xsl:value-of select="@javaname"/></xsl:variable>
@@ -110,8 +111,31 @@
</xsl:choose>
</xsl:for-each>
};
-
return org.apache.axis2.databinding.utils.ADBPullParser.createPullParser(qName, elementList, attribList);
+ </xsl:when>
+ <xsl:otherwise>
+ //We can safely assume an element has only one type associated with it
+ <!-- This better be only one!!-->
+ <xsl:for-each select="property[@ours]">
+ <xsl:variable name="propertyName"><xsl:value-of select="@name"/></xsl:variable>
+ <xsl:variable name="varName">local<xsl:value-of select="@javaname"/></xsl:variable>
+ return <xsl:value-of select="$varName"/>.getPullParser(MY_QNAME);
+ </xsl:for-each>
+ <!-- What do we do for the other case ???? -->
+ <xsl:for-each select="property[not(@ours)]">
+ <xsl:variable name="propertyName"><xsl:value-of select="@name"/></xsl:variable>
+ <xsl:variable name="varName">local<xsl:value-of select="@javaname"/></xsl:variable>
+ return org.apache.axis2.databinding.utils.ADBPullParser.createPullParser(MY_QNAME,
+ new Object[]{
+ "<xsl:value-of select="$propertyName"/>",org.apache.axis2.databinding.schema.util.ConverterUtil.convertToString(<xsl:value-of select="$varName"/>)
+ },
+ new Object[]{});
+
+
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+
}
/**
Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/wsdl/template/java/ADBSupporterTemplate.xsl
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/wsdl/template/java/ADBSupporterTemplate.xsl?rev=328568&r1=328567&r2=328568&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/wsdl/template/java/ADBSupporterTemplate.xsl (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/wsdl/template/java/ADBSupporterTemplate.xsl Tue Oct 25 22:49:21 2005
@@ -35,13 +35,19 @@
public static java.lang.Object fromOM(org.apache.axis2.om.OMElement param,
java.lang.Class type){
+
try{
<xsl:for-each select="param">
<xsl:if test="@type!=''">
if (<xsl:value-of select="@type"/>.class.equals(type)){
- if (org.apache.axis2.databinding.ADBBean.class.isAssignableFrom(type)){
-
+ java.lang.reflect.Method parseMethod = <xsl:value-of select="@type"/>.class.getMethod("parse",new Class[]{javax.xml.stream.XMLStreamReader.class});
+ java.lang.Object obj=null;
+ if (parseMethod!=null){
+ obj = parseMethod.invoke(null,new java.lang.Object[]{param.getXMLStreamReader()});
+ }else{
+ //oops! we don't know how to deal with this. Perhaps the reflective one is a good choice here
}
+ return obj;
}
</xsl:if>
</xsl:for-each>
@@ -53,12 +59,12 @@
//Generates an empty object for testing
// Caution - need some manual editing to work properly
- public static org.apache.xmlbeans.XmlObject getTestObject(java.lang.Class type){
+ public static java.lang.Object getTestObject(java.lang.Class type){
try{
<xsl:for-each select="param">
<xsl:if test="@type!=''">
if (<xsl:value-of select="@type"/>.class.equals(type)){
- <xsl:value-of select="@type"/> emptyObject= new <xsl:value-of select="@type"/>;
+ <xsl:value-of select="@type"/> emptyObject= new <xsl:value-of select="@type"/>();
////////////////////////////////////////////////
// TODO
// Fill in the empty object with necessaey values. Empty XMLBeans objects do not generate proper events