*** xfire-1.0-org/xfire-aegis/src/main/org/codehaus/xfire/aegis/type/basic/BeanType.java 2006-02-21 18:03:16.000000000 +0100 --- xfire-1.0/xfire-aegis/src/main/org/codehaus/xfire/aegis/type/basic/BeanType.java 2006-03-13 15:27:20.000000000 +0100 *************** *** 5,10 **** --- 5,11 ---- import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Proxy; + import java.lang.reflect.Modifier; import java.util.HashSet; import java.util.Iterator; import java.util.Set; *************** *** 339,358 **** SoapConstants.XSD_PREFIX, SoapConstants.XSD); complex.setAttribute(new Attribute("name", getSchemaType().getLocalPart())); root.addContent(complex); Element seq = null; // Write out schema for elements for (Iterator itr = info.getElements(); itr.hasNext();) { if (seq == null) { seq = new Element("sequence", SoapConstants.XSD_PREFIX, SoapConstants.XSD); complex.addContent(seq); } - QName name = (QName) itr.next(); Element element = new Element("element", SoapConstants.XSD_PREFIX, --- 341,396 ---- SoapConstants.XSD_PREFIX, SoapConstants.XSD); complex.setAttribute(new Attribute("name", getSchemaType().getLocalPart())); + + // Check for abstract classes + if (Modifier.isAbstract(info.getTypeClass().getModifiers())) { + complex.setAttribute(new Attribute("abstract", "true")); + } + root.addContent(complex); + Type baseType = info.getBaseType(); + if (baseType != null) { + Element content = new Element("complexContent", + SoapConstants.XSD_PREFIX, + SoapConstants.XSD); + complex.addContent(content); + Element extension = new Element("extension", + SoapConstants.XSD_PREFIX, + SoapConstants.XSD); + + QName baseSchemaType = baseType.getSchemaType(); + String baseName = baseSchemaType.getLocalPart(); + if (!baseSchemaType.getNamespaceURI().equals(getSchemaType().getNamespaceURI())) { + String prefix = NamespaceHelper.getUniquePrefix((Element) root.getParent(), + baseSchemaType.getNamespaceURI() ); + baseName = prefix + ":" + baseName; + } + extension.setAttribute(new Attribute("base", baseName)); + content.addContent(extension); + + // Shift complex + complex = extension; + } + Element seq = null; // Write out schema for elements for (Iterator itr = info.getElements(); itr.hasNext();) { + QName name = (QName) itr.next(); + + if (_info.isInherited(name)) + { + continue; + } + if (seq == null) { seq = new Element("sequence", SoapConstants.XSD_PREFIX, SoapConstants.XSD); complex.addContent(seq); } Element element = new Element("element", SoapConstants.XSD_PREFIX, *************** *** 375,380 **** --- 413,423 ---- { QName name = (QName) itr.next(); + if (_info.isInherited(name)) + { + continue; + } + Element element = new Element("attribute", SoapConstants.XSD_PREFIX, SoapConstants.XSD); *************** *** 459,464 **** --- 502,512 ---- BeanTypeInfo info = getTypeInfo(); + Type baseType = info.getBaseType(); + if (baseType != null) { + deps.add(baseType); + } + for (Iterator itr = info.getAttributes(); itr.hasNext(); ) { QName name = (QName) itr.next();