- 追加された行はこの色です。
- 削除された行はこの色です。
RIGHT:[[目次>Hestia Hacks]]|[[前>受信したServiceContentをCSVファイルに変換し、出力]]|[[次>RJOによるServiceContentの参照]]
#freeze
RIGHT:[[目次>Hestia Hacks#SDKDevDuide]]|[[前>受信したServiceContentをCSVファイルに変換し、出力]]|[[次>RJOによるServiceContentの参照]]
目次
#contents
*概要 [#i4b52331]
PIPメッセージをオブジェクトのまま操作することにより、XMLデータのフォーマット変換や読み込みを省き、処理を高速化することができます。ここではPIPメッセージのオブジェクトであるRossetaNet Java Object(RJO)の利用方法を解説します。
EISにおいてServiceContentを作成する方法について解説します。
サンプルプログラム全体を以下に示します。
【PIPSenderRJO.java】
1 : import java.io.FileInputStream;
2 : import java.util.Date;
3 : import java.util.Properties;
4 :
5 : import com.ados.hestia.parser.rnbm.access.Validator;
6 : import com.ados.hestia.parser.rnbm.exchange.Container;
7 : import com.ados.hestia.parser.rnbm.exchange.PayloadContainer;
8 : import com.ados.hestia.parser.rnbm.exchange.StatusContainer;
9 : import com.ados.hestia.parser.rnbm.model.RootElement;
10 : import com.ados.hestia.parser.rnbm.particle.DateTimeStamp;
11 : import com.ados.hestia.parser.rnbm.particle.ServiceContent;
12 : import com.ados.hestia.parser.rnbm.repository.Repository;
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.session.InitiationSession;
17 : import com.ados.hestia.sdk.session.Session;
18 : import com.ados.hestia.utils.UID;
19 :
20 : public class PIPSenderRJO {
21 :
22 : public static void main(String[] args) {
23 : try {
24 : Properties prop = new Properties();
25 : prop.load(new FileInputStream("sample.properties"));
26 : String HOST = prop.getProperty("HOST");
27 : String USER = prop.getProperty("USER");
28 : String PASS = prop.getProperty("PASS");
29 : String HANDLER_ID = prop.getProperty("HANDLER_ID");
30 : String SENDER = prop.getProperty("SENDER");
31 : String RECEIVER = prop.getProperty("RECEIVER");
32 :
33 : Connection connection = new Connection(HOST, USER, PASS,
34 : Connection.EXCHANGE_MODE_DIRECT, null, null, null,
35 : HANDLER_ID);
36 : DirectMessageExchanger exchanger = new DirectMessageExchanger(
37 : connection, Configuration.getInstance());
38 :
39 : RootElement re = Repository.getDefault().getResolver()
40 : .resolveByVersion("0C1",
41 : "Pip0C1AsynchronousTestNotification", "R01.01.00");
42 : ServiceContent sc = new ServiceContent("0C1", re);
43 : sc.setProduction(true);
44 : sc.setGlobalDocumentFunctionCode("Request");
45 : sc.setDocumentGenerationDateTime(new DateTimeStamp());
46 : sc.setDocumentIdentifier(new UID().toString());
47 : sc.setElementValue(
48 : "AsynchronousTest/Attachment/description/FreeFormText",
49 : "A");
50 : sc.setElementValue(
51 : "AsynchronousTest/Attachment/GlobalAttachmentDescriptionCode",
52 : "Assembly drawings");
53 : sc.setElementValue(
54 : "AsynchronousTest/Attachment/GlobalMimeTypeQualifierCode",
55 : "application/activemessage");
56 : sc.setElementValue(
57 : "AsynchronousTest/Attachment/UniversalResourceIdentifier",
58 : "A");
59 : sc.setElementValue(
60 : "fromRole/PartnerRoleDescription/ContactInformation/contactName/FreeFormText",
61 : "NAME AAAAA");
62 : sc.setElementValue(
63 : "fromRole/PartnerRoleDescription/ContactInformation/EmailAddress",
64 : "NAME.AAAA@XX.XX.XX");
65 : sc.setElementValue(
66 : "fromRole/PartnerRoleDescription/ContactInformation/facsimileNumber/CommunicationsNumber",
67 : "FAX-XX-XXXX");
68 : sc.setElementValue(
69 : "fromRole/PartnerRoleDescription/ContactInformation/telephoneNumber/CommunicationsNumber",
70 : "Tel-XX-XXXX");
71 : sc.setElementValue(
72 : "fromRole/PartnerRoleDescription/GlobalPartnerRoleClassificationCode",
73 : "Account Supplier");
74 : sc.setElementValue(
75 : "fromRole/PartnerRoleDescription/PartnerDescription/BusinessDescription/GlobalBusinessIdentifier",
76 : SENDER);
77 : sc.setElementValue(
78 : "fromRole/PartnerRoleDescription/PartnerDescription/BusinessDescription/GlobalSupplyChainCode",
79 : "Electronic Components");
80 : sc.setElementValue(
81 : "fromRole/PartnerRoleDescription/PartnerDescription/GlobalPartnerClassificationCode",
82 : "Authorized Service Provider");
83 : sc.setElementValue(
84 : "toRole/PartnerRoleDescription/ContactInformation/contactName/FreeFormText",
85 : "NAME BBBBB");
86 : sc.setElementValue(
87 : "toRole/PartnerRoleDescription/ContactInformation/EmailAddress",
88 : "NAME.BBBBB@XX.XX.XX");
89 : sc.setElementValue(
90 : "toRole/PartnerRoleDescription/ContactInformation/facsimileNumber/CommunicationsNumber",
91 : "FAX-XX-XXXX");
92 : sc.setElementValue(
93 : "toRole/PartnerRoleDescription/ContactInformation/telephoneNumber/CommunicationsNumber",
94 : "Tel-XX-XXXX");
95 : sc.setElementValue(
96 : "toRole/PartnerRoleDescription/GlobalPartnerRoleClassificationCode",
97 : "Account Supplier");
98 : sc.setElementValue(
99 : "toRole/PartnerRoleDescription/PartnerDescription/BusinessDescription/GlobalBusinessIdentifier",
100 : RECEIVER);
101 : sc.setElementValue(
102 : "toRole/PartnerRoleDescription/PartnerDescription/BusinessDescription/GlobalSupplyChainCode",
103 : "Electronic Components");
104 : sc.setElementValue(
105 : "toRole/PartnerRoleDescription/PartnerDescription/GlobalPartnerClassificationCode",
106 : "Authorized Service Provider");
107 :
108 : Session session = new InitiationSession(new PayloadContainer(
109 : new Date(), SENDER, RECEIVER, (new UID()).toString(), sc,
110 : null));
111 : SampleUtils.printSessionState("created", session);
112 : PayloadContainer request = session.getMessageToSend();
113 : SampleUtils.printSessionState("got", session);
114 : SampleUtils.printContainerInformation(request);
115 : SampleUtils.printServiceContent(request.getServiceContent());
116 : new Validator(request.getServiceContent().getElement()).validate();
117 : exchanger.sendMessage(request);
118 : SampleUtils.printSessionState("sent", session);
119 :
120 : int time = 0;
121 : boolean loop = true;
122 : while (loop) {
123 : Thread.sleep(5000);
124 : exchanger.hit();
125 : SampleUtils.printSessionState("loop=" + time++, session);
126 :
127 : Container container = exchanger.receiveMessage();
128 : if (container != null) {
129 : SampleUtils.printContainerInformation(container);
130 : session.pushStatus((StatusContainer) container);
131 : SampleUtils.printSessionState("pushed", session);
132 : loop = false;
133 : }
134 : }
135 :
136 : } catch (Exception e) {
137 : e.printStackTrace();
138 : }
139 : }
140 :
141 : }
ServiceContentをオブジェクトで作成するには、setElementValueメソッドを使用し、パスを指定してXMLのノードを追加します。
*ServiceContentの生成 [#mf416114]
RootElement re = Repository.getDefault().getResolver().resolveByVersion("0C1","Pip0C1AsynchronousTestNotification", "R01.02.00");
ServiceContent sc = new ServiceContent("0C1", re);
sc.setGlobalDocumentFunctionCode("Request");
sc.setDocumentGenerationDateTime(new DateTimeStamp());
sc.setDocumentIdentifier(new UID().toString());
sc.setElementValue("AsynchronousTest/Attachment/description/FreeFormText","A");
・・・
PIP名等を指定し、ServiceContentを生成します。
39 : RootElement re = Repository.getDefault().getResolver()
40 : .resolveByVersion("0C1",
41 : "Pip0C1AsynchronousTestNotification", "R01.01.00");
42 : ServiceContent sc = new ServiceContent("0C1", re);
*ServiceContentへの値の設定 [#cfa0372a]
ServiceContent#setProductionは、ServiceContentでなくServiceHeaderの下記のパスに値を設定します。これは、このPIPメッセージが本番用(true)かテスト用(false)かを識別します。
-/ServiceHeader/ProcessControl/GlobalUsageCode
43 : sc.setProduction(true);
その他、ServiceContentへの値の設定に、以下のようなメソッドを使用可能です。
44 : sc.setGlobalDocumentFunctionCode("Request");
45 : sc.setDocumentGenerationDateTime(new DateTimeStamp());
46 : sc.setDocumentIdentifier(new UID().toString());
47 : sc.setElementValue(
48 : "AsynchronousTest/Attachment/description/FreeFormText",
49 : "A");