XmlElementDescriptor[] (XmlElement context) { TypeDescriptor type = getType(context); if (type instanceof ComplexTypeDescriptor typeDescriptor) { XmlElementDescriptor[] elements = typeDescriptor.getElements(context); if (context instanceof XmlTag && elements.length > 0) { String[] namespaces = ((XmlTag)context).knownNamespaces(); if (namespaces.length > 1) { List<XmlElementDescriptor> result = new ArrayList<>(Arrays.asList(elements)); for (String namespace : namespaces) { if (namespace.equals(typeDescriptor.getNsDescriptor().getDefaultNamespace())) { continue; } XmlNSDescriptor descriptor = ((XmlTag)context).getNSDescriptor(namespace, false); if (descriptor instanceof XmlNSDescriptorImpl && ((XmlNSDescriptorImpl)descriptor).hasSubstitutions()) { for (XmlElementDescriptor element : elements) { String name = XmlUtil.getLocalName(element.getName(context)).toString(); String s = ((XmlNSDescriptorImpl)element.getNSDescriptor()).getDefaultNamespace(); XmlElementDescriptor[] substitutes = ((XmlNSDescriptorImpl)descriptor).getSubstitutes(name, s); result.addAll(Arrays.asList(substitutes)); } } } return result.toArray(XmlElementDescriptor.EMPTY_ARRAY); } } return elements; } return EMPTY_ARRAY; }