ロボット名、フォルダ名、プロジェクト名の何れかに非ASCII文字が含まれている場合、Java API、C# APIでロボットを実行するとエラーが発生する

フォローする

発生バージョン・改修ID・修正バージョン

発生Ver 改修ID 修正Ver

11.1
11.3
11.4

2105410  

 

事象

ロボット名、フォルダ名、プロジェクト名の何れかに日本語等の非ASCII文字(マルチバイト文字)が含まれている場合、Java API、C# APIでロボットを実行するとエラーが発生します。

エラーメッセージ

figure1.png

メッセージ:
Robot execution failed.
メッセージの詳細:
ライブラリをロードできませんでした。Server didn't return an eTag

また、その際、Tomcatのstderrログに以下のようなエラーメッセージが記録されます。

15-Apr-2024 19:00:06.988 警告 [http-nio-8070-exec-8] org.apache.coyote.http11.Http11Processor.prepareResponse 値 [Default project_テストフォルダ/wait10.robot_1087110059] を持つHTTPレスポンスヘッダ [ETag] は、無効であるためレスポンスから削除されました
java.lang.IllegalArgumentException: コードポイント [12,486] のユニコード文字 [テ] は有効範囲 0 から 255 の範囲外のため、エンコードできません。

原因

Tomcat側の仕様変更(不具合修正)によって、以下のバージョンから動作が変わっており、非ASCII文字がレスポンスヘッダに含まれている場合にその情報を削除し、クライアント側に送信しないようになっています。

<参考記事>Apache Tomcat 9 Changelog(英語)

〇仕様が変更されているバージョン

  • Tomcat8:8.5.85以降
  • Tomcat9:9.0.71以降

BizRobo!のJava API、C# APIでは、RepositoryRobotLibraryを使用してロボットを実行した場合、ロボット名やフォルダ名、プロジェクト名がEtagレスポンスヘッダに付与されるような仕組みになっています。

そのため、これらの項目に日本語等の非ASCII文字が含まれている場合、前述の仕様変更が原因でEtagがMCから送信されなくなっており、その影響でRoboServer側でエラーが発生し、ロボットが実行できなくなっています。

 

発生条件

以下の条件をすべて満たす場合に事象が発生します。

  • Java APIもしくはC# APIからロボットを実行
  • ライブラリタイプ:RepositoryRobotLibraryを使用して実装している※
  • ロボット名やフォルダ名、プロジェクト名の何れかに非ASCII文字が含まれている
  • 以下のバージョンのTomcatを利用している
    • Tomcat8.5:8.5.85以降
    • Tomcat9:9.0.71以降

※ ライブラリタイプについては以下のナレッジを参照してください。

<参考記事>APIで選択可能なロボットのロード方法

対処方法

以下の何れかの方法で事象の回避が可能です。

  1. ロボット名、フォルダ名、プロジェクト名に非ASCII文字を含まないようにする
  2. API実行用アプリケーションの実装方法を変更する
  3. 仕様変更前のTomcatのバージョンを利用する

 

1.ロボット名、フォルダ名、プロジェクト名に非ASCII文字を含まないようにする

本事象が発生する条件の一つとして、"日本語等の非ASCII文字が含まれていること"が挙げられます。
そのため、ロボット名やフォルダ名、プロジェクト名に該当の文字を含まないようにすることで発生条件に該当するバージョンのTomcatでも正常に動作します。

2.API実行用アプリケーションの実装方法を変更する

本事象が発生する条件の一つとして、"RepositoryRobotLibraryを使用していること"が挙げられます。
そのため、以下のような実装方法に変更することで事象の回避が可能です。

①ライブラリタイプをEmbeddedFileBasedRobotLibrary、DefaultRobotLibraryに変更する

<参考記事>
APIで選択可能なロボットのロード方法
開発者ガイド(11.3) ライブラリタイプ 項目

②Management Console APIを利用する

<参考記事>
開発者ガイド(11.3) Management Console API項目

③REST APIを利用する

<参考記事>
JavaでロボットをRest実行する方法
C#でロボットをRest実行する方法

 

3.仕様変更前のTomcatのバージョンを利用する

前述の通り、本事象はTomcatの仕様変更の影響によって発生している事象のため、仕様変更前のバージョンであれば、事象の回避が可能です。

  • Tomcat8:8.5.84以前
  • Tomcat9:9.0.70以前

 

関連記事