in pkg/util/source/inspector_xml.go [38:130]
func (i XMLInspector) Extract(source v1.SourceSpec, meta *Metadata) error {
content := strings.NewReader(source.Content)
decoder := xml.NewDecoder(content)
//nolint: nestif
for {
// Read tokens from the XML document in a stream.
t, _ := decoder.Token()
if t == nil {
break
}
if se, ok := t.(xml.StartElement); ok {
switch se.Name.Local {
//nolint: goconst
case "rest", "restConfiguration":
meta.ExposesHTTPServices = true
meta.RequiredCapabilities.Add(v1.CapabilityRest)
case "openApi":
if dfDep := i.catalog.GetArtifactByScheme("rest-openapi"); dfDep != nil {
meta.AddDependency(dfDep.GetDependencyID())
}
case "circuitBreaker":
meta.RequiredCapabilities.Add(v1.CapabilityCircuitBreaker)
case "json":
dataFormatID := defaultJSONDataFormat
for _, a := range se.Attr {
if a.Name.Local == "library" {
dataFormatID = strings.ToLower(a.Value)
}
}
if dfDep := i.catalog.GetArtifactByDataFormat(dataFormatID); dfDep != nil {
meta.AddDependency(dfDep.GetDependencyID())
}
case language:
for _, a := range se.Attr {
if a.Name.Local == language {
if dependency, ok := i.catalog.GetLanguageDependency(a.Value); ok {
meta.AddDependency(dependency)
}
}
}
case "deadLetterChannel":
for _, a := range se.Attr {
if a.Name.Local == "deadLetterUri" {
_, scheme := i.catalog.DecodeComponent(a.Value)
if dfDep := i.catalog.GetArtifactByScheme(scheme.ID); dfDep != nil {
meta.AddDependency(dfDep.GetDependencyID())
}
if scheme.ID == kamelet {
AddKamelet(meta, a.Value)
}
}
}
case "from", "fromF":
for _, a := range se.Attr {
if a.Name.Local == URI {
meta.FromURIs = append(meta.FromURIs, a.Value)
}
}
case "to", "toD", "toF", "wireTap":
for _, a := range se.Attr {
if a.Name.Local == URI {
meta.ToURIs = append(meta.ToURIs, a.Value)
}
}
case kamelet:
for _, a := range se.Attr {
if a.Name.Local == "name" {
AddKamelet(meta, kamelet+":"+a.Value)
}
}
}
if dependency, ok := i.catalog.GetLanguageDependency(se.Name.Local); ok {
meta.AddDependency(dependency)
}
}
}
if err := i.discoverCapabilities(source, meta); err != nil {
return err
}
if err := i.discoverDependencies(source, meta); err != nil {
return err
}
i.discoverKamelets(meta)
meta.ExposesHTTPServices = meta.ExposesHTTPServices || i.containsHTTPURIs(meta.FromURIs)
meta.PassiveEndpoints = i.hasOnlyPassiveEndpoints(meta.FromURIs)
return nil
}