![]() |
ADOS Developer's Site - XML Stadium |
![]() |
![]() |
|
![]() |
【受信したServiceContentをXMLファイルに変換し、出力】目次 概要 †受信したServiceContentをXSLT変換する方法について解説します。 サンプルプログラム全体を以下に示します。 【PIPReceiverStoredMap.java】 1 : import java.io.File; 2 : import java.io.FileInputStream; 3 : import java.io.FileWriter; 4 : import java.io.Reader; 5 : import java.io.Writer; 6 : import java.util.Iterator; 7 : import java.util.Properties; 8 : 9 : import com.ados.hestia.mapping.Translator; 10 : import com.ados.hestia.mapping.TranslatorFactory; 11 : import com.ados.hestia.parser.rnbm.exchange.Container; 12 : import com.ados.hestia.parser.rnbm.exchange.PayloadContainer; 13 : import com.ados.hestia.parser.rnbm.exchange.StatusContainer; 14 : import com.ados.hestia.parser.rnbm.particle.ServiceContent; 15 : import com.ados.hestia.repository.MapRuleStore; 16 : import com.ados.hestia.repository.Mapping; 17 : import com.ados.hestia.sdk.Configuration; 18 : import com.ados.hestia.sdk.Connection; 19 : import com.ados.hestia.sdk.message.DirectMessageExchanger; 20 : import com.ados.hestia.sdk.session.RespondSession; 21 : import com.ados.hestia.sdk.session.Session; 22 : 23 : public class PIPReceiverStoredMap { 24 : 25 : public static void main(String[] args) { 26 : try { 27 : Properties prop = new Properties(); 28 : prop.load(new FileInputStream("sample.properties")); 29 : String HOST = prop.getProperty("HOST"); 30 : String USER = prop.getProperty("USER"); 31 : String PASS = prop.getProperty("PASS"); 32 : String HANDLER_ID = prop.getProperty("HANDLER_ID"); 33 : String DIR = System.getProperty("user.dir") + File.separator 34 : + "output" + File.separator + "xsl"; 35 : 36 : Connection connection = new Connection(HOST, USER, PASS, 37 : Connection.EXCHANGE_MODE_DIRECT, null, null, null, 38 : HANDLER_ID); 39 : DirectMessageExchanger exchanger = new DirectMessageExchanger( 40 : connection, Configuration.getInstance()); 41 : 42 : MapRuleStore store = new MapRuleStore(System 43 : .getProperty("user.dir") 44 : + File.separator, "mapRule"); 45 : SampleUtils.println("Mapping :" + store.size()); 46 : 47 : new File(DIR).mkdirs(); 48 : int time = 0; 49 : boolean loop = true; 50 : while (loop) { 51 : Thread.sleep(5000); 52 : SampleUtils.println("loop : " + time++); 53 : exchanger.hit(); 54 : 55 : Container container = exchanger.receiveMessage(); 56 : if (container != null) { 57 : SampleUtils.printContainerInformation(container); 58 : PayloadContainer request = (PayloadContainer) container; 59 : ServiceContent sc = request.getServiceContent(); 60 : SampleUtils.printServiceContent(sc); 61 : Session session = new RespondSession(request 62 : .getRemotePartner(), request.getPIPID()); 63 : SampleUtils.printSessionState("created", session); 64 : session.pushMessage(request); 65 : SampleUtils.printSessionState("pushed", session); 66 : session.acceptPartnerMessage(); 67 : SampleUtils.printSessionState("accepted", session); 68 : StatusContainer status = session.getStatusToSend(); 69 : SampleUtils.printSessionState("sent status", session); 70 : SampleUtils.printContainerInformation(status); 71 : exchanger.sendMessage(status); 72 : exchanger.hit(); 73 : 74 : Mapping mapping = null; 75 : Iterator iter = store.getRuleIDs().iterator(); 76 : while (iter.hasNext()) { 77 : String mapid = (String) iter.next(); 78 : mapping = store.getMapping(mapid); 79 : if (mapping.getPipId().equals(sc.getPIPID()) 80 : && mapping.getPipVersion().equals( 81 : sc.getFullVersion()) 82 : && mapping.getDirection().equals( 83 : Mapping.RNBM2RNBM)) { 84 : store.fillMappingBaseDir(mapping); 85 : SampleUtils.println(mapid); 86 : break; 87 : } 88 : } 89 : TranslatorFactory factory = new TranslatorFactory(); 90 : Translator translator = factory.newTranslator(mapping); 91 : translator.setTargetDocument(sc); 92 : translator.translate(); 93 : Reader reader = translator.getResultReader(); 94 : 95 : String filename = DIR 96 : + File.separator 97 : + sc.getPIPID() 98 : + "_" 99 : + sc.getVersion() 100 : + "_" 101 : + sc.getFromRole() 102 : .getGlobalBusinessIdentifierNorm() 103 : + "_" 104 : + sc.getDocumentGenerationDateTime() 105 : .getRNDateTime() + "_" 106 : + sc.getDocumentIdentifier() + ".xml"; 107 : Writer writer = new FileWriter(filename); 108 : int c; 109 : while ((c = reader.read()) != -1) { 110 : writer.write(c); 111 : } 112 : reader.close(); 113 : writer.close(); 114 : 115 : loop = false; 116 : } 117 : } 118 : 119 : } catch (Exception e) { 120 : e.printStackTrace(); 121 : } 122 : } 123 : 124 : } Mappingの選択 †MapRuleStoreに登録されているMappingを選択します。Mappingが複数ある場合、受信したServiceContentに対して、どのMappingを使用するか選択する必要があります。 74 : Mapping mapping = null; 75 : Iterator iter = store.getRuleIDs().iterator(); 76 : while (iter.hasNext()) { 77 : String mapid = (String) iter.next(); 78 : mapping = store.getMapping(mapid); 79 : if (mapping.getPipId().equals(sc.getPIPID()) 80 : && mapping.getPipVersion().equals( 81 : sc.getFullVersion()) 82 : && mapping.getDirection().equals( 83 : Mapping.RNBM2RNBM)) { 84 : store.fillMappingBaseDir(mapping); 85 : ・・・ 86 : break; 87 : } 88 : } 選択基準は任意ですが、このサンプルでは以下の表のような値を基準にMappingを選択しています。
XSLT変換の実行 †TranslatorをTranslatorFactoryから生成します。TranslatorにはMappingが設定されます。 89 : TranslatorFactory factory = new TranslatorFactory(); 90 : Translator translator = factory.newTranslator(mapping); 変換されるServiceContentを入力します。 91 : translator.setTargetDocument(sc); XSLT変換を実行します。 92 : translator.translate(); 結果のXMLの出力 †変換結果をReader形式で取得します。 93 : Reader reader = translator.getResultReader(); Readerから変換結果を読み込みます。このサンプルでは、Readerにより文字を読み込み、Writerにより逐一出力しています。 107 : Writer writer = new FileWriter(filename); 108 : int c; 109 : while ((c = reader.read()) != -1) { 110 : writer.write(c); 111 : } 112 : reader.close(); 113 : writer.close(); |
Copyright 2005-2008. ADOS Co., Ltd. All Rights Reserved. |