public void submitReport(HandlingReport handlingReport)
        {
            var validationErrors = new List<string>();

            var completionTime = handlingReport.completionTime;
            var voyageNumber = HandlingReportParser.parseVoyageNumber(handlingReport.voyageNumber, validationErrors);
            var type = HandlingReportParser.parseEventType(handlingReport.type, validationErrors);
            var unLocode = HandlingReportParser.parseUnLocode(handlingReport.unLocode, validationErrors);
            var operatorCode = HandlingReportParser.parseOperatorCode();

            var allErrors = new Dictionary<string, string>();
            foreach(string trackingIdStr in handlingReport.trackingIds)
            {
                var trackingId = HandlingReportParser.parseTrackingId(trackingIdStr, validationErrors);

                if(!validationErrors.Any())
                {
                    try
                    {
                        handlingEventService.registerHandlingEvent(completionTime, trackingId, voyageNumber, unLocode, type, operatorCode);
                    }
                    catch(CannotCreateHandlingEventException e)
                    {
                        logger.Error(e, e);
                        allErrors.Add(trackingIdStr, e.Message);
                    }
                }
                else
                {
                    logger.Error("Parse error in handling report: " + validationErrors);
                    allErrors.Add(trackingIdStr, String.Join(", ", validationErrors));
                }
            }

            if(allErrors.Any())
            {
                var faultInfo = new HandlingReportErrors();
                throw new FaultException<HandlingReportErrors>(faultInfo, createErrorMessage(allErrors));
            }
        }