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/18 04:49:02 UTC
svn commit: r326016 - in /webservices/axis2/trunk/java/modules/codegen:
src/org/apache/axis2/databinding/schema/
src/org/apache/axis2/databinding/schema/template/ test-resources/xsd/
test/org/apache/axis2/databinding/schema/
Author: ajith
Date: Mon Oct 17 19:48:44 2005
New Revision: 326016
URL: http://svn.apache.org/viewcvs?rev=326016&view=rev
Log:
Updated the schema compiler to process attributes.
Added:
webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_attrib.xsd
webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/SimpleAttributeTest.java
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
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=326016&r1=326015&r2=326016&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 Mon Oct 17 19:48:44 2005
@@ -1,7 +1,5 @@
package org.apache.axis2.databinding.schema;
-import sun.text.CompactShortArray;
-
import javax.xml.namespace.QName;
import java.util.Map;
import java.util.HashMap;
@@ -33,6 +31,7 @@
private String extensionClassName = "";
private Map elementToSchemaQNameMap = new HashMap();
private Map elementToJavaClassMap = new HashMap();
+ private Map attributeFlagMap = new HashMap();
public String getExtensionClassName() {
return extensionClassName;
@@ -58,20 +57,29 @@
this.ordered = ordered;
}
- public void addElementInfo(QName eltQName,QName eltSchemaName,String javaClassName){
- this.elementToJavaClassMap.put(eltQName,javaClassName);
- this.elementToSchemaQNameMap.put(eltQName,eltSchemaName);
+ public void registerMapping(QName qName,QName schemaName,String javaClassName){
+ registerMapping(qName,schemaName,javaClassName,false);
+ }
+
+ public void registerMapping(QName qName,QName schemaName,String javaClassName,boolean isAttribute){
+ this.elementToJavaClassMap.put(qName,javaClassName);
+ this.elementToSchemaQNameMap.put(qName,schemaName);
+ this.attributeFlagMap.put(qName,new Boolean(isAttribute));
}
- public QName getSchemaQNameForElement(QName eltQName){
+ public QName getSchemaQNameForQName(QName eltQName){
return (QName)this.elementToSchemaQNameMap.get(eltQName);
}
- public String getJavaClassNameForElement(QName eltQName){
+ public String getJavaClassNameForQName(QName eltQName){
return (String)this.elementToJavaClassMap.get(eltQName);
}
+ public boolean getAttributeStatusForQName(QName qName){
+ Boolean aBoolean = (Boolean) attributeFlagMap.get(qName);
+ return aBoolean != null && aBoolean.booleanValue();
+ }
public void clearTables(){
this.elementToJavaClassMap.clear();
this.elementToSchemaQNameMap.clear();
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=326016&r1=326015&r2=326016&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 Mon Oct 17 19:48:44 2005
@@ -125,15 +125,20 @@
javaName = getNonConflictingName(propertyNames,javaName);
XSLTUtils.addAttribute(model,"name",xmlName,property);
XSLTUtils.addAttribute(model,"javaname",javaName,property);
- String javaClassNameForElement = metainf.getJavaClassNameForElement(name);
- String shortTypeName = metainf.getSchemaQNameForElement(name).getLocalPart();
+ String javaClassNameForElement = metainf.getJavaClassNameForQName(name);
+ String shortTypeName = metainf.getSchemaQNameForQName(name).getLocalPart();
if (javaClassNameForElement==null){
throw new SchemaCompilationException("Type missing!");
}
XSLTUtils.addAttribute(model,"type",javaClassNameForElement,property);
- if (typeMap.containsKey(metainf.getSchemaQNameForElement(name))){
+ if (typeMap.containsKey(metainf.getSchemaQNameForQName(name))){
XSLTUtils.addAttribute(model,"ours","yes",property); //todo introduce a better name for this
}
+
+ if (metainf.getAttributeStatusForQName(name)){
+ XSLTUtils.addAttribute(model,"attribute","yes",property);
+ }
+
XSLTUtils.addAttribute(model,"shorttypename",shortTypeName,property);
}
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=326016&r1=326015&r2=326016&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 Mon Oct 17 19:48:44 2005
@@ -67,7 +67,9 @@
}
/**
- *
+ * Compile a list of schemas
+ * This actually calls the compile (XmlSchema s) method repeatedly
+ * @see #compile(org.apache.ws.commons.schema.XmlSchema)
* @param schemalist
* @throws SchemaCompilationException
*/
@@ -87,7 +89,7 @@
/**
*
- *
+ * Compile (rather codegen) a single schema element
* @param schema
* @throws SchemaCompilationException
*/
@@ -124,7 +126,7 @@
QName qName = schemaType.getQName();
//find the class name
String className = findClassName(schemaType);
- metainf.addElementInfo(schemaElement.getQName(),
+ metainf.registerMapping(schemaElement.getQName(),
qName,
className);
String writtenClassName = writer.write(schemaElement,processedTypemap,metainf);
@@ -155,7 +157,8 @@
//at this time it is not wise to directly write the class for the element
//so we push the complete element to an arraylist and let the process
- //pass through
+ //pass through. We'll be iterating through the elements writing them
+ //later
if (!isOuter){
String className = findClassName(schemaType);
@@ -217,11 +220,23 @@
if (particle!=null){
//Process the particle
processParticle(particle, metaInfHolder);
- }else{
- // Process the other types - Say the complex content, extensions and so on
}
+ //process attributes - first look for the explicit attributes
+ XmlSchemaObjectCollection attribs = complexType.getAttributes();
+ Iterator attribIterator = attribs.getIterator();
+ while (attribIterator.hasNext()) {
+ Object o = attribIterator.next();
+ if (o instanceof XmlSchemaAttribute){
+ processAttribute((XmlSchemaAttribute)o,metaInfHolder);
+
+ }
+ }
+ // Process the other types - Say the complex content, extensions and so on
+
+
//write the class. This type mapping would have been populated right now
+ //Note - We always write classes for complex types
String fullyQualifiedClassName = writer.write(complexType,processedTypemap,metaInfHolder);
//populate the type mapping with the elements
processedTypemap.put(complexType.getQName(),fullyQualifiedClassName);
@@ -230,6 +245,19 @@
}
+ public void processAttribute(XmlSchemaAttribute att,BeanWriterMetaInfoHolder metainf){
+ //for now we assume (!!!) that attributes refer to standard types only
+ QName schemaTypeName = att.getSchemaTypeName();
+ if (baseSchemaTypeMap.containsKey(schemaTypeName)){
+ metainf.registerMapping(att.getQName(),
+ schemaTypeName,
+ baseSchemaTypeMap.get(schemaTypeName).toString(),true);
+ } else {
+ //this attribute refers to a custom type, probably one of the extended simple types.
+ //handle it here
+ }
+ }
+
/**
*
* @param particle
@@ -289,7 +317,7 @@
for (int i = 0; i < processedCount; i++) {
XmlSchemaElement elt = (XmlSchemaElement)processedElements.get(i);
String clazzName = (String)processedElementmap.get(elt.getQName());
- metainfHolder.addElementInfo(elt.getQName(),
+ metainfHolder.registerMapping(elt.getQName(),
elt.getSchemaTypeName()
,clazzName);
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=326016&r1=326015&r2=326016&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 Mon Oct 17 19:48:44 2005
@@ -33,6 +33,7 @@
<xsl:variable name="javaName"><xsl:value-of select="@javaname"></xsl:value-of></xsl:variable>
/**
* field for <xsl:value-of select="$javaName"/>
+ <xsl:if test="@attribute">* This was an Attribute!</xsl:if>
*/
private <xsl:value-of select="$propertyType"/> local<xsl:value-of select="$javaName"/>;
Added: webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_attrib.xsd
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_attrib.xsd?rev=326016&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_attrib.xsd (added)
+++ webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_attrib.xsd Mon Oct 17 19:48:44 2005
@@ -0,0 +1,21 @@
+<schema targetNamespace="http://soapinterop.org/xsd"
+ xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsd1="http://soapinterop.org/xsd"
+ elementFormDefault="qualified">
+ <complexType name="SOAPStruct">
+ <all>
+ <element name="varFloat" type="xsd:float"/>
+ <element name="varInt" type="xsd:int"/>
+ <element name="varString" type="xsd:string"/>
+ </all>
+ <attribute name="type1" type="xsd:string"></attribute>
+ <attribute name="type2" type="xsd:string"></attribute>
+
+ </complexType>
+ <element name="echoStringParam" type="xsd:string"/>
+ <element name="echoStringReturn" type="xsd:string"/>
+ <element name="echoStructParam" type="xsd1:SOAPStruct"/>
+ <element name="echoStructReturn" type="xsd1:SOAPStruct"/>
+</schema>
\ No newline at end of file
Added: webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/SimpleAttributeTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/SimpleAttributeTest.java?rev=326016&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/SimpleAttributeTest.java (added)
+++ webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/SimpleAttributeTest.java Mon Oct 17 19:48:44 2005
@@ -0,0 +1,25 @@
+package org.apache.axis2.databinding.schema;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+public class SimpleAttributeTest extends AbstractSchemaCompilerTester{
+
+ protected void setUp() throws Exception {
+ this.fileName = "test-resources/xsd/simple_attrib.xsd";
+ super.setUp();
+ }
+
+}