From b209f679e9199fb0420fe4a28f114c66890ea108 Mon Sep 17 00:00:00 2001 From: Jan Gruteser Date: Sat, 18 May 2024 08:07:16 +0200 Subject: [PATCH 1/2] fix exception for substituted elements without specified type the type is inherited from the substitution group if not explicitly given --- .../schema/walker/XmlSchemaWalker.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/xmlschema-walker/src/main/java/org/apache/ws/commons/schema/walker/XmlSchemaWalker.java b/xmlschema-walker/src/main/java/org/apache/ws/commons/schema/walker/XmlSchemaWalker.java index 4c978502..4b8e6e31 100644 --- a/xmlschema-walker/src/main/java/org/apache/ws/commons/schema/walker/XmlSchemaWalker.java +++ b/xmlschema-walker/src/main/java/org/apache/ws/commons/schema/walker/XmlSchemaWalker.java @@ -210,13 +210,7 @@ public void walk(XmlSchemaElement element) { element.setMaxOccurs(XmlSchemaParticle.DEFAULT_MAX_OCCURS); } - XmlSchemaType schemaType = element.getSchemaType(); - if (schemaType == null) { - final QName typeQName = element.getSchemaTypeName(); - if (typeQName != null) { - schemaType = schemasByNamespace.getTypeByName(typeQName); - } - } + XmlSchemaType schemaType = getSchemaTypeOfElement(element); if (schemaType != null) { XmlSchemaScope scope = null; @@ -582,4 +576,21 @@ private static QName getElementQName(XmlSchemaElement element) { return element.getQName(); } } + + + private XmlSchemaType getSchemaTypeOfElement(XmlSchemaElement element) { + XmlSchemaType schemaType = element.getSchemaType(); + if (schemaType == null) { + final QName typeQName = element.getSchemaTypeName(); + if (typeQName != null) { + schemaType = schemasByNamespace.getTypeByName(typeQName); + } else { + final QName substitutionGroupQName = element.getSubstitutionGroup(); + if (substitutionGroupQName != null) { + schemaType = getSchemaTypeOfElement(schemasByNamespace.getElementByName(substitutionGroupQName)); + } + } + } + return schemaType; + } } From b312067733ee32ac85d6682aceababec58e7ca73 Mon Sep 17 00:00:00 2001 From: Jan Gruteser Date: Sat, 18 May 2024 08:18:35 +0200 Subject: [PATCH 2/2] fix ClassCastException for XmlSchemaAll occuring in extensions --- .../ws/commons/schema/walker/XmlSchemaScope.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/xmlschema-walker/src/main/java/org/apache/ws/commons/schema/walker/XmlSchemaScope.java b/xmlschema-walker/src/main/java/org/apache/ws/commons/schema/walker/XmlSchemaScope.java index 475f5aab..7e2c7449 100644 --- a/xmlschema-walker/src/main/java/org/apache/ws/commons/schema/walker/XmlSchemaScope.java +++ b/xmlschema-walker/src/main/java/org/apache/ws/commons/schema/walker/XmlSchemaScope.java @@ -352,7 +352,15 @@ private void walk(boolean isMixed, XmlSchemaContent content) { } else { XmlSchemaSequence seq = new XmlSchemaSequence(); seq.getItems().add((XmlSchemaSequenceMember)baseParticle); - seq.getItems().add((XmlSchemaSequenceMember)ext.getParticle()); + // we cannot cast a SchemaAll instance to SequenceMember + if (ext.getParticle() instanceof XmlSchemaAll) { + XmlSchemaAll all = (XmlSchemaAll) ext.getParticle(); + for (XmlSchemaAllMember allMember : all.getItems()) { + seq.getItems().add((XmlSchemaSequenceMember) allMember); + } + } else { + seq.getItems().add((XmlSchemaSequenceMember) ext.getParticle()); + } child = seq; }