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.