in pkg/util/source/inspector_xml.go [33:107]
func (i XMLInspector) Extract(source v1.SourceSpec, meta *Metadata) error {
content := strings.NewReader(source.Content)
decoder := xml.NewDecoder(content)
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 {
case "rest", "restConfiguration":
meta.ExposesHTTPServices = true
meta.RequiredCapabilities.Add(v1.CapabilityRest)
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 "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
}