type of target.ip shows as object instead of string

Hi team,

I encountered "Javascript runtime error: "Access to Java class "java.lang.Class" is prohibited" error while stringifying json and after a while I found it is due to target.ip field. 

As you can see below ip is getting fetched with "/" and secondly when I print it's type it shows as object instead of string.
(https://cloud.google.com/apigee/docs/api-platform/reference/variables-reference?hl=en_US#target)

Could you please help me understand what could be the reason why target.ip type is object and value is starting with "/" instead of only ip address?

Screenshot 2022-12-15 173841.jpg

Below is the target configuration
Screenshot 2022-12-15 171957.jpg

I'm unable to upload trace file here but please find js code from shared flow for which first image shows failure. 
===================================================================

var loggingJson = {};
var tranId = "apigee_x_" + context.getVariable("messageid");
var reqContentType = context.getVariable("request.header.Content-Type") || "";
var resContentType = context.getVariable("response.header.Content-Type") || "";
var errContentType = context.getVariable("error.header.Content-Type") || "";
var reqPayload = context.getVariable("request.content") || "";
var resPayload = context.getVariable("response.content") || "";
var responsePayload = "";
var totalTargetTime = context.getVariable("totalTargetTime") || 0;
var errorPayload = context.getVariable("error.content") || "";
var statusCode = context.getVariable("message.status.code") || context.getVariable("error.status.code");
var sourceSystem = "apigee";
var timestamp = new Date().toISOString();
var method = context.getVariable("request.verb");
var service = context.getVariable("apiproxy.name");
var errorState = context.getVariable("error.state") || "";
var faultName = context.getVariable("fault.name") || "";
var targetHost = context.getVariable("target.host") || "";
var targetIp = context.getVariable("target.ip") || "";
var responsePayloadSize = context.getVariable("response.header.Content-Length") || 0;
var requestPayloadSize = context.getVariable("requestPayloadSize") || 0;
var apiProduct = context.getVariable("apigee.apiproduct.name") || "";
var devAppName = context.getVariable("apigee.developer.app.name") || "";
var devEmail = context.getVariable("apigee.developer.email") || "";
var proxyError = false;
var targetError = false;
var totalElapsedTime = (context.getVariable("system.timestamp")-context.getVariable("client.received.start.timestamp"));
context.setVariable("totalElapsedTime", totalElapsedTime);

if(!reqPayload && !(reqContentType == "application/json")){
    reqPayload = "";
}

if((errorPayload) && errContentType == "application/json"){
  responsePayload = errorPayload;
else if (resContentType){
  if((resPayload) && resContentType.includes("application/json")){
    responsePayload = resPayload;
  }
}

if(errorState == "TARGET_RESP_FLOW" && faultName == "ErrorResponseCode"){
  targetError = true;
else if (errorState == "TARGET_REQ_FLOW" || errorState == "PROXY_RESP_FLOW" || errorState == "PROXY_REQ_FLOW"){
  proxyError = true;
}

if(!responsePayloadSize){
  if((errorPayload) && errContentType == "application/json"){
    responsePayloadSize = (JSON.stringify(JSON.parse(errorPayload)).length);;
  } else
    responsePayloadSize = (JSON.stringify(JSON.parse(resPayload)).length);
  }
}

var log_level = "";
if(statusCode >= 500){
  log_level = "ERROR";
}else if(statusCode >= 400 && statusCode < 500){
  log_level = "WARNING";
else {
  log_level = "INFO";
}
print("type of ip"+ typeof targetIp);

loggingJson.global_transaction_id = tranId;
loggingJson.request_payload = reqPayload;
loggingJson.response_payload = responsePayload;
loggingJson.status_code = parseInt(statusCode);
loggingJson.source_system = sourceSystem;
loggingJson.timestamp = timestamp;
loggingJson.method = method;
loggingJson.service = service;
loggingJson.target_time = totalTargetTime;
loggingJson.target_host = targetHost;
loggingJson.target_ip = targetIp;
loggingJson.request_payload_size = parseInt(requestPayloadSize);
loggingJson.response_payload_size = parseInt(responsePayloadSize);
loggingJson.apiproduct = apiProduct;
loggingJson.dev_app = devAppName;
loggingJson.dev_email = devEmail;
loggingJson.proxy_error = proxyError;
loggingJson.target_error = targetError;

context.setVariable("log_level", log_level);
context.setVariable("log_payload"JSON.stringify(loggingJson));
0 0 138
0 REPLIES 0