Author: amilas Date: Sun May 20 20:52:03 2007 New Revision: 540010 URL: http://svn.apache.org/viewvc?view=rev&rev=540010 Log: fixed an attribute processing bug. and put attribute group support
Added: webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/base64binary.xsd webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/base64binary/ webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/base64binary/Base64BinaryTest.java Modified: webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java webservices/axis2/trunk/java/modules/adb-codegen/sub-build.xml webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/groups.xsd webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/group/GroupTest.java Modified: webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java?view=diff&rev=540010&r1=540009&r2=540010 ============================================================================== --- webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java (original) +++ webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java Sun May 20 20:52:03 2007 @@ -968,15 +968,7 @@ } //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, parentSchema); - - } - } + processAttributes(complexType.getAttributes(),metaInfHolder,parentSchema); //process any attribute //somehow the xml schema parser does not seem to pickup the any attribute!! @@ -985,6 +977,7 @@ processAnyAttribute(metaInfHolder, anyAtt); } + //process content ,either complex or simple if (complexType.getContentModel() != null) { processContentModel(complexType.getContentModel(), @@ -994,6 +987,47 @@ return metaInfHolder; } + private void processAttributes(XmlSchemaObjectCollection attributes, + BeanWriterMetaInfoHolder metaInfHolder, + XmlSchema parentSchema) throws SchemaCompilationException { + Iterator attribIterator = attributes.getIterator(); + while (attribIterator.hasNext()) { + Object o = attribIterator.next(); + if (o instanceof XmlSchemaAttribute) { + processAttribute((XmlSchemaAttribute) o, metaInfHolder, parentSchema); + } else if (o instanceof XmlSchemaAttributeGroupRef){ + processAttributeGroupReference((XmlSchemaAttributeGroupRef)o,metaInfHolder,parentSchema); + } + } + } + + private void processAttributeGroupReference(XmlSchemaAttributeGroupRef attributeGroupRef, + BeanWriterMetaInfoHolder metaInfHolder, + XmlSchema parentSchema) throws SchemaCompilationException { + + QName attributeGroupRefName = attributeGroupRef.getRefName(); + if (attributeGroupRefName != null){ + XmlSchemaObjectTable xmlSchemaObjectTable = parentSchema.getAttributeGroups(); + XmlSchemaAttributeGroup xmlSchemaAttributeGroup = null; + for (Iterator iter = xmlSchemaObjectTable.getValues(); iter.hasNext();){ + xmlSchemaAttributeGroup = (XmlSchemaAttributeGroup) iter.next(); + if (xmlSchemaAttributeGroup.getName().equals(attributeGroupRefName.getLocalPart())){ + break; + } + } + + if (xmlSchemaAttributeGroup != null){ + processAttributes(xmlSchemaAttributeGroup.getAttributes(),metaInfHolder,parentSchema); + } else { + throw new SchemaCompilationException("Can not find an attribute group for group reference" + + attributeGroupRefName.getLocalPart()); + } + } else { + throw new SchemaCompilationException("No group refernce has given"); + } + + } + /** * Process the content models. A content model is either simple type or a complex type * and included inside a complex content @@ -1597,7 +1631,8 @@ } } else { - // this attribute refers to a custom type, probably one of the extended simple types.\ + // this attribute refers to a custom type, probably one of the extended simple types. + // with the inline scheam definition QName attributeQName = att.getQName(); if (attributeQName != null) { XmlSchemaSimpleType attributeSimpleType = att.getSchemaType(); @@ -1613,9 +1648,18 @@ QName schemaTypeQName = att.getSchemaTypeName(); if (schemaTypeQName == null) { // set the parent schema target name space since attribute Qname uri is "" - schemaTypeQName = new QName(parentSchema.getTargetNamespace(), attributeQName.getLocalPart() + getNextTypeSuffix()); + if (attributeSimpleType.getQName() != null) { + schemaTypeQName = attributeSimpleType.getQName(); + } else { + schemaTypeQName = new QName(parentSchema.getTargetNamespace(), + attributeQName.getLocalPart() + getNextTypeSuffix()); + + } + } + if (!isAlreadyProcessed(schemaTypeQName)){ + // we have to process only if it has not processed + processSimpleSchemaType(attributeSimpleType, null, parentSchema, schemaTypeQName); } - processSimpleSchemaType(attributeSimpleType, null, parentSchema, schemaTypeQName); metainf.registerMapping(att.getQName(), schemaTypeQName, processedTypemap.get(schemaTypeQName).toString(), Modified: webservices/axis2/trunk/java/modules/adb-codegen/sub-build.xml URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/sub-build.xml?view=diff&rev=540010&r1=540009&r2=540010 ============================================================================== --- webservices/axis2/trunk/java/modules/adb-codegen/sub-build.xml (original) +++ webservices/axis2/trunk/java/modules/adb-codegen/sub-build.xml Sun May 20 20:52:03 2007 @@ -301,6 +301,17 @@ <arg file="${testsuite.source.dir}/groups.xsd"/> <arg file="${schema.generated.src.dir}"/> </java> + + <!-- ################################################################### --> + <!-- All simple derived types xsd --> + <echo>Compiling base64binary.xsd</echo> + <java classname="org.apache.axis2.schema.XSD2Java" fork="true"> + <jvmarg line="${maven.junit.jvmargs}"/> + <classpath refid="maven.dependency.classpath"/> + <classpath location="${compiled.classes.dir}"/> + <arg file="${testsuite.source.dir}/base64binary.xsd"/> + <arg file="${schema.generated.src.dir}"/> + </java> </target> </project> Added: webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/base64binary.xsd URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/base64binary.xsd?view=auto&rev=540010 ============================================================================== --- webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/base64binary.xsd (added) +++ webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/base64binary.xsd Sun May 20 20:52:03 2007 @@ -0,0 +1,29 @@ +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:xmime="http://www.w3.org/2005/05/xmlmime" + targetNamespace="http://www.w3.org/2005/05/xmlmime"> + <xs:attribute name="contentType"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:minLength value="3" /> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + <xs:attribute name="expectedContentTypes" type="xs:string" /> + <xs:complexType name="base64Binary"> + <xs:simpleContent> + <xs:extension base="xs:base64Binary"> + <xs:attribute ref="xmime:contentType" /> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + <xs:complexType name="hexBinary"> + <xs:simpleContent> + <xs:extension base="xs:hexBinary"> + <xs:attribute ref="xmime:contentType" /> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + <xs:element name="TestBase64Binary" type="xmime:base64Binary"></xs:element> + <xs:element name="TestHexBinary" type="xmime:hexBinary"></xs:element> + +</xs:schema> Modified: webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/groups.xsd URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/groups.xsd?view=diff&rev=540010&r1=540009&r2=540010 ============================================================================== --- webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/groups.xsd (original) +++ webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/groups.xsd Sun May 20 20:52:03 2007 @@ -60,4 +60,32 @@ <xs:group ref="tns:TestChoiceGroup"/> </xs:choice> </xs:group> + + <xs:element name="TestAttributeGroupElement"> + <xs:complexType> + <xs:sequence> + <xs:element name="param1" type="xs:string"/> + </xs:sequence> + <xs:attributeGroup ref="tns:TestAttributeGroup" /> + </xs:complexType> + </xs:element> + + <xs:attributeGroup name="TestAttributeGroup"> + <xs:attribute name="attribute1" type="xs:string"/> + </xs:attributeGroup> + + <xs:element name="TestNestedAttributeGroupElement"> + <xs:complexType> + <xs:sequence> + <xs:element name="param1" type="xs:string"/> + </xs:sequence> + <xs:attributeGroup ref="tns:TestNestedAttributeGroup" /> + </xs:complexType> + </xs:element> + + <xs:attributeGroup name="TestNestedAttributeGroup"> + <xs:attribute name="attribute2" type="xs:string"/> + <xs:attributeGroup ref="tns:TestAttributeGroup" /> + </xs:attributeGroup> + </schema> Added: webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/base64binary/Base64BinaryTest.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/base64binary/Base64BinaryTest.java?view=auto&rev=540010 ============================================================================== --- webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/base64binary/Base64BinaryTest.java (added) +++ webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/base64binary/Base64BinaryTest.java Sun May 20 20:52:03 2007 @@ -0,0 +1,106 @@ +/* + * 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. + */ +package org.apache.axis2.schema.base64binary; + +import org.w3.www._2005._05.xmlmime.*; +import org.w3.www._2005._05.xmlmime.HexBinary; +import org.apache.axiom.attachments.ByteArrayDataSource; +import org.apache.axiom.om.OMElement; +import org.apache.axiom.om.OMAbstractFactory; +import org.apache.axiom.om.util.StAXUtils; +import org.apache.axis2.databinding.types.*; + +import javax.activation.DataHandler; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; + +import junit.framework.TestCase; + +import java.io.ByteArrayInputStream; + + +/** + * Author: amila + * Date: May 19, 2007 + */ +public class Base64BinaryTest extends TestCase { + + public void testBase64Binary(){ + TestBase64Binary testBase64Binary = new TestBase64Binary(); + Base64Binary base64Binary = new Base64Binary(); + testBase64Binary.setTestBase64Binary(base64Binary); + + String testString = "new test string"; + + DataHandler dataHandler = new DataHandler(new ByteArrayDataSource(testString.getBytes())); + base64Binary.setBase64Binary(dataHandler); + ContentType_type0 contentType_type0 = new ContentType_type0(); + contentType_type0.setContentType_type0("test content type"); + base64Binary.setContentType(contentType_type0); + + OMElement omElement = testBase64Binary.getOMElement(TestBase64Binary.MY_QNAME, OMAbstractFactory.getOMFactory()); + + try { + String omElementString = omElement.toStringWithConsume(); + System.out.println("OM String ==> " + omElementString); + XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(new ByteArrayInputStream(omElementString.getBytes())); + TestBase64Binary result = TestBase64Binary.Factory.parse(xmlReader); + DataHandler resultDataHandler = result.getTestBase64Binary().getBase64Binary(); + byte[] bytes = new byte[128]; + int length = resultDataHandler.getInputStream().read(bytes); + String resultString = new String(bytes,0,length); + assertEquals(resultString,testString); + assertEquals(result.getTestBase64Binary().getContentType().getContentType_type0(),"test content type"); + } catch (XMLStreamException e) { + fail(); + } catch (Exception e) { + fail(); + } + } + + public void testHexBinary(){ + TestHexBinary testHexBinary = new TestHexBinary(); + HexBinary hexBinary = new HexBinary(); + testHexBinary.setTestHexBinary(hexBinary); + + String testString = "ab"; + + org.apache.axis2.databinding.types.HexBinary adbHexBinary = + new org.apache.axis2.databinding.types.HexBinary(testString); + + hexBinary.setHexBinary(adbHexBinary); + ContentType_type0 contentType_type0 = new ContentType_type0(); + contentType_type0.setContentType_type0("test content type"); + hexBinary.setContentType(contentType_type0); + + OMElement omElement = testHexBinary.getOMElement(TestBase64Binary.MY_QNAME, OMAbstractFactory.getOMFactory()); + + try { + String omElementString = omElement.toStringWithConsume(); + System.out.println("OM String ==> " + omElementString); + XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(new ByteArrayInputStream(omElementString.getBytes())); + TestHexBinary result = TestHexBinary.Factory.parse(xmlReader); + assertEquals(result.getTestHexBinary().getHexBinary().toString(),testString); + assertEquals(result.getTestHexBinary().getContentType().getContentType_type0(),"test content type"); + } catch (XMLStreamException e) { + fail(); + } catch (Exception e) { + fail(); + } + } + + +} Modified: webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/group/GroupTest.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/group/GroupTest.java?view=diff&rev=540010&r1=540009&r2=540010 ============================================================================== --- webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/group/GroupTest.java (original) +++ webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/group/GroupTest.java Sun May 20 20:52:03 2007 @@ -25,6 +25,9 @@ import javax.xml.stream.XMLStreamReader; import java.io.ByteArrayInputStream; +import group.test.axis2.apache.org.TestAttributeGroupElement; +import group.test.axis2.apache.org.TestNestedAttributeGroupElement; + public class GroupTest extends TestCase { @@ -144,5 +147,53 @@ fail(); } } + + public void testAttributeGroup(){ + TestAttributeGroupElement testAttributeGroup = new TestAttributeGroupElement(); + testAttributeGroup.setAttribute1("Attribute1"); + testAttributeGroup.setParam1("Param1"); + + OMElement omElement = + testAttributeGroup.getOMElement(TestAttributeGroupElement.MY_QNAME,OMAbstractFactory.getOMFactory()); + try { + String omElementString = omElement.toStringWithConsume(); + System.out.println("OM Element ==> " + omElementString); + XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(new ByteArrayInputStream(omElementString.getBytes())); + TestAttributeGroupElement result = TestAttributeGroupElement.Factory.parse(xmlReader); + assertEquals(result.getParam1(),"Param1"); + assertEquals(result.getAttribute1(),"Attribute1"); + } catch (XMLStreamException e) { + fail(); + } catch (Exception e) { + fail(); + } + + } + + public void testNestedAttributeGroup(){ + TestNestedAttributeGroupElement testNestedAttributeGroupElement = new TestNestedAttributeGroupElement(); + testNestedAttributeGroupElement.setAttribute1("Attribute1"); + testNestedAttributeGroupElement.setAttribute2("Attribute2"); + testNestedAttributeGroupElement.setParam1("Param1"); + + OMElement omElement = + testNestedAttributeGroupElement.getOMElement(TestNestedAttributeGroupElement.MY_QNAME,OMAbstractFactory.getOMFactory()); + try { + String omElementString = omElement.toStringWithConsume(); + System.out.println("OM Element ==> " + omElementString); + XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(new ByteArrayInputStream(omElementString.getBytes())); + TestNestedAttributeGroupElement result = TestNestedAttributeGroupElement.Factory.parse(xmlReader); + assertEquals(result.getParam1(),"Param1"); + assertEquals(result.getAttribute1(),"Attribute1"); + assertEquals(result.getAttribute2(),"Attribute2"); + } catch (XMLStreamException e) { + fail(); + } catch (Exception e) { + fail(); + } + + } + + } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]