[ADOS] ADOS Developer's Site - XML Stadium
ADOS Company slogan - XML Total Solution

 RIGHT:[[目次>Hestia Hacks]]|[[前>XMLファイルを入力してServiceContentに変換し、送信]]|[[次>CSVファイルを入力してServiceContentに変換し、送信]]
 #freeze
 RIGHT:[[目次>Hestia Hacks#SDKDevDuide]]|[[前>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により逐一出力しています。
 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();

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

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