2016-07-19 3 views
0

В настоящее время я работаю над потоком с использованием MULE, мне нужно получить некоторую информацию с помощью класса java, чтобы выполнить некоторые проверки, преобразования, а затем вызвать хранимую процедуру в базе данных Oracle, Мне нужно получить информацию, хранящуюся в <type:Data>, это поток:Доступ к полезной нагрузке с использованием 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 отправив запрос POST со следующей структурой:

<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>

Мой класс Java здесь:

public class CLASE extends AbstractMessageTransformer{ 

public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException { 

String mensajeString = new String();  
    try { 
     return message.getPayloadAsString(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Создание переменных Mule Я могу получить доступ к узлам xml с использованием XPATH, в журнале, запрос xml будет правильно напечатан. Я пробовал много вещей, но я не могу правильно получить информацию о полезной нагрузке. Как я могу получить информацию, хранящуюся в полезной нагрузке, используя код JAVA?

ответ

1

Вы можете выбрать один из двух вариантов, чтобы получить информацию, хранящуюся в <type:Data>, из кода Java.

  1. разбирает данные POST в документ XML внутри кода Java:

    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. Использование XPATH для извлечения необходимых данных, хранить его в переменной, а затем продолжить в коде Java:

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

это работает, спасибо и так, много! – JuanS