You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2013/08/14 21:13:43 UTC

svn commit: r1514008 - in /cxf/trunk/rt/databinding/aegis/src: main/java/org/apache/cxf/aegis/type/basic/ test/java/org/apache/cxf/aegis/inheritance/

Author: dkulp
Date: Wed Aug 14 19:13:43 2013
New Revision: 1514008

URL: http://svn.apache.org/r1514008
Log:
[CXF-5176] Aegis inheritance: inherited xml attributes appear twice
Patch applied

Modified:
    cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/basic/BeanType.java
    cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/inheritance/AbstractUser.java
    cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/inheritance/InheritancePOJOTest.java
    cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/inheritance/InheritanceService.java

Modified: cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/basic/BeanType.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/basic/BeanType.java?rev=1514008&r1=1514007&r2=1514008&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/basic/BeanType.java (original)
+++ cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/basic/BeanType.java Wed Aug 14 19:13:43 2013
@@ -359,6 +359,10 @@ public class BeanType extends AegisType 
 
         for (QName name : inf.getAttributes()) {
 
+            if (isInheritedProperty(inf, name)) {
+                continue;
+            }
+
             Object value = readProperty(object, name);
             if (value != null) {
                 AegisType type = getType(inf, name);
@@ -385,11 +389,10 @@ public class BeanType extends AegisType 
 
         for (QName name : inf.getElements()) {
 
-            if (inf.isExtension()
-                && inf.getPropertyDescriptorFromMappedName(name).getReadMethod().getDeclaringClass() != inf
-                    .getTypeClass()) {
+            if (isInheritedProperty(inf, name)) {
                 continue;
             }
+
             Object value = readProperty(object, name);
 
             AegisType defaultType = getType(inf, name);
@@ -414,6 +417,15 @@ public class BeanType extends AegisType 
         }
     }
 
+    /**
+     * @return true if the given beanType is extended and its given property is inherited from parent classes
+     */
+    private boolean isInheritedProperty(BeanTypeInfo beanTypeInfo, QName propertyQName) {
+        return beanTypeInfo.isExtension()
+               && beanTypeInfo.getPropertyDescriptorFromMappedName(propertyQName).getReadMethod().
+                getDeclaringClass() != beanTypeInfo.getTypeClass();
+    }
+
     protected void writeElement(QName name, Object value,
                                 AegisType type, MessageWriter writer, Context context) {
 
@@ -522,13 +534,14 @@ public class BeanType extends AegisType 
         BeanTypeInfo inf = getTypeInfo();
 
         for (QName name : inf.getAttributes()) {
+            if (isInheritedProperty(inf, name)) {
+                continue;
+            }
             deps.add(inf.getType(name));
         }
 
         for (QName name : inf.getElements()) {
-            if (inf.isExtension()
-                && inf.getPropertyDescriptorFromMappedName(name).getReadMethod().getDeclaringClass() != inf
-                    .getTypeClass()) {
+            if (isInheritedProperty(inf, name)) {
                 continue;
             }
             deps.add(inf.getType(name));
@@ -716,14 +729,8 @@ public class BeanType extends AegisType 
         // Write out schema for elements
         for (QName name : inf.getElements()) {
 
-            if (isExtension) {
-                PropertyDescriptor pd = inf.getPropertyDescriptorFromMappedName(name);
-
-                // assert pd.getReadMethod() != null && pd.getWriteMethod() != null;
-
-                if (pd.getReadMethod().getDeclaringClass() != inf.getTypeClass()) {
-                    continue;
-                }
+            if (isInheritedProperty(inf, name)) {
+                continue;
             }
 
             XmlSchemaElement element = new XmlSchemaElement(root, false);
@@ -771,6 +778,11 @@ public class BeanType extends AegisType 
 
         // Write out schema for attributes
         for (QName name : inf.getAttributes()) {
+
+            if (isInheritedProperty(inf, name)) {
+                continue;
+            }
+
             XmlSchemaAttribute attribute = new XmlSchemaAttribute(root, false);
             complex.getAttributes().add(attribute);
             attribute.setName(name.getLocalPart());

Modified: cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/inheritance/AbstractUser.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/inheritance/AbstractUser.java?rev=1514008&r1=1514007&r2=1514008&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/inheritance/AbstractUser.java (original)
+++ cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/inheritance/AbstractUser.java Wed Aug 14 19:13:43 2013
@@ -21,10 +21,14 @@
  */
 package org.apache.cxf.aegis.inheritance;
 
+import org.apache.cxf.aegis.type.java5.XmlAttribute;
+
 // @XmlType(namespace="urn:xfire:inheritance")
 public abstract class AbstractUser {
     private String name;
 
+    private String nickname;
+
     public String getName() {
         return name;
     }
@@ -32,4 +36,13 @@ public abstract class AbstractUser {
     public void setName(String name) {
         this.name = name;
     }
+
+    @XmlAttribute
+    public String getNickname() {
+        return nickname;
+    }
+
+    public void setNickname(String nickname) {
+        this.nickname = nickname;
+    }
 }

Modified: cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/inheritance/InheritancePOJOTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/inheritance/InheritancePOJOTest.java?rev=1514008&r1=1514007&r2=1514008&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/inheritance/InheritancePOJOTest.java (original)
+++ cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/inheritance/InheritancePOJOTest.java Wed Aug 14 19:13:43 2013
@@ -71,13 +71,16 @@ public class InheritancePOJOTest extends
         String extension = "/xsd:complexContent/xsd:extension[@base='tns:AbstractUser']";
         assertValid(employeeType + extension, d);
         assertValid(employeeType + extension + "/xsd:sequence/xsd:element[@name='division']", d);
-        // assertValid("count(" + employeeType + extension +
-        // "/xsd:sequence/*)=1", d);
+
+        // Check elements/attributes from abstract type are not in the extended type
+        assertInvalid(employeeType + extension + "/xsd:sequence/xsd:element[@name='name']", d);
+        assertInvalid(employeeType + "/xsd:attribute[@name='nickname']", d);
 
         // check for BaseUser as abstract
         String baseUserType = types + "xsd:complexType[(@name='AbstractUser') and (@abstract='true')]";
         assertValid(baseUserType, d);
         assertValid(baseUserType + "/xsd:sequence/xsd:element[@name='name']", d);
+        assertValid(baseUserType + "/xsd:attribute[@name='nickname']", d);
         // assertValid("count(" + baseUserType + "/xsd:sequence/*)=1", d);
     }
 

Modified: cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/inheritance/InheritanceService.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/inheritance/InheritanceService.java?rev=1514008&r1=1514007&r2=1514008&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/inheritance/InheritanceService.java (original)
+++ cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/inheritance/InheritanceService.java Wed Aug 14 19:13:43 2013
@@ -26,6 +26,7 @@ public class InheritanceService {
         Employee e = new Employee();
         e.setDivision("foo");
         e.setName("Dan D. Man");
+        e.setNickname("bar");
         return e;
     }