このページには、SAP 用 Anypoint Connector (SAP Connector) の一般的なトラブルシューティングに関する提案が記載されています。
一般的なスロー
-
SAP:CONNECTIVITY
A connection cannot be established. (接続を確立できません。)
-
SAP:INVALID_CACHE
The cache used internally by the JCo library is corrupted or can’t be read. (JCo ライブラリで内部的に使用されているキャッシュが破損しているか、読み取ることができません。)
-
SAP:INVALID_INPUT
User input cannot be parsed or is incorrect. (ユーザー入力を解析できないか、ユーザー入力が正しくありません。)
-
SAP:METADATA_UNAVAILABLE
The metadata for an IDoc segment is unavailable. (IDoc セグメントのメタデータを利用できません。)
-
SAP:NOT_FOUND
A function or IDoc template cannot be found or retrieved. (関数または IDoc テンプレートが見つからないか、取得できません。)
-
SAP:NOT_SUPPORTED
An action occurs that is not supported by any JCo handler. (JCo ハンドラーでサポートされていないアクションが実行されました。)
-
SAP:PARSING
The JCo library has a parsing issue or the connector cannot convert XML to a BAPI function or an IDoc. (JCo ライブラリに解析の問題があるか、コネクタが XML を BAPI 関数または IDoc に変換できません。)
-
SAP:RETRY_EXHAUSTED
Execution block retries are exhausted. (実行ブロックの再試行が終了しました。)
-
SAP:SYSTEM_BUSY
The remote ABAP system is too busy to handle a request. (リモートの ABAP システムが混雑しているため要求を処理できません。)
-
SAP:TIMEOUT
A timeout exception happens inside the JCo library. (JCo ライブラリ内でタイムアウト例外が発生しました。)
一般的な解決策
ログファイルを確認する
Mule では (アプリケーションごとに) 次のログファイルが $MULE_HOME\logs ディレクトリに保存されます。
-
mule.log
デフォルトの Mule ログファイル -
mule-app-YOUR_APP_NAME.log
アプリケーションごとのログファイル
JCo トレースを有効にする
JCo トレースは Mule の外部から有効にできます。JCo トレースは次の Java 起動環境プロパティを受け入れます。
-
-Djco.trace_level=N
N は 0 ~ 10 で、10 は最も詳細なトレース -
-Djco.trace_path=<PATH>
省略可能
JCo は 0 (デフォルト) ~ 10 のトレースレベルをサポートします。 トレースレベルが高いほど、トレースデータの量が増加します。各トレースレベルには、下位のトレースレベルのすべてのトレースデータも含まれます。多くの JCo コールと転送されるコンテンツで高い JCo トレースレベルを使用する場合は、十分なディスク容量が使用可能であることを確認してください。
コネクタレベルでトレースを有効にする手順は、次のとおりです。
-
属性
jcoTrace を true に設定するか、値 1 の拡張 JCo プロパティ jco.client.trace または jco.server.trace を指定します。 -
Mule の起動時に
-Djco.trace_level=N の値を指定します。トレースレベル AS Java セキュリティレベル JCo 3 トレースコンテンツ 0NONEトレースなし
1ERRORJCo バージョンとランタイム環境情報、およびアプリケーションエラーを含まない JCo 内部エラーと例外
2WARNINGJCo 警告メッセージ (ABAP 以外のシステム例外など)
3INFOJCo 情報メッセージ (ABAP 例外など)
4PATHRFC コールおよび重要な公開 API コール
5DEBUG重要な内部ミドルウェアコール
コードページ情報6DEBUG接続属性
ASCII コンテンツデータ (構造の最初の 1000 文字またはテーブルの最初の 5 行)7DEBUGRFC メタデータ (名前、型、オフセット、長さ、インポートおよびエクスポートオプション、およびコンテンツデータのその他の 16 進数値を含む)
8DEBUG完全なコンテンツデータダンプ (文字または行の制限なし)
コール元のスタックトレース情報 (たとえば、getClient() はアプリケーションを識別します)9DEBUG追加情報なし (将来の使用のために予約済み)
10DEBUG追加情報なし (将来の使用のために予約済み)
-
必要に応じて、
-Djco.trace_path=<PATH> の値を指定します。通常、これは、トレースファイルが保存されている既存のディレクトリへの完全パスですが、他の特別な値を適用できます。-
stdout
JCo トレース情報は標準出力ストリームに送信されます。 -
stderr
JCo トレース情報は標準エラーストリームに送信されます。
-
-Djco.trace_path を設定しない場合、トレースファイルは作業ディレクトリに保存されます。Mule スタンドアロンインスタンスの場合、通常は $MULE_HOME/bin フォルダーになります。
一般的なエラー
JCo ライブラリの欠落エラー
通常、1 つ以上の必須の SAP JCo 連動関係を読み込まずに接続のテストや Mule アプリケーションのデプロイを実行した場合にこのエラーが発生します。
-
JCo ネイティブライブラリの欠落
java.lang.ExceptionInInitializerError: JCo initialization failed with java.lang.UnsatisfiedLinkError: no sapjco3 in java.library.path
-
JCo JAR の欠落
java.lang.NoClassDefFoundError: com/sap/conn/jco/JCoTraceListener
-
IDoc JAR の欠落
java.lang.NoClassDefFoundError: com/sap/conn/idoc/IDocMetaDataUnavailableException
このエラーを解決する手順は、次のとおりです。
-
[Required dependencies (必須の連動関係)] セクションで、赤い感嘆符アイコンが付いている連動関係の横にある [Add File (ファイルを追加)] ボタンをクリックします。
-
連動関係を参照し、適切なファイルを選択します。
欠落している連動関係がプロジェクトのクラスパスに自動的に追加されます。
| Package Explorer で、プロジェクトを右クリックし、[Build Path (ビルドパス)] > [Configure Build Path (ビルドパスを設定)] に移動すると、プロジェクトのビルドパス内のライブラリが表示されます。 |
JCo クラスローダーの競合
ネイティブライブラリをグローバル設定から読み込むと、ファイルのコピーが $YOUR_APP/src/main/app/lib 内に配置されますが、ソースファイルは削除されません。そのため、接続のテストやアプリケーションのデプロイを実行するときに、JCo JAR ファイルと同じディレクトリを共有していると、次の例外が発生します。
java.lang.ExceptionInInitializerError: JCo initialization failed with java.lang.UnsatisfiedLinkError: Native Library /home/mule/sap-errors/lib/jco/libsapjco3.so already loaded in another classloader
このエラーを解決する手順は、次のとおりです。
次のいずれかの解決策を選択します。最初の解決策は最も簡単ですが、2 番目の解決策をベストプラクティスとしてお勧めします。
-
JCo JAR ファイルが存在するディレクトリから重複するネイティブライブラリファイルを削除します。
-
ダイナミックリンクライブラリを保持するように環境変数
LD_LIBRARY_PATH を設定し、同じ Mule Runtime サーバー内にデプロイされている複数のアプリケーションでその環境変数を共有します。
JCo バージョンの競合
次のエラーの最も多い原因は、異なるバージョンのネイティブライブラリと JCo JAR ファイルが使用されていることです。
java.lang.ExceptionInInitializerError: Native library sapjco3 is too old. Found library System-defined path to libsapjco3.so has version "720.612", but required is at least version "720.713".
このエラーを解決するには、次の要件が満たされていることを確認します。
-
64 ビットモードで動作する JVM では 64 ビット JCo が必要で、32 ビットモードで動作する JVM では 32 ビット JCo が必要です。
-
Microsoft Windows では、JCo には Microsoft Visual Studio 2005 C/C++ ランタイムライブラリが必要です。
-
sapjco.jar と、sapjco3.dll、sapjco3.so、および sapjco3.jnilib のいずれかの両方が同じ JCo パッケージから取得されている必要があります。
使用している JCo ライブラリのバージョンを確認するには、次のいずれかを実行します。
-
Windows (UI):
-
sapjco3.jar ファイルが配置されているディレクトリに移動します。 -
sapjco3.jar ファイルを右クリックします。 -
コンテキストメニューから [プログラムから開く] を選択します。
-
[Java 2 Platform Standard Edition] バイナリをクリックします。
-
表示された JCo ダイアログに表示されている情報を確認します。
-
-
Mac:
-
ターミナルウィンドウを開きます。
-
sapjco3.jar ファイルが配置されているディレクトリに移動します。 -
コマンド
java -jar sapjco3.jar -version を実行します。 -
表示された JCo ダイアログに表示されている情報を確認します。
-
JCo 名前変更の競合
JCo 3.0.11 以降では、SAP JCo ライブラリファイルは JCo により認識されないため、名前変更できず、次のエラーが表示されます。
java.lang.ExceptionInInitializerError: Illegal JCo archive "sapjco3-3.0.11.jar". It is not allowed to rename or repackage the original archive "sapjco3.jar"
このエラーを解決する手順は、次のとおりです。
Apache Maven を使用している場合は、属性 <stripVersion>true</stripVersion> を持つ maven-dependency-plugin を設定します。これを設定し、JCo アーティファクトを削除すると、すべての連動関係ライブラリのバージョン番号が削除されます。
詳細は、外部サイトで 「Apache Maven Dependency Plugin (Apache Maven Dependency プラグイン)」を参照してください。
メッセージが SAP オブジェクトではない
エンドポイントは、BAPI または IDoc を実行するために必要な入力パラメーターを含む SAP オブジェクトを想定します。
以下のメッセージが表示された場合、次のいずれかが考えられます。
-
必要な入力パラメーターが指定されていない。
-
入力パラメーターは指定されているが、SAP オブジェクトが無効である。
org.mule.api.transport.DispatchException: Message is not a SAP object, it is of type "byte[]". Check the transformer for this Connector "SapConnector". Failed to route event via endpoint: SapOutboundEndpoint{endpointUri=sap://function, connector=SapConnector
{
name=SapConnector
lifecycle=start
this=4571cebe
numberOfConcurrentTransactedReceivers=4
createMultipleTransactedReceivers=true
connected=true
supportedProtocols=[sap]
serviceOverrides=<none>
}
, name='endpoint.sap.function', mep=ONE_WAY, properties={evaluateFunctionResponse=false, bapiTransaction=false, functionName=BAPI_MATERIAL_AVAILABILITY, rfcType=srfc, outputXml=true}, transactionConfig=Transaction{factory=null, action=INDIFFERENT, timeout=0}, deleteUnacceptedMessages=false, initialState=started, responseTimeout=10000, endpointEncoding=UTF-8, disableTransportTransformer=false}. Message payload is of type: byte[]
この問題を解決する手順は、次のとおりです。
次の 2 つのいずれかの操作を実行して、BAPI または IDoc へのコールを表す SAP オブジェクトを作成します。
-
BAPI コールを含む SAP オブジェクトが含まれる XML を作成します。
-
実際の SAP コールを作成するための入力が含まれる XML 定義を指定します。
IDoc メタデータを使用できない
次のエラーが発生した場合、RFC 宛先が Unicode をサポートしていないことを意味します。
RfcException: [mc-vmware|a_rfc] message: (3) IDOC_ERROR_METADATA_UNAVAILABLE: The meta data for the IDoc type "??????????????????????????å å" with extension " ORDSAPB6L B60CL ???" is unavailable.
Return code: RFC_FAILURE(1)
error group: 104
key: RFC_ERROR_SYSTEM_FAILURE
このエラーを解決する手順は、次のとおりです。
トランザクション SM59 を使用して、SAP インスタンスでの Unicode サポートを設定します。
TID ハンドラーの欠落
TID ハンドラーが定義されていないため、次の例外を受信します。
RfcException: [mule.local|MULESOFT_IDOC_SEND_TEST]
message: check TID fault: No transaction handler is installed. Unable to process tRFC/qRFC requests.
Return code: RFC_FAILURE(1)
error group: 104
key: RFC_ERROR_SYSTEM_FAILURE
Exception raised by myhost.com.ar|MULESOFT_IDOC_SEND_TEST
at com.sap.conn.jco.rt.MiddlewareJavaRfc$JavaRfcServer.playbackTRfc(MiddlewareJavaRfc.java:2625)
at com.sap.conn.jco.rt.MiddlewareJavaRfc$JavaRfcServer.handletRfcRequest(MiddlewareJavaRfc.java:2546)
at com.sap.conn.jco.rt.MiddlewareJavaRfc$JavaRfcServer.listen(MiddlewareJavaRfc.java:2367)
at com.sap.conn.jco.rt.DefaultServerWorker.dispatch(DefaultServerWorker.java:284)
at com.sap.conn.jco.rt.DefaultServerWorker.loop(DefaultServerWorker.java:369)
at com.sap.conn.jco.rt.DefaultServerWorker.run(DefaultServerWorker.java:245)
at java.lang.Thread.run(Thread.java:680)
このエラーを解決する手順は、次のとおりです。
<sap:inbound-endpoint /> で rfcType を trfc または qrfc に設定します。
パラメーターがサポートされていない
SAP 拡張プロパティには有効な名前が必要です。このため、無効なプロパティ名を指定すると、次のようなエラーメッセージが表示されます。
Root Exception stack trace:
RfcException: [null]
message: Parameter 'type' not supported: 'f'
Return code: RFC_INVALID_PARAMETER(19)
error group: 101
key: RFC_ERROR_PROGRAM
at com.sap.conn.rfc.api.RfcOptions.checkParameters(RfcOptions.java:182)
at com.sap.conn.jco.rt.MiddlewareJavaRfc$JavaRfcClient.connect(MiddlewareJavaRfc.java:1328)
at com.sap.conn.jco.rt.ClientConnection.connect(ClientConnection.java:731)
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
この例では、type という名前のパラメーターが無効であることが JCo ライブラリにより報告されています。
このエラーを解決する手順は、次のとおりです。
JCo 拡張プロパティの有効なプロパティ名を指定します。
複数の JCo サーバーが実行されている
2 つ以上の JCo サーバーには、設定名が異なっていても同じ設定パラメーターセットを含めることはできません。
次のエラーが表示されます。
ERROR 2012-07-05 10:11:30,525 [WrapperListener_start_runner] com.mulesoft.mule.transport.sap.SapMessageReceiver: Error connecting to server
com.sap.conn.jco.JCoException: (101) JCO_ERROR_CONFIGURATION: Server configuration for sapavalara-1.0-SNAPSHOT-gettax is already used for a running server
at com.sap.conn.jco.rt.StandaloneServerFactory.update(StandaloneServerFactory.java:358)
at com.sap.conn.jco.rt.StandaloneServerFactory.getServerInstance(StandaloneServerFactory.java:176)
at com.sap.conn.jco.server.JCoServerFactory.getServer(JCoServerFactory.java:74)
at com.mulesoft.mule.transport.sap.jco3.SapJcoRfcServer.initialise(SapJcoRfcServer.java:46)
at com.mulesoft.mule.transport.sap.jco3.SapJcoServerFactory.create(SapJcoServerFactory.java:60)
at com.mulesoft.mule.transport.sap.SapMessageReceiver.doConnect(SapMessageReceiver.java:56)
at org.mule.transport.AbstractTransportMessageHandler.connect(AbstractTransportMessageHandler.java:218)
at org.mule.transport.AbstractConnector.registerListener(AbstractConnector.java:1254)
| これは、同じ Mule サーバーで実行されている Mule アプリケーションにのみ適用されます。Mule サーバーグループのノードにこの制限はありません。 |
このエラーを解決する手順は、次のとおりです。
次の属性を使用して、サーバーグループキーを作成します (サーバーグループキーは JCo サーバー接続のユニーク性を決定します)。
-
jco.server.gwhost -
jco.server.gwserv -
jco.server.progid
2 つのサーバーで gwhost、gwserv、および progid の値が異なる場合のみ、2 つのサーバーを同じ Mule インスタンスで開始できます (JCo はこの情報をシングルトンクラスで保持します)。