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.