- 追加された行はこの色です。
- 削除された行はこの色です。
RIGHT:[[目次>Hestia Hacks]]|[[前>JMSによるHestiaとの接続]]|[[次>受信したServiceContentをXMLファイルに出力]]
目次
#contents
*概要 [#f6285f9d]
XML形式でServiceContentそのものを入力して送信する方法について解説します。
サンプルプログラム全体を以下に示します。
【PIPSenderXML.java】
1 : import java.io.BufferedReader;
2 : import java.io.File;
3 : import java.io.FileInputStream;
4 : import java.io.FileReader;
5 : import java.io.Reader;
6 : import java.util.Date;
7 : import java.util.Properties;
8 :
9 : import com.ados.hestia.parser.rnbm.exchange.Container;
10 : import com.ados.hestia.parser.rnbm.exchange.PayloadContainer;
11 : import com.ados.hestia.parser.rnbm.exchange.StatusContainer;
12 : import com.ados.hestia.parser.rnbm.particle.ServiceContent;
13 : import com.ados.hestia.sdk.Configuration;
14 : import com.ados.hestia.sdk.Connection;
15 : import com.ados.hestia.sdk.message.DirectMessageExchanger;
16 : import com.ados.hestia.sdk.rnbm.access.XMLBuilder;
17 : import com.ados.hestia.sdk.session.InitiationSession;
18 : import com.ados.hestia.sdk.session.Session;
19 : import com.ados.hestia.utils.UID;
20 :
21 : public class PIPSenderXML {
22 :
23 : public static void main(String[] args) {
24 : try {
25 : String filename = args[0];
26 : String pip = args[1];
27 : String pipver = args[2];
28 :
29 : Properties prop = new Properties();
30 : prop.load(new FileInputStream("sample.properties"));
31 : String HOST = prop.getProperty("HOST");
32 : String USER = prop.getProperty("USER");
33 : String PASS = prop.getProperty("PASS");
34 : String HANDLER_ID = prop.getProperty("HANDLER_ID");
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 : Reader reader = new BufferedReader(new FileReader(
43 : new File(filename)));
44 : XMLBuilder builder = new XMLBuilder(reader, pip, pipver, true);
45 : ServiceContent sc = builder.build();
46 :
47 : Session session = new InitiationSession(new PayloadContainer(
48 : new Date(), sc.getFromRole()
49 : .getGlobalBusinessIdentifierNorm(), sc.getToRole()
50 : .getGlobalBusinessIdentifierNorm(), (new UID())
51 : .toString(), sc, null));
52 : SampleUtils.printSessionState("created", session);
53 : PayloadContainer request = session.getMessageToSend();
54 : SampleUtils.printSessionState("got", session);
55 : SampleUtils.printContainerInformation(request);
56 : SampleUtils.printServiceContent(request.getServiceContent());
57 : exchanger.sendMessage(request);
58 : SampleUtils.printSessionState("sent", session);
59 :
60 : int time = 0;
61 : boolean loop = true;
62 : while (loop) {
63 : Thread.sleep(5000);
64 : exchanger.hit();
65 : SampleUtils.printSessionState("loop=" + time++, session);
66 :
67 : Container container = exchanger.receiveMessage();
68 : if (container != null) {
69 : SampleUtils.printContainerInformation(container);
70 : session.pushStatus((StatusContainer) container);
71 : SampleUtils.printSessionState("pushed", session);
72 : loop = false;
73 : }
74 : }
75 :
76 : } catch (Exception e) {
77 : e.printStackTrace();
78 : }
79 : }
80 :
81 : }
XMLBuilderによりReaderを介してServiceContentのXMLを読み込み、ServiceContentオブジェクトを生成します。したがって、Readerによりファイルだけでなく任意のソースからXMLを入力できます。
*XMLファイルの読み込みとServiceContentの生成 [#j0086178]
Reader reader = new BufferedReader(new FileReader(new File(filename)));
XMLBuilder builder = new XMLBuilder(reader, args[1], args[2], true);
ServiceContent sc = builder.build();
XMLBuilderによりReaderを介してXMLを読み込み、ServiceContentオブジェクトを生成します。このXMLは、PIPのServiceContentそのものである必要があります。
42 : Reader reader = new BufferedReader(new FileReader(
43 : new File(filename)));
44 : XMLBuilder builder = new XMLBuilder(reader, pip, pipver, true);
45 : ServiceContent sc = builder.build();
XMLBuilderにはReaderを入力するため、ファイルだけでなく、Readerを実装した任意のソースからXMLを入力できます。
|関連クラス|機能|h
|com.ados.hestia.sdk.rnbm.access.XMLBuilder|XMLからServiceContentを出力するクラス。|
ServiceContentの生成後は、通常の処理によりHestiaへ送信します。ただし、DUNS等の値を、XMLに既に記述されたものを参照するか、EISで改めて動的に指定するか、検討の余地があります。ServiceContentには、ServiceContent#setElementValue等のメソッドにより値を上書きすることもできます。
ここのサンプルでは、XMLに記述されているDUNSをそのまま利用しています。
47 : Session session = new InitiationSession(new PayloadContainer(
48 : new Date(), sc.getFromRole()
49 : .getGlobalBusinessIdentifierNorm(), sc.getToRole()
50 : .getGlobalBusinessIdentifierNorm(), (new UID())
51 : .toString(), sc, null));