public class ScanningServicesProcessor implements Processor {
 
        private static GlobalLogger log =
GlobalLogger.getLogger(ScanningServicesProcessor.class.getName());
    private LoadServicesHandler loadServicesHandler ;
          
    @Autowired
        public ScanningServicesProcessor (LoadServicesHandler loadHandler) {
                this.loadServicesHandler = loadHandler;
        }
        /**
        * 
        * This method overrides the org.apache.camel.Processor.process
method.
        * Consumes the HTTP based requests coming from the Captiva Service
and
        * start processing in the method.
        * 
        * @param loadExchange
        *            - The Exchange object. Returns 200 - OK - When the
processing
        *            is completed with no errors. Returns 444 - No Content -
When
        *            the Freight Management - Load Details returns 404.
Returns 500
        *            - Internal Server Error - When any internal exception
is
        *            encountered. Returns 400 - Bad Request if the input
loadId is
        *            bad (Null, Empty or non-integer value).
        */
        @Override
        public void process(Exchange loadExchange) {
 
                final CamelContext context = loadExchange.getContext();
                final ProducerTemplate template =
context.createProducerTemplate();
                int freightResponseCode = 0;
                Message loadMsgOut = null;
                final String loadId = (String)
loadExchange.getIn().getHeader("loadId");
                Map<String, Object> headersMap = new HashMap<String,
Object>();
 
                /** Start processing for a valid loadId **/
                if (null != loadId && !"".equals(loadId) &&
loadId.matches("[0-9]+")) {
                        FetchLoadStopResponse fetchLoadStopResponse = null;
 
                        log.debug("Started invoking the Load Details Service
in the Freight Management Module for the Load Id: "
                                        + loadId);
                        Map<String, Object> loadHeader = new HashMap<String,
Object>();
                        loadHeader.put(Exchange.HTTP_PATH, loadId);
                        Exchange exchange = ScanningServicesUtils
                                        .invokeCamelHTTPService(
                                                        template,
                                                       
ScanningServicesCommonConstants.FREIGHT_LOAD_SVCS_URL_PROPERTY,
                                                        loadHeader, null);
                        loadMsgOut = (null != exchange) ? exchange.getOut()
: null;
                        InputSource loadMsgSource = null != loadMsgOut ?
loadMsgOut
                                        .getBody(InputSource.class) : null;
                        freightResponseCode = (null != loadMsgOut && null !=
loadMsgSource) ? (loadMsgOut
                                       
.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class)) : 0;
                        log.debug("Load Details Service in the Freight
Management Module for the Load Id: "
                                        + loadId
                                        + " returned a response code "
                                        + freightResponseCode);
 
                        /** Process the Load Details if the response code is
200 **/
                        try {
                                if (freightResponseCode ==
ScanningServicesCommonConstants.HTTP_STATUS_SUCCESS) {
                                        log.debug("Load Details Service in
the Freight Management Module for the Load Id: "
                                                        + loadId + "
returned" + loadMsgSource.toString());
                                        fetchLoadStopResponse =
loadServicesHandler
                                                       
.processPickUpStops(context, loadMsgSource);
 
                                }
                                /**
                                * Set the Message Out Body from the Scanning
Services Web
                                * Service
                                **/
                                if (null != fetchLoadStopResponse
                                                &&
fetchLoadStopResponse.getLoadStops().size() > 0) {
                                        headersMap
                                                       
.put(Exchange.HTTP_RESPONSE_CODE,
                                                                       
ScanningServicesCommonConstants.HTTP_STATUS_SUCCESS);
                                       
ScanningServicesUtils.setExchangeBodyAndHeaders(
                                                        loadExchange,
ScanningServicesUtils.marshal(
                                                                       
fetchLoadStopResponse,
                                                                       
FetchLoadStopResponse.class), headersMap);
 
                                } else if (null == fetchLoadStopResponse
                                                && (freightResponseCode ==
ScanningServicesCommonConstants.HTTP_STATUS_PAGE_NOT_FOUND
                                                                ||
freightResponseCode == 0 || freightResponseCode ==
ScanningServicesCommonConstants.HTTP_STATUS_INTERNAL_SERVER_ERROR)) {
                                        String error = (null != exchange &&
null != exchange
                                                        .getException()) ?
exchange.getException()
                                                        .getMessage() : "";
                                        log.error("Invoke of the service
returned a response code."
                                                        +
freightResponseCode);
                                        log.error("Invoke of the service
failed." + error);
                                        headersMap
                                                       
.put(Exchange.HTTP_RESPONSE_CODE,
                                                                       
ScanningServicesCommonConstants.HTTP_STATUS_PAGE_NOT_FOUND);
                                        ScanningServicesUtils
                                                       
.setExchangeBodyAndHeaders(
                                                                       
loadExchange,
                                                                       
ScanningServicesCommonConstants.HTTP_RESPONSE_PAGE_NOT_FOUND,
                                                                       
headersMap);
                                } else {
                                        String error = (null != exchange &&
null != exchange
                                                        .getException()) ?
exchange.getException()
                                                        .getMessage() : "";
                                        log.debug("Invoke of the service
returned a response code."
                                                        +
freightResponseCode);
                                        if("" != error) {
                                           log.error("Invoke of the service
returned" + error);
                                        }
                                        headersMap
                                                       
.put(Exchange.HTTP_RESPONSE_CODE,
                                                                       
ScanningServicesCommonConstants.HTTP_STATUS_NO_RESPONSE);
                                        ScanningServicesUtils
                                                       
.setExchangeBodyAndHeaders(
                                                                       
loadExchange,
                                                                       
ScanningServicesCommonConstants.HTTP_RESPONSE_NO_RESPONSE,
                                                                       
headersMap);
                                        
                                }
 
                        }  catch (Exception e) {
                                headersMap
                                               
.put(Exchange.HTTP_RESPONSE_CODE,
                                                               
ScanningServicesCommonConstants.HTTP_STATUS_INTERNAL_SERVER_ERROR);
                                ScanningServicesUtils
                                                .setExchangeBodyAndHeaders(
                                                               
loadExchange,
                                                               
ScanningServicesCommonConstants.HTTP_RESPONSE_INTERNAL_SERVER_ERROR,
                                                                headersMap);
                                log.error("Exception occured while fetching
the details for the load"
                                                + e.getMessage());
                        }
 
                } else {
                        log.error("The request to Scanning Services could
not be fulfilled due to bad"
                                        + " request.");
                        headersMap.put(Exchange.HTTP_RESPONSE_CODE,
                                       
ScanningServicesCommonConstants.HTTP_STATUS_BAD_REQUEST);
                       
ScanningServicesUtils.setExchangeBodyAndHeaders(loadExchange,
                                       
ScanningServicesCommonConstants.HTTP_RESPONSE_BAD_REQUEST,
                                        headersMap);
 
                }
 
                log.debug("Exit the ScanningServicesProcessor");
        }
}




--
View this message in context: 
http://camel.465427.n5.nabble.com/Camel-Jetty-Performance-Issue-tp5733133p5733711.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to