33
44namespace Soap \WsdlReader \Metadata \Converter \Types \Configurator ;
55
6+ use GoetasWebservices \XML \XSDReader \Schema \Attribute \AttributeItem ;
7+ use GoetasWebservices \XML \XSDReader \Schema \Element \ElementItem ;
68use GoetasWebservices \XML \XSDReader \Schema \Item ;
79use GoetasWebservices \XML \XSDReader \Schema \SchemaItem ;
810use GoetasWebservices \XML \XSDReader \Schema \Type \Type ;
911use Soap \Engine \Metadata \Model \XsdType as EngineType ;
12+ use Soap \WsdlReader \Metadata \Converter \Types \Detector \AttributeTypeNameDetector ;
13+ use Soap \WsdlReader \Metadata \Converter \Types \Detector \ElementTypeNameDetector ;
1014use Soap \WsdlReader \Metadata \Converter \Types \TypesConverterContext ;
1115
1216final class XmlTypeInfoConfigurator
@@ -25,9 +29,16 @@ public function __invoke(EngineType $engineType, mixed $xsdType, TypesConverterC
2529 $ targetNamespace = $ xsdType ->getSchema ()->getTargetNamespace () ?? '' ;
2630 $ typeNamespace = $ type ?->getSchema()->getTargetNamespace () ?: $ targetNamespace ;
2731
32+ $ parentContext = $ context ->parent ()->unwrapOr (null );
33+ $ xmlTypeName = match (true ) {
34+ $ parentContext && $ item instanceof ElementItem => (new ElementTypeNameDetector ())($ item , $ parentContext ),
35+ $ parentContext && $ item instanceof AttributeItem => (new AttributeTypeNameDetector ())($ item , $ parentContext ),
36+ default => $ typeName ,
37+ };
38+
2839 return $ engineType
2940 ->withXmlTargetNodeName ($ itemName ?: $ typeName )
30- ->withXmlTypeName ($ typeName ?: $ itemName ?: '' )
41+ ->withXmlTypeName ($ xmlTypeName )
3142 ->withXmlNamespace ($ typeNamespace )
3243 ->withXmlNamespaceName (
3344 $ context ->knownNamespaces ->lookupNameFromNamespace ($ typeNamespace )->unwrapOr (
0 commit comments