![]() |
ADOS Developer's Site - XML Stadium |
![]() |
![]() |
|
![]() |
【CSVファイルを入力してServiceContentに変換し、送信】目次 概要 †CSV(Comma Separated Values)は、レガシーシステムのデータ入出力によく使用されるフォーマットです。CSVを入力して、送信するServiceContentに変換する方法を解説します。 【PIPSenderCSV.java】 1 : import java.io.File; 2 : import java.io.FileInputStream; 3 : import java.io.FileReader; 4 : import java.util.Date; 5 : import java.util.Properties; 6 : 7 : import com.ados.hestia.mapping.Translator; 8 : import com.ados.hestia.mapping.TranslatorFactory; 9 : import com.ados.hestia.parser.rnbm.access.Validator; 10 : import com.ados.hestia.parser.rnbm.exchange.Container; 11 : import com.ados.hestia.parser.rnbm.exchange.PayloadContainer; 12 : import com.ados.hestia.parser.rnbm.exchange.StatusContainer; 13 : import com.ados.hestia.parser.rnbm.particle.ServiceContent; 14 : import com.ados.hestia.repository.MapRuleStore; 15 : import com.ados.hestia.repository.Mapping; 16 : import com.ados.hestia.sdk.Configuration; 17 : import com.ados.hestia.sdk.Connection; 18 : import com.ados.hestia.sdk.message.DirectMessageExchanger; 19 : import com.ados.hestia.sdk.session.InitiationSession; 20 : import com.ados.hestia.sdk.session.Session; 21 : import com.ados.hestia.utils.UID; 22 : import com.ados.hestia.utils.csv.Parser; 23 : import com.ados.hestia.utils.csv.ParserImpl; 24 : import com.ados.hestia.utils.csv.RecordSet; 25 : 26 : public class PIPSenderCSV { 27 : 28 : public static void main(String[] args) { 29 : try { 30 : String mapid = args[0]; 31 : String csv = args[1]; 32 : 33 : Properties prop = new Properties(); 34 : prop.load(new FileInputStream("sample.properties")); 35 : String HOST = prop.getProperty("HOST"); 36 : String USER = prop.getProperty("USER"); 37 : String PASS = prop.getProperty("PASS"); 38 : String HANDLER_ID = prop.getProperty("HANDLER_ID"); 39 : 40 : Connection connection = new Connection(HOST, USER, PASS, 41 : Connection.EXCHANGE_MODE_DIRECT, null, null, null, 42 : HANDLER_ID); 43 : DirectMessageExchanger exchanger = new DirectMessageExchanger( 44 : connection, Configuration.getInstance()); 45 : 46 : MapRuleStore store = new MapRuleStore(System.getProperty("user.dir") 47 : + File.separator, "mapRule"); 48 : SampleUtils.println("Mapping :" + store.size()); 49 : Mapping mapping = store.getMapping(mapid); 50 : store.fillMappingBaseDir(mapping); 51 : SampleUtils.println("Mapping :" + mapping.toString()); 52 : Parser parser = new ParserImpl(); 53 : RecordSet record = parser.parse(new FileReader(csv), ',', '\'', true); 54 : TranslatorFactory factory = new TranslatorFactory(); 55 : Translator translator = factory.newTranslator(mapping); 56 : translator.setTargetDocument(record); 57 : translator.translate(); 58 : ServiceContent sc = translator.getResultAsServiceContent(); 59 : 60 : Session session = new InitiationSession(new PayloadContainer( 61 : new Date(), sc.getFromRole() 62 : .getGlobalBusinessIdentifierNorm(), sc.getToRole() 63 : .getGlobalBusinessIdentifierNorm(), (new UID()) 64 : .toString(), sc, null)); 65 : SampleUtils.printSessionState("created", session); 66 : PayloadContainer request = session.getMessageToSend(); 67 : SampleUtils.printSessionState("got", session); 68 : SampleUtils.printContainerInformation(request); 69 : SampleUtils.printServiceContent(request.getServiceContent()); 70 : new Validator(request.getServiceContent().getElement()).validate(); 71 : exchanger.sendMessage(request); 72 : SampleUtils.printSessionState("sent", session); 73 : 74 : int time = 0; 75 : boolean loop = true; 76 : while (loop) { 77 : Thread.sleep(5000); 78 : exchanger.hit(); 79 : SampleUtils.printSessionState("loop=" + time++, session); 80 : 81 : Container container = exchanger.receiveMessage(); 82 : if (container != null) { 83 : SampleUtils.printContainerInformation(container); 84 : session.pushStatus((StatusContainer) container); 85 : SampleUtils.printSessionState("pushed", session); 86 : loop = false; 87 : } 88 : } 89 : 90 : } catch (Exception e) { 91 : e.printStackTrace(); 92 : } 93 : } 94 : 95 : } Mappingの取得 †XMLからServiceContentへの変換と同様、CSVからServiceContentへの変換にもXSLTファイルおよびMappingの仕組みを使用します。Mappingの取得方法は通常と同じです。 46 : MapRuleStore store = new MapRuleStore(System.getProperty("user.dir") 47 : + File.separator, "mapRule"); 49 : Mapping mapping = store.getMapping(mapid); 50 : store.fillMappingBaseDir(mapping); なお、CSVは以下のようなXML形式に置き換えられ、読み込まれます。XSLTは、XML to ServiceContentとして変換処理を定義します。 【CSVの例】
【CSVに相当するXMLのイメージ】 <csv> <row> <AAA>a1</AAA> <BBB>b1</BBB> <CCC>c1</CCC> </row> <row> <AAA>a2</AAA> <BBB>b2</BBB> <CCC>c2</CCC> </row> ・・・ </csv> CSVの読み込み †CSVを読み込みます。カンマ以外のセパレータを指定することもできます。読み込まれたCSVはRecordSetにより扱えます。 52 : Parser parser = new ParserImpl(); 53 : RecordSet record = parser.parse(new FileReader(csv), ',', '\'', true);
変換とServiceContentの取得 †CSVをServiceContentへ変換します。まず、変換を行うTranslatorをTranslatorFactoryから生成します。TranslatorにはMappingが設定されます。 54 : TranslatorFactory factory = new TranslatorFactory(); 55 : Translator translator = factory.newTranslator(mapping); 変換されるRecordSetを入力します。 56 : translator.setTargetDocument(record); XSLT変換を実行します。 57 : translator.translate(); 変換結果のServiceContentを取得します。 58 : ServiceContent sc = translator.getResultAsServiceContent(); ServiceContentの生成後は、通常の処理によりHestiaへ送信します。ただし、ServiceContentの生成後に、 ServiceContent#setElementValue等のメソッドにより値を上書きすることもできます。 |
Copyright 2005-2008. ADOS Co., Ltd. All Rights Reserved. |