/// <summary>
        ///
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        private string ConvertRequestToXML(ApkKeuringsverzoekRequestMessage request)
        {
            var serializer = new XmlSerializer(typeof(ApkKeuringsverzoekRequestMessage));

            using (var stream = new StringWriterWithEncoding(Encoding.UTF8))
                using (var xmlwriter = XmlWriter.Create(stream))
                {
                    serializer.Serialize(xmlwriter, request);
                    return(stream.ToString());
                }
        }
        private string LogAndSendRequest(ApkKeuringsverzoekRequestMessage apkKeuringsVerzoek)
        {
            var requestMessage = ConvertRequestToXML(apkKeuringsVerzoek);

            var requestLog = new ApkAanvraagLog();

            // log request
            requestLog.CorrelationId  = apkKeuringsVerzoek.Keuringsverzoek.CorrelatieId;
            requestLog.RequestMessage = requestMessage;

            _apkAanvraagLogRepository.Insert(requestLog);

            // make request
            var responseMessage = _rdwApkAgent.SendApkKeuringsVerzoek(requestMessage);

            // log respone
            requestLog.ResponseMessage = responseMessage;
            _apkAanvraagLogRepository.Update(requestLog);
            return(responseMessage);
        }
        public void ValidObjectCanBeSerializedAndDeserializedTest()
        {
            var verzoek = new ApkKeuringsverzoekRequestMessage();

            // dont set it wil give an error
            // verzoek.Xsd = "http://www.w3.org/2001/XMLSchema";
            // verzoek.Xsi = "http://www.w3.org/2001/XMLSchema-instance";

            verzoek.Keuringsverzoek               = new Keuringsverzoek();
            verzoek.Keuringsverzoek.Apk           = "http://www.rdw.nl/apk";
            verzoek.Keuringsverzoek.CorrelatieId  = "0038c17b-aa10- 4f93-8569- d184fdfc265b";
            verzoek.Keuringsverzoek.Keuringsdatum = "12-1-2016";
            verzoek.Keuringsverzoek.Xmlns         = "http://www.rdw.nl/apk";

            verzoek.Keuringsverzoek.Voertuig                = new Voertuig();
            verzoek.Keuringsverzoek.Voertuig.Kenteken       = "BV-01-EG";
            verzoek.Keuringsverzoek.Voertuig.Kilometerstand = "12345";
            verzoek.Keuringsverzoek.Voertuig.Naam           = "A. eigenaar";
            verzoek.Keuringsverzoek.Voertuig.Type           = "personenauto";

            verzoek.Keuringsverzoek.Keuringsinstantie        = new Keuringsinstantie();
            verzoek.Keuringsverzoek.Keuringsinstantie.Kvk    = "3017 51123";
            verzoek.Keuringsverzoek.Keuringsinstantie.Naam   = "De Groot";
            verzoek.Keuringsverzoek.Keuringsinstantie.Plaats = "De heurne";
            verzoek.Keuringsverzoek.Keuringsinstantie.Type   = "garage";

            var serializer = new XmlSerializer(verzoek.GetType());

            using (var stream = new StringWriterWithEncoding(Encoding.UTF8))
                using (var xmlwriter = XmlWriter.Create(stream))
                {
                    serializer.Serialize(xmlwriter, verzoek);
                    var xml = stream.ToString();
                    using (var reader = new StringReader(xml))
                    {
                        var deserializer = new XmlSerializer(typeof(ApkKeuringsverzoekRequestMessage));
                        var obj          = deserializer.Deserialize(reader);
                        Assert.IsInstanceOfType(obj, typeof(ApkKeuringsverzoekRequestMessage));
                    }
                }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="apkCommand"></param>
        /// <returns></returns>
        public ApkKeuringsverzoekRequestMessage CreateRequestFromCommand(ApkKeuringsVerzoekCommand apkCommand)
        {
            var verzoek = new ApkKeuringsverzoekRequestMessage();

            verzoek.Keuringsverzoek               = new Keuringsverzoek();
            verzoek.Keuringsverzoek.Apk           = _keuringVerzoekApk;
            verzoek.Keuringsverzoek.CorrelatieId  = Guid.NewGuid().ToString();
            verzoek.Keuringsverzoek.Keuringsdatum = apkCommand.KeuringsDatum.ToString("d-M-yyyy");
            verzoek.Keuringsverzoek.Xmlns         = _keuringsVerzoekXmlns;

            verzoek.Keuringsverzoek.Voertuig                = new Voertuig();
            verzoek.Keuringsverzoek.Voertuig.Kenteken       = apkCommand.Kenteken;
            verzoek.Keuringsverzoek.Voertuig.Kilometerstand = apkCommand.Kilometerstand.ToString();
            verzoek.Keuringsverzoek.Voertuig.Naam           = apkCommand.EigenaarNaam;
            verzoek.Keuringsverzoek.Voertuig.Type           = apkCommand.VoertuigType;

            verzoek.Keuringsverzoek.Keuringsinstantie        = new Keuringsinstantie();
            verzoek.Keuringsverzoek.Keuringsinstantie.Kvk    = apkCommand.KeuringsinstantieKvkNummer;
            verzoek.Keuringsverzoek.Keuringsinstantie.Naam   = apkCommand.Bedrijfsnaam;
            verzoek.Keuringsverzoek.Keuringsinstantie.Plaats = apkCommand.BedrijfPlaats;
            verzoek.Keuringsverzoek.Keuringsinstantie.Type   = apkCommand.KeuringsinstantieType;
            return(verzoek);
        }