6.1 概要
JX手順が提供する機能の概要を解説します。
ACMS Cloudの概要の他、JX手順のプロトコルの詳細について学びたい場合は、以下のリンクをご参照ください。
https://community.dal.co.jp/s/article/protocol-jx
6.1.1 特徴
ACMS CloudではJX手順によるクライアントおよびサーバー双方でのメッセージ交換について、JEDICOS-XMLが定めたC-S型メッセージ交換モデル(2003年度版および2004年度版)のフェーズ1に則ったSOAP-RPC方式のプロトコルを実装しています。
6.1.2 仕様
JX手順ではインターネット経由でクライアントからサーバーへ接続し、ビジネスドキュメントのアップロードやダウンロードを行います。処理の起点はクライアント側であり、クライアントからサーバーへの接続によって処理が開始されます。
JX手順で定義されたクライアント側送信メソッドは以下のとおりです。
メソッド | 説明 |
---|---|
PutDocument | 1ビジネスドキュメントをサーバーに送信する機能 |
GetDocument | サーバーにある自分宛の未取得ビジネスドキュメントのうち、古いものから1つ取得する機能 |
ConfirmDocument | 取得したビジネスドキュメントの識別IDをサーバーに通知し、取得したことを通知する機能 |
6.1.3 ビジネスシーケンス
ACMS CloudのJX手順では、以下の仕様に準拠したビジネスドキュメントメッセージや、相互に合意した任意の形式のメッセージを交換します。
- インターネットEDI普及推進協議会(JiEDIA)が管理する汎用版JX手順
- 流通BMSが管理する流通BMS標準仕様のJX手順
ビジネスシーケンスは以下のとおりです。
■ビジネスシーケンス(送信)

■ビジネスシーケンス(受信)

6.1.4 ビジネスメッセージ
商品マスタ情報や発注データなど、ビジネスドキュメントをコンテンツにもつメッセージです。
メッセージフォーマットについては、使用するビジネスドキュメント形式の規定に従います
6.1.5 メッセージ構造
PutDocument/GetDocument/ConfirmDocumentの3つのメソッドは、それぞれHTTPリクエストとHTTPレスポンス毎に以下の6つのメッセージが定義されています。
・ PutDocumentResponseメッセージ
・ PutDocumentメッセージ(ビジネスドキュメントを含む)
・ GetDocumentメッセージ
・ GetDocumentResponseメッセージ(ビジネスドキュメントを含む)
・ ConfirmDocumentメッセージ
・ ConfirmDocumentResponseメッセージ
メッセージの構成は以下のようになります。

6.1.5.1 SOAPヘッダー
SOAPヘッダーに含まれるMessageHeader要素について説明します。
MessageHeaderの要素 | 説明 |
---|---|
From | メッセージ送信元URI |
To | メッセージ送信先URI |
MessageId | メッセージの一意性を保持するための識別子 |
Timestamp | メッセージを作成した世界協定時(UTC)による日時 |
OptionalFormatType(*) | GetDocumentメッセージの際、取得対象となるビジネス文書の形式を限定するためのフォーマットタイプを指定 (オプション) |
OptionalDocumentType(*) | GetDocumentメッセージの際、取得対象となるビジネス文書の種別を限定するためのフォーマットタイプを指定 (オプション) |
(*) OptionalFormatType要素、OptionalDocumentType要素の使用上の注意(2007年度版にて追加)
- OptionalFormatType要素、OptionalDocumentType要素の両方を指定するか、両方を省略するかのどちらかである。片方だけの指定は認めない。
- GetDocumentの場合にのみ有効となる。GetDocument以外のリクエストメッセージおよび、レスポンスメッセージの場合には、これらの要素を無視し、機能上に影響しないものとする。
- 両方を省略した場合のGetDocumentは、ビジネス文書の形式と種別を指定しないGetDocument仕様となる。すなわち自企業宛のすべてのビジネス文書が対象となる。
6.1.5.2 SOAPボディ
SOAPボディには6つのメッセージ毎に固有の要素があります。
下記にそれぞれのメッセージに含まれる要素を示します。
(1)PutDocument要素
PutDocumentメッセージのSOAPボディに含まれるPutDocument要素を下記に示します。
PutDocumentの要素 | 説明 |
---|---|
MessageId | 送信ビジネスドキュメントの一意性を保持するための識別子 重複送信検出に用いる |
Data | Base64エンコードされた送信ビジネスドキュメント |
SenderId | ビジネスドキュメント送信企業の識別子 |
ReceiverId | ビジネスドキュメント受信企業の識別子 |
FormatType | ビジネスドキュメントの形式 (FormatTypeを参照) |
DocumentType | ビジネスドキュメントの種別 (DocumentTypeを参照) |
CompressType | ビジネスドキュメントの圧縮・解凍形式 (CompressTypeを参照) |
(2)PutDocumentResponse要素
PutDocumentResponseメッセージのSOAPボディに含まれるPutDocumentResponse要素を下記に示します。
PutDocumentResponseの要素 | 説明 |
---|---|
PutDocumentResult | PutDocumentメソッドの結果。trueかfalseのどちらかを指定する。 サーバー側はビジネスドキュメントを正常に受信できた場合trueを返す。同じMessageIdにより重複受信を検知した場合はfalseを返す。 |
(3)GetDocument要素
GetDocumentメッセージのSOAPボディに含まれるGetDocument要素を下記に示します。
GetDocumentの要素 | 説明 |
---|---|
ReceiverId | ビジネスドキュメント受信企業の識別子 |
(4)GetDocumentResponse要素
GetDocumentResponseメッセージのSOAPボディに含まれるGetDocumentResponse要素を下記に示します。
GetDocumentResponseの要素 | 説明 |
---|---|
GetDocumentResult | GetDocumentメソッドの結果。trueかfalseのどちらかを指定する。 サーバー側はビジネスドキュメントが存在して送信できた場合trueを返す。ビジネスドキュメントが存在しない場合はfalseを返す。 |
MessageId | 受信ビジネスドキュメントの一意性を保持するための識別子 クライアントがビジネスドキュメントを正常に受信できたことをサーバーに通知するために、この識別子を受信確定通知で用いる。 |
Data | Base64エンコードされた受信ビジネスドキュメント |
SenderId | ビジネスドキュメント送信企業の識別子 |
ReceiverId | ビジネスドキュメント受信企業の識別子 |
FormatType | ビジネスドキュメントの形式 (FormatTypeを参照) |
DocumentType | ビジネスドキュメントの種別 (DocumentTypeを参照) |
CompressType | ビジネスドキュメントの圧縮・解凍形式 (CompressTypeを参照) |
(5)ConfirmDocument要素
ConfirmDocumentメッセージのSOAPボディに含まれるConfirmDocument要素を下記に示します。
ConfirmDocumentの要素 | 説明 |
---|---|
MessageId | GetDocumentメソッドで取得したビジネスドキュメントのMessageId |
SenderId | ビジネスドキュメント送信企業の識別子 |
ReceiverId | ビジネスドキュメント受信企業の識別子 |
(6)ConfirmDocumentResponse要素
ConfirmDocumentResponseメッセージのSOAPボディに含まれるConfirmDocumentResponse要素を下記に示します。
ConfirmDocumentResponseの要素 | 説明 |
---|---|
ConfirmDocumentResult | ConfirmDocumentメソッドの結果trueかfalseのどちらかを指定する。サーバー側は正常に受信確定した場合、trueを返す。 同じMessageIdが重複して通知された場合はfalseを返す。 |
6.1.5.3 SOAPボディに含まれる共通要素の値
SOAPボディに含まれる共通要素の値を下記に示します。
(1)FormatType要素
通信相手と取り決めたビジネス文書の形式です。
例えば、流通ビジネスメッセージ標準形式では”SecondGenEDI”が利用されます。
(2)DocmentType要素
通信相手と取り決めたビジネス文書の種別です。
例えば、以下のような種別を指定します。
DocumentTypeの値 | メッセージ名 | Buyer | 方向 | Seller |
---|---|---|---|---|
Order | 発注 | → | ||
Return Notification | 返品 | → | ||
Shipment Notification | 出荷伝票 | ← | ||
Package Shipment Notification | 出荷梱包(紐付) | ← | ||
Non-associated Package Shipment Notification | 出荷梱包(紐なし) | ← | ||
Receiving Notification | 受領伝票 | → | ||
Invoice | 請求 | ← | ||
Payment | 支払 | → | ||
Price Tag | 値札 | → | ||
Fresh Order | 生鮮発注 | → | ||
Fresh Shipment Notification | 生鮮出荷 | ← | ||
Fresh Receiving Notification | 生鮮受領 | → | ||
Fresh Return Notification | 生鮮返品 | → | ||
Picking List | 集計表作成 | → |
(3)CompressType要素
ビジネス文書の圧縮形式です。
MIMEメディアタイプの値 | 圧縮形式 | 説明 |
---|---|---|
application/java-archiver | JAR | JavaArchiver形式 |
application/x-tar | Tar | TapeArchiver形式 |
application/zip | ZIP | Zigzag In line Package形式 |
application/gzip | GZIP | GNU ZIP形式 |
6.1.6 通信エラー
JX手順の通信エラーは下記に示すとおりHTTP通信および、JX手順それぞれの階層でエラーが発生する可能性があります。
エラー発生階層 | エラー検出タイミング |
---|---|
HTTP通信 | HTTPプロトコル通信でのエラー |
JX手順 | SOAP Envelope解析時のエラー (クライアントの送信データ内容の不備) |
6.1.6.1 HTTP通信階層でのエラー
HTTPでは、サーバーの応答としてステータスコードが返されます。
下記に代表的なHTTP通信エラーのステータスコードを示します。
HTTP Status Code | 原因 |
---|---|
401 | 認証に失敗(クライアントの設定不備) |
404 | 接続先のURLに誤りがある(クライアントの設定不備) |
500 | サーバーで何等かのエラーが発生 |
503 | サーバーが一時的に利用できない |
6.1.6.2 JX手順階層でのエラー
JX手順では、SOAP Envelope解析時のエラー通知手段としてSOAP Faultを使用します。
サーバーは処理中にSOAPエラーが発生した場合、HTTPステータスコード500をクライアントに返します。そのレスポンスのBody要素には処理エラーを示すFault要素をもつSOAPメッセージが含まれます。
6.2 仕様
ACMS CloudにおけるJX手順の実装仕様および、SOAP-RPCメッセージの組み立てと交換の仕様について説明します。
6.2.1 サポート機能/未サポート機能
ACMS CloudのJX手順がサポートする機能と未サポートとする機能は以下の通りです。
6.2.1.1 サポート機能
- クライアント – サーバー型通信
- 信頼性保証
- 重複破棄
- セキュリティ(伝送の暗号化:盗聴防止)
- 認証(Basic認証、SSL/TLSサーバー認証、SSL/TLSクライアント認証)
6.2.1.2 未サポート機能
- JEDICOS拡張要素であるexceptionInfoによるエラー詳細通知機能
- C-S-C型推奨規約におけるMessageId引き継ぎ機能
- 電子署名
6.2.2 JX手順メッセージ交換
ACMS Cloudにおける、送信メッセージの作成方法と受信メッセージの検証方法について記述します。
6.2.2.1 通信プロトコル
ACMS CloudではSOAP-RPCメッセージの送受信を行うために、HTTP/1.1を使用します。また、SSL/TLSとの結合により、HTTPSによる暗号化通信および、サーバー認証、クライアント認証を行えます。
6.2.2.2 HTTPヘッダー
通信設定や送信メッセージの内容にかかわらず設定されるHTTPヘッダーは以下の通りです。
項目名(field-name) | 値(field-value) |
---|---|
Content-Type | text/xml; charset=UTF-8 |
SOAPAction | “http://www.dsri.jp/edi-bp/2004/jedicos-xml/client-server/${メソッド名}” |
Content-Length | ${ビジネスメッセージのサイズ} |
Connection | keep-alive クライアント:持続接続を行う場合で、かつ受信の場合に設定します。 サーバー:keep-aliveを設定することはありません。
クライアント:送信、または持続接続を行わない場合に設定します。 サーバー:サーバーでは常にcloseを設定します。 |
Date | ${メッセージ送信時の日時(GMT表記)} |
6.2.2.3 SOAP-RPCメッセージの作成
データベースに登録されている情報を元にSOAP-RPCメッセージを作成します。作成するメッセージのエンコード方式は「UTF-8」です。
6.2.2.4 SOAP-RPCメッセージの検証
受信したSOAP-RPCメッセージからSOAPエンベロープを抜き出し、XML Parserを用いて検証、キー項目の取得を行います。
検査対象のSOAP-RPCメッセージはエンコード方式「UTF-8」で作成されている必要があります。
検証内容は以下の通りです。
- SOAPエンベロープをXML Parserで構造チェックを行い、不正形式の場合には検証エラーとします。
- SOAPエンベロープの項目内容をチェックし、不正の場合は検証エラーとします。
(必須項目、設定されている値と設定値のマッチング)
6.2.2.5 SOAP-RPCメッセージのパッケージング/アンパッケージング
ACMS CloudのJX手順メッセージ交換におけるSOAP-RPCメッセージのパッケージングとアンパッケージングの仕様を記述します。
(1)パッケージング
ビジネスドキュメント、またはその他ファイルをBase64形式にエンコードしてSOAPエンベロープにパッケージングします。

(2)アンパッケージング
SOAP-RPCメッセージに含まれるSOAPエンベロープからビジネスドキュメント、その他ファイルを取り出し、Base64形式からデコードしてアンパッケージングします。

6.2.3 同期通信
クライアントからサーバーに対して送信する1つのメッセージと、それに対する1つの応答メッセージの交換が行われます。メッセージに対する応答メッセージの正常送受信によりビジネスメッセージの送受信が正常終了となります。
6.2.3.1 JX手順クライアントでのPutDocumentメッセージ送信
JX手順クライアントでPutDocumentメッセージを送信した場合の処理について説明します。
■正常ケース

- 相手先にPutDocumentメッセージを送信します。
- PutDocumentResponse(result=true)メッセージを受信します。
- 検証結果が正常の場合、正常時終了処理を登録します。
■異常ケース

- 相手先にPutDocumentメッセージを送信します。
- SOAP Fault またはHTTPエラーを受信します。
6.2.3.2 JX手順クライアントでのGetDocumentメッセージ送信
JX手順クライアントでGetDocumentメッセージを送信した場合の処理について説明します。
■正常ケース(受信データあり)

- 相手先にGetDocumentメッセージを送信します。
- GetDocumentResponse(result=true)メッセージを受信し、発信受信の子タスク(受信データ)を登録します。
- 相手先にConfirmDocumentメッセージを送信します。
- 正常時終了処理を登録します。
- ConfirmDocumentResponse(result=true)メッセージを受信します。
■正常ケース(受信データなし)

- 相手先にGetDocumentメッセージを送信します。
- GetDocumentResponse(result=false)メッセージを受信します。
- 論理ファイルの「受信ファイル無し」と終了処理の起動の設定により処理が変わります。
- 受信ファイル無しが「リトライする」の場合
- リトライを行い、リトライオーバーとなった時点でタスクが終了します。
- 受信ファイル無しが「正常終了」するで、終了処理の起動が「起動しない」の場合
- 正常終了処理の登録を行いません。
- 受信ファイル無しが「正常終了」するで、終了処理の起動が「起動する」の場合
- 正常終了処理を登録します。
- 受信ファイル無しが「リトライする」の場合
■異常ケース

- 相手先にGetDocumentメッセージを送信します。
- SOAP Fault またはHTTPエラーを受信します。

- 相手先にGetDocumentメッセージを送信します。
- GetDocumentResponse(result=true)メッセージを受信し、発信受信の子タスク(受信データ)を登録します。
- 相手先にConfirmDocumentメッセージを送信します。
- 子タスクの正常時終了処理を登録します。
- SOAP Fault またはHTTPエラーを受信します。
- リトライを行い、リトライオーバーとなった場合にはタスクが終了します。
6.2.3.3 JX手順サーバーでのPutDocumentメッセージ受信
JX手順サーバーでPutDocumentメッセージを受信した場合の処理について説明します。
■正常ケース

- PutDocumentメッセージを受信します。
- 検証結果が正常の場合、受信データを登録します。
- 正常時終了処理を登録します。
- 相手先にPutDocumentResponse(result=true)メッセージを送信します。
■異常ケース

- PutDocumentメッセージを受信します。
- エラーが発生した場合、相手先にSOAP Fault(HTTP Response=500)、またはHTTPエラーを送信します。
6.2.3.4 JX手順サーバーでのGetDocumentメッセージ受信
JX手順サーバーでGetDocumentメッセージを受信した場合の処理について説明します。
■正常ケース(送信データあり)

- GetDocumentメッセージを受信します。
- 検証結果が正常の場合、相手先にGetDocumentResponse(result=true)メッセージを送信します。
- ConfirmDocumentメッセージを受信します。
- 検証結果が正常の場合、正常時終了処理を登録します。
- 相手先にConfirmDocumentResponse(result=true)メッセージを送信します。
■正常ケース(送信データなし)

- GetDocumentメッセージを受信します。
- 検証結果が正常、かつ送信データがない場合、相手先にGetDocumentResponse(result=false)メッセージを送信します。
■異常ケース(GetDocument)

- GetDocumentメッセージを受信します。
- エラーが発生した場合、相手先にSOAP Fault(HTTP Response=500)、またはHTTPエラーを送信します。
■異常ケース(ConfirmDocument)

- GetDocumentメッセージを受信します。
- 検証結果が正常の場合、相手先にGetDocumentResponse(result=true)メッセージを送信します。
- ConfirmDocumentメッセージを受信します。
- エラーが発生した場合、相手先にSOAP Fault(HTTP Response=500)、またはHTTPエラーを送信します。
6.2.4 配送保証
JX手順では、配送保証として以下の機能を実装しています。
6.2.4.1 損失防止
JX手順は通信経路上の異常により、送信されたデータが受信側に到達しなかった場合に、それを検知して再度データを送信します。
■送信(クライアント)
クライアント側はPutDocumentメッセージでビジネスドキュメントを送信後、一定時間PutDocumentResponseメッセージが返ってこない場合には、PutDocumentメッセージを再送信します。
再送信はクライアントが定める間隔、回数でリトライを繰り返し、それでも送信できない場合はリトライオーバーとなります。

■受信(クライアント)
クライアント側はGetDocumentメッセージでビジネスドキュメントの受信要求後、一定時間GetDocumentResponseメッセージが返ってこない場合に、GetDocumentメッセージを再送信します。
再送信はクライアントが定める間隔、回数でリトライを繰り返し、それでも送信できない場合はリトライオーバーとなります。

6.2.4.2 重複破棄
JX手順は先発のビジネスドキュメントと再送したビジネスドキュメントの両方が受信側システムに到達した場合に、受信側のアプリケーションに同じビジネスドキュメントを渡しません。
■受信(サーバー)
クライアント側はPutDocumentメッセージでビジネスドキュメントを送信後、一定時間PutDocumentResponseメッセージが返ってこない場合にPutDocumentメッセージを再送信します。
サーバー側は1回目のPutDocumentでビジネスドキュメントをすでに受信済みのため、2回目の受信ビジネスドキュメントを破棄し、PutDocumentResponse=falseを返します。
ビジネスドキュメントのチェックにはMessageIdを使用します。
クライアント側はPutDocumentResponse=falseをすでに送信済みとみなし、該当ビジネスドキュメントを送信済みにします。

■送信(サーバー)
クライアント側はConfirmDocumentメッセージでビジネスドキュメントの受信要求後、一定時間HttpResponseが返ってこない場合にConfirmDocumentメッセージを再送信します。
サーバー側は1回目のConfirmDocumentでビジネスメッセージをすでに送信済みのため、ConfirmDocumentResponseでConfirmDocumentResponse=falseを返します。
クライアント側はConfirmDocumentResponseがfalseの場合は、受信確定通知済みとみなし、ConfirmDocumentResponseが正常時と同様の処理を行います。

6.2.5 連結送信
JX手順サーバーでは、ドキュメント種別指定あり(2007年度版運用)のGetDocumentを受信した場合にのみ、複数の通信タスクを1つのファイルとして送信することができます。

連結送信は複数ファイルを単純連結する機能であり、CSV形式などファイルの結合が可能な場合に使用します。
ファイルの形式がXML形式や ZIP 圧縮形式などの場合、そのまま連結すると不正な形式で送信され、通信相手先で予期せぬ障害を招く可能性があります。通信相手先とのデータ形式をご確認いただきご使用下さい。また、連結送信が行われた場合、送信するGetDocumentResponseメッセージのCompressType要素は空になります。