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