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;
}