diff --git a/.gitignore b/.gitignore index f1e3d20..b2edd60 100644 --- a/.gitignore +++ b/.gitignore @@ -152,6 +152,7 @@ PublishScripts/ # NuGet Packages *.nupkg +!**/ReleaseArtifact/*.nupkg # The packages folder can be ignored because of Package Restore **/packages/* # except build/, which is used as an MSBuild target. diff --git a/AuthorizeNET/AuthorizeNET.Tests/AuthorizeNET.Tests.csproj b/AuthorizeNET/AuthorizeNET.Tests/AuthorizeNET.Tests.csproj new file mode 100644 index 0000000..2f18892 --- /dev/null +++ b/AuthorizeNET/AuthorizeNET.Tests/AuthorizeNET.Tests.csproj @@ -0,0 +1,19 @@ + + + + netcoreapp3.1 + + false + + + + + + + + + + + + + diff --git a/AuthorizeNET/AuthorizeNET.Tests/TransactionControllerTests.cs b/AuthorizeNET/AuthorizeNET.Tests/TransactionControllerTests.cs new file mode 100644 index 0000000..f798397 --- /dev/null +++ b/AuthorizeNET/AuthorizeNET.Tests/TransactionControllerTests.cs @@ -0,0 +1,113 @@ +using AuthorizeNet.Api.Contracts.V1; +using AuthorizeNet.Api.Controllers; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Threading.Tasks; + +namespace AuthorizeNET.Tests +{ + [TestClass] + public class TransactionControllerTests + { + merchantAuthenticationType MerchantAuthentication => new merchantAuthenticationType() + { + name = "5KP3u95bQpv", + ItemElementName = ItemChoiceType.transactionKey, + Item = "346HZ32z3fP4hTG2", + }; + + + [TestMethod] + public async Task ChargeAsync() + { + var transaction = new transactionRequestType + { + amount = 123.45m, + transactionType = transactionTypeEnum.authCaptureTransaction.ToString(), + payment = new paymentType + { + Item = new creditCardType + { + cardNumber = "4111111111111111", + expirationDate = "0349", + cardCode = "123" + } + }, + + billTo = new customerAddressType + { + firstName = "TestName", + lastName = "McTesterson", + address = "123 Here st.", + city = "Springville", + state = "WA", + zip = "00000" + } + }; + + var fullRequest = new createTransactionRequest + { + merchantAuthentication = MerchantAuthentication, + transactionRequest = transaction, + }; + + // Send the request. + var controller = new createTransactionController(fullRequest); + var response = await controller.ExecuteWithApiResponseAsync(AuthorizeNet.Environment.SANDBOX); + + Assert.IsNotNull(response); + } + + [TestMethod] + public void ChargeSync() + { + var transaction = new transactionRequestType + { + amount = 123.45m, + transactionType = transactionTypeEnum.authCaptureTransaction.ToString(), + payment = new paymentType + { + Item = new creditCardType + { + cardNumber = "4111111111111111", + expirationDate = "0349", + cardCode = "123" + } + }, + + billTo = new customerAddressType + { + firstName = "TestName", + lastName = "McTesterson", + address = "123 Here st.", + city = "Springville", + state = "WA", + zip = "00000" + } + }; + + var fullRequest = new createTransactionRequest + { + merchantAuthentication = MerchantAuthentication, + transactionRequest = transaction, + }; + + // Send the request. + var controller = new createTransactionController(fullRequest); + var response = controller.ExecuteWithApiResponse(AuthorizeNet.Environment.SANDBOX); + + Assert.IsNotNull(response); + } + + [TestMethod] + public async Task GetMerchangeDetails() + { + var controller = new getMerchantDetailsController(new getMerchantDetailsRequest + { + merchantAuthentication = MerchantAuthentication, + }); + + var response = await controller.ExecuteWithApiResponseAsync(AuthorizeNet.Environment.SANDBOX); + Assert.IsNotNull(response); + } + } +} diff --git a/AuthorizeNET/AuthorizeNET/Api/Contracts/V1/AnetApiSchema.generated.cs b/AuthorizeNET/AuthorizeNET/Api/Contracts/V1/AnetApiSchema.generated.cs index 22f6d2a..1c2d370 100644 --- a/AuthorizeNET/AuthorizeNET/Api/Contracts/V1/AnetApiSchema.generated.cs +++ b/AuthorizeNET/AuthorizeNET/Api/Contracts/V1/AnetApiSchema.generated.cs @@ -6450,6 +6450,9 @@ public enum paymentMethodsTypeEnum { /// AndroidPay, + + /// + GooglePay, } /// diff --git a/AuthorizeNET/AuthorizeNET/Api/Controllers/Bases/ApiOperationBase.cs b/AuthorizeNET/AuthorizeNET/Api/Controllers/Bases/ApiOperationBase.cs index 26c2c67..7a348df 100644 --- a/AuthorizeNET/AuthorizeNET/Api/Controllers/Bases/ApiOperationBase.cs +++ b/AuthorizeNET/AuthorizeNET/Api/Controllers/Bases/ApiOperationBase.cs @@ -6,6 +6,8 @@ namespace AuthorizeNet.Api.Controllers.Bases using Contracts.V1; using Utilities; using Microsoft.Extensions.Logging; + using System.Threading.Tasks; + using AuthorizeNET.Utilities; public abstract class ApiOperationBase : IApiOperation where TQ : ANetApiRequest @@ -29,7 +31,7 @@ protected ApiOperationBase(TQ apiRequest) if (null == apiRequest) { Logger.LogError("null apiRequest"); - throw new ArgumentNullException("apiRequest", "Input request cannot be null"); + throw new ArgumentNullException(nameof(apiRequest), "Input request cannot be null"); } if (null != GetApiResponse()) { @@ -81,16 +83,22 @@ public TS ExecuteWithApiResponse(AuthorizeNet.Environment environment = null) return GetApiResponse(); } + public async Task ExecuteWithApiResponseAsync(AuthorizeNet.Environment environment = null) + { + await ExecuteAsync(environment).ConfigureAwait(false); + return GetApiResponse(); + } + const String NullEnvironmentErrorMessage = "Environment not set. Set environment using setter or use overloaded method to pass appropriate environment"; - public void Execute(AuthorizeNet.Environment environment = null) + public async Task ExecuteAsync(AuthorizeNet.Environment environment = null) { BeforeExecute(); if (null == environment) { environment = ApiOperationBase.RunEnvironment; } if (null == environment) throw new ArgumentException(NullEnvironmentErrorMessage); - var httpApiResponse = HttpUtility.PostData(environment, GetApiRequest()); + var httpApiResponse = await HttpUtility.PostDataAsync(environment, GetApiRequest()).ConfigureAwait(false); if (null != httpApiResponse) { @@ -122,6 +130,11 @@ public void Execute(AuthorizeNet.Environment environment = null) AfterExecute(); } + public void Execute(AuthorizeNet.Environment environment = null) + { + AsyncUtil.RunSync(() => ExecuteAsync(environment)); + } + public messageTypeEnum GetResultCode() { return ResultCode; @@ -171,6 +184,7 @@ private messagesType GetResultMessage() protected messageTypeEnum ResultCode = messageTypeEnum.Ok; protected virtual void BeforeExecute() { } + protected virtual void AfterExecute() { } protected abstract void ValidateRequest(); @@ -181,7 +195,7 @@ private void Validate() ValidateAndSetMerchantAuthentication(); //set the client Id - SetClientId(); + SetClientId(); ValidateRequest(); } diff --git a/AuthorizeNET/AuthorizeNET/Api/Controllers/Bases/IApiOperation.cs b/AuthorizeNET/AuthorizeNET/Api/Controllers/Bases/IApiOperation.cs index e3ffcf3..5dff17c 100644 --- a/AuthorizeNET/AuthorizeNET/Api/Controllers/Bases/IApiOperation.cs +++ b/AuthorizeNET/AuthorizeNET/Api/Controllers/Bases/IApiOperation.cs @@ -1,6 +1,7 @@ namespace AuthorizeNet.Api.Controllers.Bases { using System.Collections.Generic; + using System.Threading.Tasks; /** * @author ramittal @@ -12,10 +13,19 @@ public interface IApiOperation where TS : AuthorizeNet.Api.Contracts.V1.ANetApiResponse { TS GetApiResponse(); + AuthorizeNet.Api.Contracts.V1.ANetApiResponse GetErrorResponse(); + TS ExecuteWithApiResponse(AuthorizeNet.Environment environment = null); + + Task ExecuteWithApiResponseAsync(AuthorizeNet.Environment environment = null); + void Execute(AuthorizeNet.Environment environment = null); + + Task ExecuteAsync(AuthorizeNet.Environment environment = null); + AuthorizeNet.Api.Contracts.V1.messageTypeEnum GetResultCode(); + List GetResults(); } #pragma warning restore 1591 diff --git a/AuthorizeNET/AuthorizeNET/AuthorizeNET.csproj b/AuthorizeNET/AuthorizeNET/AuthorizeNET.csproj index 8075368..5adaaf4 100644 --- a/AuthorizeNET/AuthorizeNET/AuthorizeNET.csproj +++ b/AuthorizeNET/AuthorizeNET/AuthorizeNET.csproj @@ -1,21 +1,24 @@  - netcoreapp2.0 - 1.0.0.0 + netstandard2.0 + 0.1.3-beta + AuthorizeNet.DotNetCore + https://github.com/AuthorizeNet/dotnet-core-sdk-beta + Payments API Authorize.Net + Authorize.Net + Authorize.Net + true + MIT + Use this SDK to integrate with the Authorize.Net APIs for Payment Transactions, Recurring Billing and Customer Payment Profiles. + Authorize.Net - bin\Release\netcoreapp2.0\AuthorizeNET.xml + bin\Release\netstandard2.0\AuthorizeNET.xml - - - - - - @@ -23,7 +26,6 @@ - diff --git a/AuthorizeNET/AuthorizeNET/Utilities/AsyncHelpers.cs b/AuthorizeNET/AuthorizeNET/Utilities/AsyncHelpers.cs new file mode 100644 index 0000000..a0012e1 --- /dev/null +++ b/AuthorizeNET/AuthorizeNET/Utilities/AsyncHelpers.cs @@ -0,0 +1,25 @@ +using System; +using System.Globalization; +using System.Threading; +using System.Threading.Tasks; + +namespace AuthorizeNET.Utilities +{ + internal static class AsyncUtil + { + private static readonly TaskFactory taskFactory = new + TaskFactory(CancellationToken.None, TaskCreationOptions.None, TaskContinuationOptions.None, TaskScheduler.Default); + + public static void RunSync(Func func) + { + var cultureUi = CultureInfo.CurrentUICulture; + var culture = CultureInfo.CurrentCulture; + taskFactory.StartNew(() => + { + Thread.CurrentThread.CurrentCulture = culture; + Thread.CurrentThread.CurrentUICulture = cultureUi; + return func(); + }).Unwrap().GetAwaiter().GetResult(); + } + } +} diff --git a/AuthorizeNET/AuthorizeNET/Utilities/HttpUtility.cs b/AuthorizeNET/AuthorizeNET/Utilities/HttpUtility.cs index 858475a..32cfbfe 100644 --- a/AuthorizeNET/AuthorizeNET/Utilities/HttpUtility.cs +++ b/AuthorizeNET/AuthorizeNET/Utilities/HttpUtility.cs @@ -1,14 +1,15 @@ namespace AuthorizeNet.Utilities { - using Api.Contracts.V1; - using Api.Controllers.Bases; - using Microsoft.Extensions.Logging; - using System; - using System.Net.Http; - using System.Text; - using System.Net; + using Api.Contracts.V1; + using Api.Controllers.Bases; + using Microsoft.Extensions.Logging; + using System; + using System.Net; + using System.Net.Http; + using System.Text; + using System.Threading.Tasks; - public static class HttpUtility + public static class HttpUtility { private static readonly ILogger Logger = LogFactory.getLog(typeof(HttpUtility)); @@ -22,7 +23,7 @@ private static Uri GetPostUrl(AuthorizeNet.Environment env) return postUrl; } - public static ANetApiResponse PostData(AuthorizeNet.Environment env, TQ request) + public static async Task PostDataAsync(AuthorizeNet.Environment env, TQ request) where TQ : ANetApiRequest where TS : ANetApiResponse { @@ -45,12 +46,12 @@ public static ANetApiResponse PostData(AuthorizeNet.Environment env, TQ var httpConnectionTimeout = AuthorizeNet.Environment.getIntProperty(Constants.HttpConnectionTimeout); client.Timeout = TimeSpan.FromMilliseconds(httpConnectionTimeout != 0 ? httpConnectionTimeout : Constants.HttpConnectionDefaultTimeout); var content = new StringContent(XmlUtility.Serialize(request), Encoding.UTF8, "text/xml"); - var webResponse = client.PostAsync(postUrl, content).Result; + var webResponse = await client.PostAsync(postUrl, content).ConfigureAwait(false); Logger.LogDebug("Retrieving Response from Url: '{0}'", postUrl); // Get the response Logger.LogDebug("Received Response: '{0}'", webResponse); - responseAsString = webResponse.Content.ReadAsStringAsync().Result; + responseAsString = await webResponse.Content.ReadAsStringAsync().ConfigureAwait(false); Logger.LogDebug("Response from Stream: '{0}'", responseAsString); } diff --git a/AuthorizeNET/AuthorizeNET/Utilities/LogFactory.cs b/AuthorizeNET/AuthorizeNET/Utilities/LogFactory.cs index 8f0ad06..5ca6549 100644 --- a/AuthorizeNET/AuthorizeNET/Utilities/LogFactory.cs +++ b/AuthorizeNET/AuthorizeNET/Utilities/LogFactory.cs @@ -3,13 +3,32 @@ using System; using Microsoft.Extensions.Logging; + /// + /// Configures + /// public static class LogFactory { - private static ILoggerFactory LoggerFactory => new LoggerFactory().AddDebug(LogLevel.Debug); + private static ILoggerFactory _factory => new LoggerFactory(); + /// + /// The logger factory instance used to create logger instances for the XML serializer, + /// API operations, and HTTP utilities. Use this property to add providers to such as + /// the debugger factory: + /// + /// + /// LogFactory.Factory.AddDebug(LogLevel.Debug); + /// + /// + public static ILoggerFactory Factory => _factory; + + /// + /// Get a logger instance for the given class type. + /// + /// + /// public static ILogger getLog(Type classType) { - return LoggerFactory.CreateLogger(classType.FullName); + return _factory.CreateLogger(classType.FullName); } } } \ No newline at end of file diff --git a/AuthorizeNET/AuthorizeNet.Core.sln b/AuthorizeNET/AuthorizeNet.Core.sln index 8edb9bb..3b76d35 100644 --- a/AuthorizeNET/AuthorizeNet.Core.sln +++ b/AuthorizeNET/AuthorizeNet.Core.sln @@ -1,10 +1,12 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27703.2018 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28803.352 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AuthorizeNET", "AuthorizeNET\AuthorizeNET.csproj", "{3F665C7E-A2E2-47E5-A032-E7D2F67AE165}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AuthorizeNET.Tests", "AuthorizeNET.Tests\AuthorizeNET.Tests.csproj", "{3B62287D-0B5F-4085-8D98-49E8CAE1F30A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +17,10 @@ Global {3F665C7E-A2E2-47E5-A032-E7D2F67AE165}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F665C7E-A2E2-47E5-A032-E7D2F67AE165}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F665C7E-A2E2-47E5-A032-E7D2F67AE165}.Release|Any CPU.Build.0 = Release|Any CPU + {3B62287D-0B5F-4085-8D98-49E8CAE1F30A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3B62287D-0B5F-4085-8D98-49E8CAE1F30A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3B62287D-0B5F-4085-8D98-49E8CAE1F30A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3B62287D-0B5F-4085-8D98-49E8CAE1F30A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/AuthorizeNetDotNetCore.nuspec b/AuthorizeNetDotNetCore.nuspec index 69b85b9..fea80d8 100644 --- a/AuthorizeNetDotNetCore.nuspec +++ b/AuthorizeNetDotNetCore.nuspec @@ -1,21 +1,21 @@ - - AuthorizeNet.DotnetCore - 1.0.0 - AuthorizeNet.DotnetCore - Authorize.Net - AuthorizeNet - https://github.com/AuthorizeNet/dotnet-core-sdk-beta/blob/master/LICENSE - https://github.com/AuthorizeNet/dotnet-core-sdk-beta - http://developer.authorize.net/resources/images/favicon.ico - false - Use this SDK to integrate with the Authorize.Net APIs for Payment Transactions, Recurring Billing and Customer Payment Profiles. - Authorize.Net SDK for .Net Core - Payments API Authorize.Net - - - - - + + AuthorizeNet.DotNetCore + 1.0.0-beta + AuthorizeNet.DotNetCore + Authorize.Net + AuthorizeNet + https://github.com/AuthorizeNet/dotnet-core-sdk-beta/blob/master/LICENSE + https://github.com/AuthorizeNet/dotnet-core-sdk-beta + http://developer.authorize.net/resources/images/favicon.ico + false + Use this SDK to integrate with the Authorize.Net APIs for Payment Transactions, Recurring Billing and Customer Payment Profiles. + Authorize.Net SDK for .Net Core + Payments API Authorize.Net + + + + + \ No newline at end of file diff --git a/README.md b/README.md index 1ed2459..00dd595 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ## Requirements -* .NET Core 1.1.0 or later +* .NET Standard 2.0 or later (.Net Framework 4.6.1) * Microsoft® Visual Studio 2017 or later * An Authorize.Net account (see _Registration & Configuration_ section below) diff --git a/ReleaseArtifact/AuthorizeNET.dll b/ReleaseArtifact/AuthorizeNET.dll deleted file mode 100644 index 4cf8670..0000000 Binary files a/ReleaseArtifact/AuthorizeNET.dll and /dev/null differ diff --git a/ReleaseArtifact/AuthorizeNET.xml b/ReleaseArtifact/AuthorizeNET.xml deleted file mode 100644 index 346f3fd..0000000 --- a/ReleaseArtifact/AuthorizeNET.xml +++ /dev/null @@ -1,3967 +0,0 @@ - - - - AuthorizeNET - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Special case handlers - - validated on ????/??/?? for objects listed at the end - should be validated after each update of AnetApiSchema.cs - for fields/properties that are minOccurs="0" since xsd.exe - generates "specified" property for such fields and requires - special handling to set them seamlessly - Make sure to update the respective controllers to call the respective request hand - - - - - Since JAXB does not generate the class for this element, custom coding it - @author ramittal - - - - @author ramittal - - - - - Gets the base url - - - - - Gets the xml base url - - - - - Gets the card present url - - - - - Create a custom environment with the specified base url - - Base url - Xml base url - The custom environment - - - - Create a custom environment with the specified base url - - Base url - Xml base url - Card present url - The custom environment - - - - Reads an integer value from the environment - - Name of the int property to read - Integer property value - - - - Reads a boolean value from the environment - - Name of the boolean property to read - Boolean property value - - - - Reads the value from the environment - - Name of the property to read - String property value - - - - Source Code from MSDN article http://msdn.microsoft.com/en-us/magazine/cc163367.aspx - - - -