Javaに関する備考と例

以下のセクションは、Javaエージェント構成で使用されるGetterチェーンに適用されます。

Getterチェーンで渡される値

Getter チェーンで渡される値は、他の型にキャストしない限り常に文字列です。

以下の型のキャストがサポートされています。

  • int
  • 浮動
  • bool(プリミティブブール値)
  • boolean(ボックス化ブール値:ブール型をラップするオブジェクト型)
  • long
  • object

次のセクションでは、Getter チェーンメソッドのパラメータのタイプを参照する方法を示します。タイプの名前については大文字と小文字の区別は重要ではありません。型キャストは、大文字と小文字を区別しないで実行されます。

Java Getterチェーンの例

  • フォワードスラッシュをタイプの区切り文字として使用するsubstringメソッドの整数パラメータを持つGetterチェーン:

    getAddress(appdynamics, sf).substring(int/0, int/10)
  • さまざまな非文字列パラメータタイプを持つGetterチェーン:

    getAddress(appdynamics, sf).myMethod(float/0.2, boolean/true, boolean/false, int/5)
  • フォワードスラッシュがエスケープされたGetterチェーン。ここでは文字列パラメータに対してエスケープ文字が必要:

    getUrl().split(\/) # node slash is escaped by a backward slash
  • 配列エレメントを持つGetterチェーン:

    getUrl().split(\/).[4]
  • Hashmap値を返すGetterチェーン:

    get(object/myvalue).substring(int/0,int/10) 
    get(object/ACTION)
  • カンマで区切られた複数の配列エレメントを持つGetterチェーン:

    getUrl().split(\/).[1,3]
  • Getterチェーンがプロパティ値を取得(配列の長さなど):

    getUrl().split(\.).length
  • 文字列パラメータでバックスラッシュを使ってドットをエスケープしているGetterチェーン。コールは「getParam (a.b.c)」。

    getAddress.getParam(a\.b\.c\.)
  • 以下のgetterチェーンでは、最初のドットは文字列メソッドパラメータにある(括弧内)ためエスケープ文字が必要。2番目のドットはメソッドパラメータでない(括弧外)ためエスケープ文字は不要。

    getName(suze\.smith).getClass().getSimpleName()

以下のGetterチェーンは、区切り文字としてセミコロンを使用するURIのトランザクション分割ルールによるもの。

getRequestURI().split(\/).[2].split(;).[0]

これをコールすると、getRequestURI() を使用して URI を取得し、エスケープされたフォワードスラッシュを使用して URI を分割します。結果の配列から、3 番目のエントリ(最初のスラッシュはセパレータとして扱われる)を使用して、スラッシュの前にある文字列(この場合は、空)を 1 番目のエントリに挿入します。次に、セミコロンを使用してこの結果を分割し、結果の配列の 1 番目のエントリを取得します。この場合、API 名が含まれています。たとえば、次の URI の場合:

/my-webapp/xyz;jsessionid=BE7F31CC0235C796BF8C6DF3766A1D00?act=Add&uid=c42ab7ad-48a7-4353-bb11-0dfeabb798b5

GetterチェーンはAPI名で分割するため、その結果生じる分割トランザクションは「API.abc」、「API.xyz」のようになります。

ヒント: string.split(): を使用する場合は、正規表現を受け取るため、正規表現の特殊文字をエスケープする必要があります。

たとえば、左角括弧([)で分割するには以下のようにします。

Java syntax: split("\\[") Getter chain syntax: split(\\\\[)
注: 縦棒またはパイプ(|)は、Getter 文字列の予約文字です。正規表現パラメータを使用するメソッドでは、代わりに Unicode を使用します。

例:

split(string/\\u007C).[0] // return the first element of an string split by a Vertical Bar.

ブロックリストに登録されたクラスまたはパッケージと Java Getter チェーンのメソッド

特定のパッケージとクラスは、Getter チェーン内からアクセスできないようにブロックリストに登録されています。

次のメソッドとクラスまたはパッケージは、Getter チェーンに関して Java エージェントによってブロックリストに登録されています。

手法:

  • getClassLoader
  • loadClass
  • invoke

クラスまたはパッケージ:

  • reflect
  • nio.file
  • ClassLoader
  • io.File
  • io.Socket
  • net.Socket
  • ProcessBuilder
  • Runtime