Merge "fixed sonar issue in RequestTunables.java"
[so.git] / cxf-logging / src / main / java / org / onap / so / logging / cxf / interceptor / SOAPLoggingInInterceptor.java
1 package org.onap.so.logging.cxf.interceptor;
2
3
4 import java.util.List;
5 import java.util.Map;
6 import java.util.UUID;
7 import javax.servlet.http.HttpServletRequest;
8 import org.apache.cxf.binding.soap.SoapMessage;
9 import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
10 import org.apache.cxf.interceptor.Fault;
11 import org.apache.cxf.message.Message;
12 import org.apache.cxf.phase.Phase;
13 import org.apache.cxf.transport.http.AbstractHTTPDestination;
14 import org.onap.logging.ref.slf4j.ONAPLogConstants;
15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory;
17 import org.slf4j.MDC;
18
19
20 public class SOAPLoggingInInterceptor extends AbstractSoapInterceptor{
21
22     protected static Logger logger = LoggerFactory.getLogger(SOAPLoggingInInterceptor.class);
23
24     public SOAPLoggingInInterceptor() {
25         super(Phase.READ);
26     }
27
28     @Override
29     public void handleMessage(SoapMessage message) throws Fault {
30         try {
31             SOAPMDCSetup mdcSetup = new SOAPMDCSetup();
32             Map<String, List<String>> headers  = (Map<String,List<String>>) message.get(Message.PROTOCOL_HEADERS);
33             HttpServletRequest request = (HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST);
34             request.getRemoteAddr();
35             
36             setRequestId(headers);
37             setInvocationId(headers);
38             setServiceName(message);
39             setMDCPartnerName(headers);
40             mdcSetup.setServerFQDN();
41             mdcSetup.setClientIPAddress(request);
42             mdcSetup.setInstanceUUID();
43             mdcSetup.setEntryTimeStamp();
44             MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, "INPROGRESS");
45             logger.info(ONAPLogConstants.Markers.ENTRY, "Entering");
46         } catch (Exception e) {
47             logger.warn("Error in incoming SOAP Message Inteceptor", e);
48         }
49     }
50  
51     private void setServiceName(SoapMessage message) {
52         String requestURI = (String) message.get(Message.REQUEST_URI);
53         MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, requestURI);
54     }
55
56     //CXF Appears to flatten headers to lower case
57     private void setMDCPartnerName(Map<String, List<String>> headers){
58         String partnerName=getValueOrDefault(headers, ONAPLogConstants.Headers.PARTNER_NAME.toLowerCase(),"");
59         MDC.put(ONAPLogConstants.MDCs.PARTNER_NAME,partnerName);
60     }
61
62     private void setInvocationId(Map<String, List<String>> headers) {
63         String invocationId=getValueOrDefault(headers, ONAPLogConstants.Headers.INVOCATION_ID.toLowerCase(),UUID.randomUUID().toString());
64         MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, invocationId);
65     }
66
67     private void setRequestId(Map<String, List<String>> headers) {
68         String requestId=getValueOrDefault(headers, ONAPLogConstants.Headers.REQUEST_ID.toLowerCase(),UUID.randomUUID().toString());
69         MDC.put(ONAPLogConstants.MDCs.REQUEST_ID,requestId);
70     }
71
72     private String getValueOrDefault(Map<String, List<String>> headers, String headerName, String defaultValue){
73         String headerValue;
74         List<String> headerList=headers.get(headerName);
75         if(headerList != null && !headerList.isEmpty()){
76             headerValue= headerList.get(0);
77             if(headerValue == null || headerValue.isEmpty())
78                 headerValue = defaultValue;
79         }else
80             headerValue = defaultValue;
81         return headerValue;
82     }
83
84 }