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?

Below is the target configuration

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));

1 Like