[ADOS] ADOS Developer's Site - XML Stadium
ADOS Company slogan - XML Total Solution
RIGHT:[[目次>Hestia Hacks]]|[[前>XMLファイルを入力してServiceContentに変換し、送信]]|[[次>CSVファイルを入力してServiceContentに変換し、送信]]

目次

#contents

*概要 [#s507fd32]

受信した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の選択 [#qc838d9f]

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を選択しています。

|Mappingのメソッド|取得する値|MapRuleStoreファイルの対応要素|h
|getPipId|PIP名|pipid|
|getPipVersion|PIPバージョン|pipVersion|
|getDirection|変換の方向|direction|

*XSLT変換の実行 [#k2831825]

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の出力 [#ybb7f56d]

変換結果をReader形式で取得します。

 93 :           Reader reader = translator.getResultReader();

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();

トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Copyright 2005-2008. ADOS Co., Ltd. All Rights Reserved.