Spring Bean Factory XML — Dasel v3 Abfragemuster
<when_to_use>
Laden Sie dieses Skill, wenn Sie eine Spring-Bean-XML-Datei abfragen — applicationContext.xml, *_beans.xml, spring-context.xml oder eine andere Spring ApplicationContext-XML — für Bean-Erkennung, Abhängigkeitsanalyse, JMS-Verdrahtung, Property-Injection-Prüfung oder referenzübergreifendes Bean-Tracing.
</when_to_use>
Dasel v3-Selektormuster für Spring-Bean-Factory-XML. Immer explizit -i xml übergeben.
Attribut-Präfix-Regel: Der freundliche Modus von Dasel (Standard) stellt XML-Attributen ein - voran. Das id-Attribut wird zu -id, class zu -class. Textinhalt ist #text.
Bean-Erkennung
# Alle Bean-IDs
cat chaosrouter_beans.xml | dasel -i xml 'beans.bean.filter(has("-id")).map("-id")'
# Alle Bean-Klassen
cat chaosrouter_beans.xml | dasel -i xml 'beans.bean.filter(has("-class")).map("-class")'
# -class über jede Bean mappen (auch Beans ohne -id)
cat chaosrouter_beans.xml | dasel -i xml 'beans.bean.map("-class")'
Klassenmustervergleich
Filtern von Beans nach Klassennamen mittels Regex auf -class.
# Beans, deren Klasse JmsTemplate enthält
cat chaosrouter_beans.xml | dasel -i xml 'beans.bean.filter(-class ~ ".*JmsTemplate.*").map("-id")'
# Anzahl der Beans, die einem Klassenmuster entsprechen
cat beans.xml | dasel -i xml 'len(beans.bean.filter(-class ~ ".*Jms.*"))'
Abhängigkeitsanalyse
Finden von Beans, die andere Beans über das -ref-Attribut in property-Kind-Elementen referenzieren.
Muster: parentCollection.filter(childElement.filter(bedingung).len($this) > 0) — filtert das übergeordnete Element, indem geprüft wird, ob ein passendes Kindelement existiert (Länge > 0).
# Beans, die eine bestimmte Bean-ID über das ref-Attribut referenzieren
cat chaosrouter_beans.xml | dasel -i xml 'beans.bean.filter(property.filter(-ref == "targetBeanId").len($this) > 0).map("-id")'
JMS-Zielzuordnung
Finden, welche Beans welche JMS-Ziele über property-Kind-Elemente konsumieren.
# Beans, die an eine bestimmte Zieleigenschaft gebunden sind
cat integrationpoint_beans.xml | dasel -i xml 'beans.bean.filter(property.filter(-name == "destination").len($this) > 0).map("-id")'
Property-Injection-Extraktion
Extrahieren externalisierter ${...}-Platzhalterwerte aus Bean-Definitionen.
# Alle Property-Werte mit ${...}-Platzhaltern
cat storage_beans.xml | dasel -i xml 'beans.bean.property.filter(-value ~ ".*\\$\\{.*\\}.*").map("-value")'
Attribut- und Textinhaltszugriff
# <bean id="myBean" class="com.example.Foo">some text</bean>
cat beans.xml | dasel -i xml 'beans.bean[0].-id' # myBean
cat beans.xml | dasel -i xml 'beans.bean[0].-class' # com.example.Foo
cat beans.xml | dasel -i xml 'beans.bean[0].#text' # some text
# Alle Schlüssel (Attribute + Kindelemente) auf der ersten Bean entdecken
cat beans.xml | dasel -i xml 'beans.bean[0].keys($this)'
Namespace-Handhabung
Der freundliche Modus entfernt Namespace-Präfixe von Elementnamen — funktioniert für die meisten Spring-Abfragen.
Wenn Namespace-Präfixe zu Selektionsfehlern führen (Element trotz Existenz nicht gefunden), wechseln Sie in den strukturierten Modus:
cat spring-context.xml | dasel -i xml --read-flag xml-mode=structured 'beans.bean[0]'
Dateiübergreifende Analyse
Zwischenergebnisse in /tmp/ schreiben — niemals im Quellverzeichnis.
# Bean-IDs aus mehreren Dateien extrahieren, vergleichen
cat chaosrouter_beans.xml | dasel -i xml 'beans.bean.filter(has("-id")).map("-id")' > /tmp/chaosrouter_beans.txt
cat integrationpoint_beans.xml | dasel -i xml 'beans.bean.filter(has("-id")).map("-id")' > /tmp/integration_beans.txt
diff /tmp/chaosrouter_beans.txt /tmp/integration_beans.txt