2016-07-19 42 views
0

Derzeit arbeite ich an einem Flow mit MULE, ich brauche einige Informationen mit einer Java-Klasse, um einige Validierungen, Transformationen und dann eine gespeicherte Prozedur in einer Oracle-Datenbank aufzurufen, ich brauche die Informationen in <type:Data> gespeichert bekomme, ist dies die Strömung:Zugriff auf Payload mit JAVA (MULE)

<flow name="INSERT"> 
    <http:listener config-ref="CONFIG_1" path="/afis/afisInsert" allowedMethods="POST" doc:name="HTTP"/> 
    <cxf:proxy-service port="InsertDATA" namespace="http://www.morpho.com/SIIMInterface/" service="InsertService" payload="envelope" wsdlLocation="AFISINSERT.wsdl" doc:name="CXF" configuration-ref="CXF_Configuration"/> 
    <component class="Transform" doc:name="Java"/> 
    <logger message="String message : #[payload]" level="INFO" doc:name="Logger"/>  
</flow> 

im eine POST-Anfrage mit folgenden Struktur zu senden:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:type="http://XXX/ZZ/WWW/YYY/"> <soapenv:Header/> <soapenv:Body> <input> <type:Data> <type:id>1</type:id> <type:sampleType>?</type:sampleType> <!--Optional:--> <type:tenprint> <type:width>600</type:width> <type:height>800</type:height> <type:format>S</type:format> </type:tenprint> </type:Data> <type:PersonID>123</type:PersonID> <type:Priority>3</type:Priority> </input> <soapenv:Body> </soapenv:Envelope>

Meine Java-Klasse hier:

Erstellen von Mule-Variablen Ich kann mit XPATH auf die Knoten des xml zugreifen, im Protokoll wird die XML-Anforderung korrekt gedruckt. Ich habe viele Dinge ausprobiert, aber ich kann nicht richtig auf die Nutzinformationen zugreifen. Wie kann ich die Informationen mit Code JAVA in der Payload speichern?

Antwort

1

Sie können eine von zwei Optionen wählen, um die in gespeicherten Informationen aus Java-Code zu erhalten.

  1. die POST-Daten in ein XML-Dokument innerhalb des Java-Code analysiert:

    public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException { 
        BufferInputStream payload = (BufferInputStream) message.getPayload(); 
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
        Document doc = dBuilder.parse(payload); 
    
        String typeData = doc.getDocumentElement().getElementsByTagName("type:Data").item(0).getTextContent(); 
    
  2. Verwenden XPATH die erforderlichen Daten, speichern sie in einer Variablen zu extrahieren, und dann in dem Java-Code vorgehen:

    public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException { 
        String typeData = message.getInvocationProperty("variableName"); 
    
+0

es funktioniert, thank u viel so! – JuanS