2016-07-19 7 views
0

Ich verwende Spring Integration in meinem Projekt. Ich habe folgende Nutzlast.Wie kann ich Payload speichern und später an eine andere Payload anhängen?

<?xml version="1.0" encoding="UTF-8"?> 
<PQ> 
    <PQContact> 
     <hostAddress>10.193.244.136</hostAddress> 
    </PQContact> 
    <workflowStatusComment> 
     <comment>I am here</comment> 
    </workflowStatusComment> 
</PQ> 

Ich möchte den Tag extrahieren <workflowStatusComment> d.h workflowStatusComment <comment>I am here</comment></workflowStatusComment> und für zukünftige Zwecke speichern. Ich möchte keinen Java-Code verwenden, um die gespeicherten Tag-Informationen in Zukunft zu verwenden. Ich möchte die gespeicherten Informationen zu einer anderen Nutzlast am Ende der Ausführung hinzufügen. Ich weiß über Header-Anreicher, aber ich weiß nicht, wie die gespeicherten Header angereicherte Werte ohne Java zu verwenden. Ich muss Spring-Integration-Komponenten nur verwenden, um die Nutzlast zu manipulieren.

Die zweite Nutzlast, auf die ich die gespeicherte Taginfo anhängen werde hier:

<?xml version="1.0" encoding="UTF-8"?> 
<PQ> 
    <PQContact> 
     <hostAddress>10.193.244.136</hostAddress> 
     <name>Ashok</name> 
     <userId>007</userId> 
    </PQContact> 
</PQ> 

Nachdem die gespeicherte Taginfo der obigen Nutzlast anhängt, sollte meine letzte Nutzlast aussehen wie die anfängliche Nutzlast mit einigen Zusatzinformation. Etwas wie unten:

<?xml version="1.0" encoding="UTF-8"?> 
<PQ> 
    <PQContact> 
     <hostAddress>10.193.244.136</hostAddress> 
     <name>Ashok</name> 
     <userId>007</userId> 
    </PQContact> 
    <workflowStatusComment> 
     <comment>I am here</comment> 
    </workflowStatusComment> 
</PQ> 

gibt es einen Weg?

Antwort

1

Sie können diese Informationen aus dem XML mit <int-xml:xpath-transformer> oder #xpath() SpEL-Funktion extrahieren.

Aber Sie müssen uns mitteilen, was Ihre "andere Nutzlast" ist und wie Sie diese extrahieren möchten.

Vielleicht ist es noch besser, eine Lösung mit Java zu haben und dann betrachten wir hier, wie man es in Spring Integration XML DSL oder ähnliches umwandeln kann.

Bitte überarbeiten Sie Ihre Frage, um sie klarer zu machen.

UPDATE

ein XML in eine andere einzufügen Sie ein wenig javax.xml API zu kämpfen haben.

etwas wie folgt Der Code könnte sein:

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 

Document target = builder.parse(new StringBufferInputStream(targetXML)); 
Element source = builder.parse(new StringBufferInputStream(sourceXML)).getDocumentElement(); 


target.appendChild(source); 

UPDATE 2

Aber ich will keine Java-Code verwenden.

Nun, wenn Ihr Ziel XML als Vorlage Zeichenfolge darstellen können Sie Standard-replaceFirst() im <transformer> mit expression verwenden:

String targetXml = "";

<transformer expression="'<?xml version="1.0" encoding="UTF-8"?> 
<PQ> 
    <PQContact> 
     <hostAddress>10.193.244.136</hostAddress> 
     <name>Ashok</name> 
     <userId>007</userId> 
    </PQContact> 
    $workflowStatusCommentToken$ 
</PQ>'.replaceFirst('\\$workflowStatusCommentToken\\$', headers.originalXml)"/> 
+0

Danke für die Antwort. Ich habe die Frage bearbeitet. Bitte schau es dir jetzt an. –

+0

Ich habe die Frage bearbeitet. Könnten Sie bitte die Lösung bereitstellen, wenn sie existiert? –

+0

Siehe ein UPDATE in meiner Antwort. –