1. 程式人生 > >Mule ESB java元件兩種寫法

Mule ESB java元件兩種寫法


先說1. 
說到底就是一個訊息的轉換功能, 就是獲取到http請求過來的訊息(payload), 然後將其轉換為自己後續需要的格式的資料形態。 
Java程式碼  收藏程式碼
  1. import java.io.ByteArrayOutputStream;  
  2. import java.io.IOException;  
  3. import java.io.InputStream;  
  4. import java.util.HashMap;  
  5. import java.util.Map;  
  6. import javax.activation.DataHandler;  
  7. import org.mule.api.MuleEventContext;  
  8. import org.mule.api.MuleMessage;  
  9. import org.mule.api.lifecycle.Callable;  
  10. public class Transformer implements Callable  {  
  11.     @Override  
  12.     public Object onCall(MuleEventContext eventContext) throws Exception {  
  13.         // TODO Auto-generated method stub  
  14.         MuleMessage message  = eventContext.getMessage();  
  15.         //message.getPayload()得到的是通過Httpclient-MultipartEntity傳過來的二進位制流  
  16.         System.out.println(message.getPayload());  
  17.         InputStream in = (InputStream) message.getPayload();  
  18.         ByteArrayOutputStream bstream = new ByteArrayOutputStream();    
  19.         byte[] buff = new byte[100];    
  20.         int
     rc = 0;  
  21.         try {  
  22.             while ((rc = in.read(buff, 0100)) > 0) {    
  23.                 bstream.write(buff, 0, rc);    
  24.             }  
  25.         } catch (IOException e) {  
  26.             e.printStackTrace();  
  27.         }    
  28.         byte[] bytes = bstream.toByteArray();    
  29.         System.out.println("-------------------------111--" + bytes);  
  30.         //httpClient addPart傳過來的StringBody  
  31.         System.out.println(message.getInboundAttachmentNames());  
  32.         DataHandler h1 = message.getInboundAttachment("serviceId");  
  33.         DataHandler h2 =  message.getInboundAttachment("fileName");  
  34.         System.out.println("------------------------------------");  
  35.         Map map = new HashMap();  
  36.         map.put("serviceId", h1.getContent().toString());  
  37.         map.put("fileName", h2.getContent().toString());  
  38.         map.put("payload", bytes);  
  39.         return map;  
  40.     }  
  41. }  


將http post過來的兩個字串引數 和 一個檔案byte流 轉換為 map形式, 目的是因為http傳過來的是 multipart/form-data , 而後面的框架程式碼要同時相容application/x-www-form-urlencoded , 所以統一進行轉換 

實現Callable 介面, 取得MuleEventContext上下文,進而獲取MuleMessage。 
其中getPayload()得到了 inputstream , 獲取檔案位元組陣列, 通過getInboundAttachment("serviceId") 獲取到StringBody、 
直接返回訊息例項 


2. component 
目的是改變訊息set到MuleEvent ,返回event 

Java程式碼  收藏程式碼
  1. import java.io.ByteArrayOutputStream;  
  2. import java.io.IOException;  
  3. import java.io.InputStream;  
  4. import java.util.HashMap;  
  5. import java.util.Map;  
  6. import javax.activation.DataHandler;  
  7. import org.mule.api.MuleEvent;  
  8. import org.mule.api.MuleException;  
  9. import org.mule.api.MuleMessage;  
  10. import org.mule.api.processor.MessageProcessor;  
  11. public class MutipartTransformer implements MessageProcessor  {  
  12.     @Override  
  13.     public MuleEvent process(MuleEvent event) throws MuleException {  
  14.         MuleMessage mulemessage = event.getMessage();  
  15.         InputStream in = (InputStream) mulemessage.getPayload();  
  16.         ByteArrayOutputStream bstream = new ByteArrayOutputStream();    
  17.         byte[] buff = new byte[100];    
  18.         int rc = 0;  
  19.         try {  
  20.             while ((rc = in.read(buff, 0100)) > 0) {    
  21.                 bstream.write(buff, 0, rc);    
  22.             }  
  23.         } catch (IOException e) {  
  24.             e.printStackTrace();  
  25.         }    
  26.         byte[] bytes = bstream.toByteArray();    
  27.         System.out.println(mulemessage.getInboundAttachmentNames());  
  28.         DataHandler h1 = mulemessage.getInboundAttachment("serviceId");  
  29.         DataHandler h2 =  mulemessage.getInboundAttachment("fileName");  
  30.         try {  
  31.             System.out.println(h1.getContent().toString());  
  32.         } catch (IOException e) {  
  33.             e.printStackTrace();  
  34.         }  
  35.         try {  
  36.             System.out.println(h2.getContent().toString());  
  37.         } catch (IOException e) {  
  38.             // TODO Auto-generated catch block  
  39.             e.printStackTrace();  
  40.         }  
  41.         System.out.println("bbbbbbbbbbbbbbbbbbbbbbbbb    ");  
  42.         Map map = new HashMap();  
  43.         map.put("serviceId", h1);  
  44.         map.put("fileName", h2);  
  45.         map.put("payload", bytes);  
  46.         event.setMessage(mulemessage);  
  47.         return event;  
  48.     }  
  49. }