diff --git a/README.md b/README.md index 9993e824b8..363b00fc0c 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ The Bing Ads Java SDK includes and depends on the microsoft.bingads Maven artifa com.microsoft.bingads microsoft.bingads - 13.0.19.1 + 14.0.0-SNAPSHOT ``` If you are not using a Maven project, you must include the correct version of each dependency. You can review the complete list of Bing Ads Java SDK dependencies at the [Maven Repository](http://mvnrepository.com/artifact/com.microsoft.bingads/microsoft.bingads/). diff --git a/pom.xml b/pom.xml index 47dc81c434..783bdb5969 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,7 @@ 4.0.0 com.microsoft.bingads - 13.0.19.1 + 14.0.0-SNAPSHOT Bing Ads Java SDK The Bing Ads Java SDK is a library improving developer experience when working with the Bing Ads services by providing high-level access to features such as Bulk API, OAuth Authorization and SOAP API. https://github.com/BingAds/BingAds-Java-SDK @@ -169,7 +169,17 @@ org.apache.cxf cxf-rt-transports-http ${cxf.version} - + + + org.apache.cxf + cxf-rt-rs-client + ${cxf.version} + + + org.apache.cxf + cxf-rt-features-logging + ${cxf.version} + org.apache.httpcomponents httpmime @@ -180,11 +190,6 @@ httpclient ${http.version} - - org.apache.httpcomponents - httpasyncclient - 4.1.5 - UTF-8 diff --git a/proxies/com/microsoft/bingads/v13/bulk/ApplicationFault.java b/proxies/com/microsoft/bingads/v13/bulk/ApplicationFault.java index bd9586ea13..831e69706f 100644 --- a/proxies/com/microsoft/bingads/v13/bulk/ApplicationFault.java +++ b/proxies/com/microsoft/bingads/v13/bulk/ApplicationFault.java @@ -41,6 +41,10 @@ public class ApplicationFault { @XmlElement(name = "Type", nillable = true) protected String type; + + public ApplicationFault() { + this.type = "ApplicationFault"; + } @XmlElement(name = "TrackingId", nillable = true) protected String trackingId; diff --git a/proxies/com/microsoft/bingads/v13/bulk/BatchError.java b/proxies/com/microsoft/bingads/v13/bulk/BatchError.java index ae3c63ea64..6e42814fbc 100644 --- a/proxies/com/microsoft/bingads/v13/bulk/BatchError.java +++ b/proxies/com/microsoft/bingads/v13/bulk/BatchError.java @@ -67,6 +67,10 @@ public class BatchError { @XmlElement(name = "Type", nillable = true) protected String type; + public BatchError() { + this.type = "BatchError"; + } + /** * Gets the value of the code property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/AdExtension.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/AdExtension.java index b646931fea..374aa51d3b 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/AdExtension.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/AdExtension.java @@ -76,6 +76,10 @@ public class AdExtension { protected AdExtensionStatus status; @XmlElement(name = "Type", nillable = true) protected String type; + + public AdExtension() { + this.type = "AdExtension"; + } @XmlElement(name = "Version", nillable = true) protected Integer version; diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/AdGroupCriterion.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/AdGroupCriterion.java index 14e4548fde..d273332ae8 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/AdGroupCriterion.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/AdGroupCriterion.java @@ -58,6 +58,10 @@ public class AdGroupCriterion { @XmlElement(name = "Type", nillable = true) protected String type; + public AdGroupCriterion() { + this.type = "AdGroupCriterion"; + } + /** * Gets the value of the adGroupId property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/ApplicationFault.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/ApplicationFault.java index bfac6474e3..03cea3f8ed 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/ApplicationFault.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/ApplicationFault.java @@ -42,6 +42,10 @@ public class ApplicationFault { @XmlElement(name = "Type", nillable = true) protected String type; + + public ApplicationFault() { + this.type = "ApplicationFault"; + } @XmlElement(name = "TrackingId", nillable = true) protected String trackingId; diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/Asset.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/Asset.java index 66632386f6..bc90ff18bf 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/Asset.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/Asset.java @@ -49,6 +49,10 @@ public class Asset { @XmlElement(name = "Type", nillable = true) protected String type; + public Asset() { + this.type = "Asset"; + } + /** * Gets the value of the id property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/BatchError.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/BatchError.java index ef8fdb5187..1c30d6f9d2 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/BatchError.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/BatchError.java @@ -67,6 +67,10 @@ public class BatchError { @XmlElement(name = "Type", nillable = true) protected String type; + public BatchError() { + this.type = "BatchError"; + } + /** * Gets the value of the code property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/BatchErrorCollection.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/BatchErrorCollection.java index 616ca38800..9c8c1e7753 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/BatchErrorCollection.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/BatchErrorCollection.java @@ -71,6 +71,10 @@ public class BatchErrorCollection { @XmlElement(name = "Type", nillable = true) protected String type; + public BatchErrorCollection() { + this.type = "BatchErrorCollection"; + } + /** * Gets the value of the batchErrors property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/BiddingScheme.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/BiddingScheme.java index f3f742c425..cb2970bed9 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/BiddingScheme.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/BiddingScheme.java @@ -54,6 +54,10 @@ public class BiddingScheme { @XmlElement(name = "Type", nillable = true) protected String type; + public BiddingScheme() { + this.type = "BiddingScheme"; + } + /** * Gets the value of the type property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/CampaignCriterion.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/CampaignCriterion.java index e77954bfd6..b18da682e2 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/CampaignCriterion.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/CampaignCriterion.java @@ -62,6 +62,10 @@ public class CampaignCriterion { @XmlElement(name = "Type", nillable = true) protected String type; + public CampaignCriterion() { + this.type = "CampaignCriterion"; + } + /** * Gets the value of the campaignId property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/Criterion.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/Criterion.java index a9e35feebd..62a5b81d75 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/Criterion.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/Criterion.java @@ -59,6 +59,10 @@ public class Criterion { @XmlElement(name = "Type", nillable = true) protected String type; + public Criterion() { + this.type = "Criterion"; + } + /** * Gets the value of the type property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/CriterionBid.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/CriterionBid.java index 973f92267d..58f3c0885d 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/CriterionBid.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/CriterionBid.java @@ -41,6 +41,10 @@ public class CriterionBid { @XmlElement(name = "Type", nillable = true) protected String type; + public CriterionBid() { + this.type = "CriterionBid"; + } + /** * Gets the value of the type property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/CriterionCashback.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/CriterionCashback.java index 16aeaf9bfd..62a30490d7 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/CriterionCashback.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/CriterionCashback.java @@ -39,6 +39,10 @@ public class CriterionCashback { @XmlElement(name = "Type", nillable = true) protected String type; + public CriterionCashback() { + this.type = "CriterionCashback"; + } + /** * Gets the value of the type property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/GoogleImportOption.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/GoogleImportOption.java index 706350c574..598b951a2c 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/GoogleImportOption.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/GoogleImportOption.java @@ -37,6 +37,7 @@ * * * + * * * * @@ -92,6 +93,7 @@ * * * + * * * * @@ -147,6 +149,7 @@ "newAudienceTargets", "newCallAdExtensions", "newCalloutAdExtensions", + "newConversionGoals", "newDemographicTargets", "newDeviceTargets", "newEntities", @@ -202,6 +205,7 @@ "updateCampaignAdGroupLanguages", "updateCampaignBudgets", "updateCampaignNames", + "updateConversionGoals", "updateDemographicTargets", "updateDeviceTargets", "updateEntities", @@ -275,6 +279,8 @@ public GoogleImportOption() { protected Boolean newCallAdExtensions; @XmlElement(name = "NewCalloutAdExtensions", nillable = true) protected Boolean newCalloutAdExtensions; + @XmlElement(name = "NewConversionGoals", nillable = true) + protected Boolean newConversionGoals; @XmlElement(name = "NewDemographicTargets", nillable = true) protected Boolean newDemographicTargets; @XmlElement(name = "NewDeviceTargets", nillable = true) @@ -385,6 +391,8 @@ public GoogleImportOption() { protected Boolean updateCampaignBudgets; @XmlElement(name = "UpdateCampaignNames", nillable = true) protected Boolean updateCampaignNames; + @XmlElement(name = "UpdateConversionGoals", nillable = true) + protected Boolean updateConversionGoals; @XmlElement(name = "UpdateDemographicTargets", nillable = true) protected Boolean updateDemographicTargets; @XmlElement(name = "UpdateDeviceTargets", nillable = true) @@ -916,6 +924,30 @@ public void setNewCalloutAdExtensions(Boolean value) { this.newCalloutAdExtensions = value; } + /** + * Gets the value of the newConversionGoals property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean getNewConversionGoals() { + return newConversionGoals; + } + + /** + * Sets the value of the newConversionGoals property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setNewConversionGoals(Boolean value) { + this.newConversionGoals = value; + } + /** * Gets the value of the newDemographicTargets property. * @@ -2236,6 +2268,30 @@ public void setUpdateCampaignNames(Boolean value) { this.updateCampaignNames = value; } + /** + * Gets the value of the updateConversionGoals property. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean getUpdateConversionGoals() { + return updateConversionGoals; + } + + /** + * Sets the value of the updateConversionGoals property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setUpdateConversionGoals(Boolean value) { + this.updateConversionGoals = value; + } + /** * Gets the value of the updateDemographicTargets property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/ImportAdditionalField.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/ImportAdditionalField.java index 7f5818251d..613baef791 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/ImportAdditionalField.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/ImportAdditionalField.java @@ -23,7 +23,9 @@ public enum ImportAdditionalField { UPDATE_LEAD_FORM_AD_EXTENSIONS("UpdateLeadFormAdExtensions"), NEW_ACCOUNT_NEGATIVE_KEYWORDS("NewAccountNegativeKeywords"), UPDATE_ACCOUNT_NEGATIVE_KEYWORDS("UpdateAccountNegativeKeywords"), - UPDATE_AD_CUSTOMIZER_ATTRIBUTES("UpdateAdCustomizerAttributes"); + UPDATE_AD_CUSTOMIZER_ATTRIBUTES("UpdateAdCustomizerAttributes"), + NEW_CONVERSION_GOALS("NewConversionGoals"), + UPDATE_CONVERSION_GOALS("UpdateConversionGoals"); private final String value; diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/ImportJob.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/ImportJob.java index 1bfb638fd1..e3a272f76f 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/ImportJob.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/ImportJob.java @@ -91,6 +91,10 @@ public class ImportJob { @XmlElement(name = "Type", nillable = true) protected String type; + public ImportJob() { + this.type = "ImportJob"; + } + /** * Gets the value of the createdByUserId property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/ImportOption.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/ImportOption.java index 928e52a601..08b835bec3 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/ImportOption.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/ImportOption.java @@ -44,6 +44,10 @@ public class ImportOption { @XmlElement(name = "Type", nillable = true) protected String type; + public ImportOption() { + this.type = "ImportOption"; + } + /** * Gets the value of the forwardCompatibilityMap property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/Media.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/Media.java index f3633015cf..637884b434 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/Media.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/Media.java @@ -47,6 +47,10 @@ public class Media { @XmlElement(name = "Type", nillable = true) protected String type; + public Media() { + this.type = "Media"; + } + /** * Gets the value of the id property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/MediaRepresentation.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/MediaRepresentation.java index ca6f31069b..46af45935e 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/MediaRepresentation.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/MediaRepresentation.java @@ -44,6 +44,10 @@ public class MediaRepresentation { protected String name; @XmlElement(name = "Type", nillable = true) protected String type; + + public MediaRepresentation() { + this.type = "MediaRepresentation"; + } @XmlElement(name = "Url", nillable = true) protected String url; diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/RemarketingRule.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/RemarketingRule.java index 8c618318e1..8f2d2ffefd 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/RemarketingRule.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/RemarketingRule.java @@ -42,6 +42,10 @@ public class RemarketingRule { @XmlElement(name = "Type", nillable = true) protected String type; + public RemarketingRule() { + this.type = "RemarketingRule"; + } + /** * Gets the value of the type property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/RuleItem.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/RuleItem.java index 9181593204..d63c409663 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/RuleItem.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/RuleItem.java @@ -40,6 +40,10 @@ public class RuleItem { @XmlElement(name = "Type", nillable = true) protected String type; + public RuleItem() { + this.type = "RuleItem"; + } + /** * Gets the value of the type property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/Setting.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/Setting.java index 775fee5132..6205b143d3 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/Setting.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/Setting.java @@ -49,6 +49,10 @@ public class Setting { @XmlElement(name = "Type", nillable = true) protected String type; + public Setting() { + this.type = "Setting"; + } + /** * Gets the value of the type property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/SharedEntity.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/SharedEntity.java index da4738a849..72b67b3614 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/SharedEntity.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/SharedEntity.java @@ -55,6 +55,10 @@ public class SharedEntity { @XmlElement(name = "Type", nillable = true) protected String type; + public SharedEntity() { + this.type = "SharedEntity"; + } + /** * Gets the value of the associationCount property. * diff --git a/proxies/com/microsoft/bingads/v13/campaignmanagement/SharedListItem.java b/proxies/com/microsoft/bingads/v13/campaignmanagement/SharedListItem.java index 87495f8526..c8d2ad2684 100644 --- a/proxies/com/microsoft/bingads/v13/campaignmanagement/SharedListItem.java +++ b/proxies/com/microsoft/bingads/v13/campaignmanagement/SharedListItem.java @@ -45,6 +45,10 @@ public class SharedListItem { @XmlElement(name = "Type", nillable = true) protected String type; + public SharedListItem() { + this.type = "SharedListItem"; + } + /** * Gets the value of the forwardCompatibilityMap property. * diff --git a/proxies/com/microsoft/bingads/v13/reporting/ApplicationFault.java b/proxies/com/microsoft/bingads/v13/reporting/ApplicationFault.java index cab3dd7477..fba9cc94e8 100644 --- a/proxies/com/microsoft/bingads/v13/reporting/ApplicationFault.java +++ b/proxies/com/microsoft/bingads/v13/reporting/ApplicationFault.java @@ -41,6 +41,10 @@ public class ApplicationFault { @XmlElement(name = "Type", nillable = true) protected String type; + + public ApplicationFault() { + this.type = "ApplicationFault"; + } @XmlElement(name = "TrackingId", nillable = true) protected String trackingId; diff --git a/proxies/com/microsoft/bingads/v13/reporting/ReportRequest.java b/proxies/com/microsoft/bingads/v13/reporting/ReportRequest.java index 61f3b5f3d3..fe69284259 100644 --- a/proxies/com/microsoft/bingads/v13/reporting/ReportRequest.java +++ b/proxies/com/microsoft/bingads/v13/reporting/ReportRequest.java @@ -88,6 +88,13 @@ public class ReportRequest { @XmlElement(name = "Type", nillable = true) protected String type; + public String getType() { + return type; + } + + public ReportRequest() { + this.type = "ReportRequest"; + } @XmlElement(name = "ExcludeColumnHeaders", nillable = true) protected Boolean excludeColumnHeaders; @XmlElement(name = "ExcludeReportFooter", nillable = true) diff --git a/src/main/java/com/microsoft/bingads/InternalException.java b/src/main/java/com/microsoft/bingads/InternalException.java index 09a86c9063..8aef8e4591 100644 --- a/src/main/java/com/microsoft/bingads/InternalException.java +++ b/src/main/java/com/microsoft/bingads/InternalException.java @@ -7,4 +7,8 @@ public class InternalException extends RuntimeException { public InternalException(Throwable cause) { super("Internal BingAds SDK exception has occured", cause); } + + public InternalException(String message) { + super("Internal BingAds SDK exception has occured: " + message); + } } diff --git a/src/main/java/com/microsoft/bingads/RestfulServiceFactory.java b/src/main/java/com/microsoft/bingads/RestfulServiceFactory.java index 423942d167..5284fe501a 100644 --- a/src/main/java/com/microsoft/bingads/RestfulServiceFactory.java +++ b/src/main/java/com/microsoft/bingads/RestfulServiceFactory.java @@ -1,25 +1,27 @@ package com.microsoft.bingads; -import com.microsoft.bingads.ApiEnvironment; -import com.microsoft.bingads.AuthorizationData; -import com.microsoft.bingads.internal.restful.CampaignManagementRestfulServiceClient; -import com.microsoft.bingads.internal.restful.ReportingRestfulServiceClient; -import com.microsoft.bingads.internal.restful.BulkRestfulServiceClient; -import com.microsoft.bingads.internal.restful.RestfulServiceClient; +import java.util.Map; +import java.util.function.Supplier; + +import com.microsoft.bingads.internal.restful.CampaignManagementService; +import com.microsoft.bingads.internal.restful.ReportingService; +import com.microsoft.bingads.internal.restful.BulkService; +import com.microsoft.bingads.v13.bulk.IBulkService; +import com.microsoft.bingads.v13.campaignmanagement.ICampaignManagementService; +import com.microsoft.bingads.v13.reporting.IReportingService; public class RestfulServiceFactory { - public static RestfulServiceClient createServiceClient(AuthorizationData authorizationData, ApiEnvironment environment, Class serviceInterface) { - switch (serviceInterface.getSimpleName()) { - case "ICampaignManagementService": - return new CampaignManagementRestfulServiceClient(authorizationData, environment, serviceInterface); - case "IBulkService": - return new BulkRestfulServiceClient(authorizationData, environment, serviceInterface); - case "IReportingService": - return new ReportingRestfulServiceClient(authorizationData, environment, serviceInterface); + public static T createServiceClient(Map headers, ApiEnvironment environment, Class serviceInterface, Supplier createSoapPort) { + if (serviceInterface == ICampaignManagementService.class) { + return serviceInterface.cast(new CampaignManagementService(headers, environment, () -> (ICampaignManagementService)createSoapPort.get())); + } + if (serviceInterface == IBulkService.class) { + return serviceInterface.cast(new BulkService(headers, environment, () -> (IBulkService)createSoapPort.get())); } - - return null; + if (serviceInterface == IReportingService.class) { + return serviceInterface.cast(new ReportingService(headers, environment, () -> (IReportingService)createSoapPort.get())); + } + throw new InternalException(new Exception("Unknown service interface " + serviceInterface)); } - } diff --git a/src/main/java/com/microsoft/bingads/ServiceClient.java b/src/main/java/com/microsoft/bingads/ServiceClient.java index ddc7abc16b..cee2e117a3 100644 --- a/src/main/java/com/microsoft/bingads/ServiceClient.java +++ b/src/main/java/com/microsoft/bingads/ServiceClient.java @@ -1,14 +1,9 @@ package com.microsoft.bingads; -import java.util.logging.Logger; import java.util.Map; import java.util.HashMap; import java.util.List; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; import java.util.Arrays; -import jakarta.jws.WebService; import jakarta.xml.ws.BindingProvider; import jakarta.xml.ws.Service; import jakarta.xml.ws.handler.Handler; @@ -21,7 +16,7 @@ import com.microsoft.bingads.internal.ServiceFactory; import com.microsoft.bingads.internal.ServiceFactoryFactory; import com.microsoft.bingads.internal.ServiceUtils; -import com.microsoft.bingads.internal.restful.RestfulServiceClient; +import com.microsoft.bingads.internal.utilities.Lazy; import com.microsoft.bingads.v13.adinsight.IAdInsightService; import com.microsoft.bingads.v13.bulk.IBulkService; import com.microsoft.bingads.v13.campaignmanagement.ICampaignManagementService; @@ -34,6 +29,7 @@ *

* Note: Valid value of {@link T} are: *

    + *
  • {@link IAdInsightService}
  • *
  • {@link IBulkService}
  • *
  • {@link ICampaignManagementService}
  • *
  • {@link ICustomerBillingService}
  • @@ -47,15 +43,12 @@ * */ public class ServiceClient { - private static Logger logger = Logger.getLogger(ServiceClient.class.getName()); - private final AuthorizationData authorizationData; private final Class serviceInterface; - private final Service service; private final ServiceFactory serviceFactory; private ApiEnvironment environment; - private RestfulServiceClient restService; + private final Lazy service; /** * Gets the Bing Ads API environment. @@ -71,27 +64,14 @@ public AuthorizationData getAuthorizationData() { return authorizationData; } - private static HashMap, Boolean> EnableRestApiDefault = new HashMap, Boolean>() {{ - put(ICampaignManagementService.class, false); - put(IBulkService.class, false); - put(IReportingService.class, false); - put(ICustomerManagementService.class, false); - put(ICustomerBillingService.class, false); - put(IAdInsightService.class, false); - }}; - - public static void setRestApiEnabledDefault(Class serviceClass, boolean restApiEnabled) { - EnableRestApiDefault.replace(serviceClass, restApiEnabled); - } - - public static boolean getRestApiEnabledDefault(Class serviceClass) { - Boolean restApiEnabled = EnableRestApiDefault.get(serviceClass); - - if (restApiEnabled == null) { - return false; + private static boolean getDisableRestApi(Class serviceClass) { + if (serviceClass == ICustomerManagementService.class || + serviceClass == ICustomerBillingService.class || + serviceClass == IAdInsightService.class) { + return true; } - return restApiEnabled; + return ServiceUtils.getDisableRestApi(serviceClass); } /** @@ -101,12 +81,8 @@ public static boolean getRestApiEnabledDefault(Class serviceClass) { * @param serviceInterface the Bing Ads service interface that should be called */ public ServiceClient(AuthorizationData authorizationData, Class serviceInterface) { - this(authorizationData, null, serviceInterface, getRestApiEnabledDefault(serviceInterface)); - } - - public ServiceClient(AuthorizationData authorizationData, ApiEnvironment environment, Class serviceInterface) { - this(authorizationData, environment, serviceInterface, getRestApiEnabledDefault(serviceInterface)); - } + this(authorizationData, null, serviceInterface); + } /** * Initializes a new instance of this class with the specified authorization data and Bing Ads API environment. @@ -115,7 +91,7 @@ public ServiceClient(AuthorizationData authorizationData, ApiEnvironment environ * @param environment Bing Ads API environment * @param serviceInterface the Bing Ads service interface that should be called */ - public ServiceClient(AuthorizationData authorizationData, ApiEnvironment environment, Class serviceInterface, boolean enableRestApi) { + public ServiceClient(AuthorizationData authorizationData, ApiEnvironment environment, Class serviceInterface) { this.authorizationData = authorizationData; this.serviceInterface = serviceInterface; @@ -137,18 +113,18 @@ public ServiceClient(AuthorizationData authorizationData, ApiEnvironment environ serviceFactory = ServiceFactoryFactory.createServiceFactory(); - service = serviceFactory.createService(serviceInterface, environment); + service = new Lazy(() -> { + Service newService = serviceFactory.createService(this.serviceInterface, this.environment); - service.setHandlerResolver(new HandlerResolver() { - @Override - public List getHandlerChain(PortInfo portInfo) { - return Arrays.asList(HeaderHandler.getInstance(), MessageHandler.getInstance()); - } + newService.setHandlerResolver(new HandlerResolver() { + @Override + public List getHandlerChain(PortInfo portInfo) { + return Arrays.asList(HeaderHandler.getInstance(), MessageHandler.getInstance()); + } + }); + + return newService; }); - - if (enableRestApi) { - restService = RestfulServiceFactory.createServiceClient(authorizationData, environment, serviceInterface); - } } /** @@ -159,6 +135,16 @@ public List getHandlerChain(PortInfo portInfo) { public T getService() { authorizationData.validate(); + final Map headers = buildHeaders(); + + if (getDisableRestApi(serviceInterface)) { + return createSoapPort(headers); + } + + return createRestService(headers); + } + + private Map buildHeaders() { final Map headers = new HashMap(); headers.put("CustomerAccountId", Long.toString(authorizationData.getAccountId())); @@ -167,49 +153,31 @@ public T getService() { headers.put("DeveloperToken", authorizationData.getDeveloperToken()); - refreshOAuthTokensIfNeeded(); + Authentication authentication = authorizationData.getAuthentication(); - this.authorizationData.getAuthentication().addHeaders(new HeadersImpl() { + if (authentication instanceof OAuthWithAuthorizationCode) { + ((OAuthWithAuthorizationCode) authentication).refreshTokensIfNeeded(false); + } + + authentication.addHeaders(new HeadersImpl() { @Override public void addHeader(String name, String value) { headers.put(name, value); } }); - T port = serviceFactory.createProxyFromService(service, environment, serviceInterface); + return headers; + } + + T createSoapPort(Map headers) { + T port = serviceFactory.createProxyFromService(service.getValue(), environment, serviceInterface); ((BindingProvider) port).getRequestContext().put(ServiceUtils.REQUEST_HEADERS_KEY, headers); - - if (restService == null) { - return port; - } - else { - restService.setSoapService(port); - - return (T) Proxy.newProxyInstance(port.getClass().getClassLoader(), port.getClass().getInterfaces(), new InvocationHandler() { - @Override - public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - String methodName = method.getName(); - Method delegationMethod = restService.getClass().getMethod(methodName, method.getParameterTypes()); - Object response = null; - try { - response = delegationMethod.invoke(restService, args); - } - catch (Exception e) - { - throw e.getCause(); - } - return response; - } - }); - } - } - private void refreshOAuthTokensIfNeeded() { - if (authorizationData.getAuthentication() instanceof OAuthWithAuthorizationCode) { - OAuthWithAuthorizationCode auth = (OAuthWithAuthorizationCode) authorizationData.getAuthentication(); + return port; + } - auth.refreshTokensIfNeeded(false); - } + T createRestService(Map headers) { + return RestfulServiceFactory.createServiceClient(headers, environment, serviceInterface, () -> createSoapPort(headers)); } } diff --git a/src/main/java/com/microsoft/bingads/internal/CxfUtils.java b/src/main/java/com/microsoft/bingads/internal/CxfUtils.java new file mode 100644 index 0000000000..d60f5f06b1 --- /dev/null +++ b/src/main/java/com/microsoft/bingads/internal/CxfUtils.java @@ -0,0 +1,33 @@ +package com.microsoft.bingads.internal; + +import java.util.function.Consumer; +import java.util.function.Supplier; + +import org.apache.cxf.Bus; +import org.apache.cxf.BusFactory; +import org.apache.cxf.ext.logging.LoggingFeature; +import org.apache.cxf.feature.Feature; + +public class CxfUtils { + public static T runOnNewBus(Supplier func, Consumer customizeLogging) { + Bus newBus = BusFactory.newInstance().createBus(); + + for (Feature feature : newBus.getFeatures()) { + if (feature instanceof LoggingFeature) { + LoggingFeature loggingFeature = (LoggingFeature)feature; + + customizeLogging.accept(loggingFeature); + + break; + } + } + + Bus oldBus = BusFactory.getAndSetThreadDefaultBus(newBus); + + try { + return func.get(); + } finally { + BusFactory.setThreadDefaultBus(oldBus); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/microsoft/bingads/internal/HeaderHandler.java b/src/main/java/com/microsoft/bingads/internal/HeaderHandler.java index e853ec05ad..0dd81e1ef4 100644 --- a/src/main/java/com/microsoft/bingads/internal/HeaderHandler.java +++ b/src/main/java/com/microsoft/bingads/internal/HeaderHandler.java @@ -1,7 +1,6 @@ package com.microsoft.bingads.internal; import javax.xml.namespace.QName; -import jakarta.xml.soap.SOAPEnvelope; import jakarta.xml.soap.SOAPHeader; import jakarta.xml.soap.SOAPMessage; import jakarta.xml.ws.handler.MessageContext; @@ -29,12 +28,15 @@ public boolean handleMessage(SOAPMessageContext context) { Boolean outbound = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); if (outbound) { SOAPMessage message = context.getMessage(); - SOAPHeader header = message.getSOAPHeader(); - SOAPEnvelope envelope = message.getSOAPPart().getEnvelope(); - if (header == null) { - header = envelope.addHeader(); + + SOAPHeader tempHeader = message.getSOAPHeader(); + + if (tempHeader == null) { + tempHeader = message.getSOAPPart().getEnvelope().addHeader(); } + final SOAPHeader header = tempHeader; + Map headers = (Map)context.get(ServiceUtils.REQUEST_HEADERS_KEY); String namespaceURI = ((QName)context.get(MessageContext.WSDL_INTERFACE)).getNamespaceURI(); diff --git a/src/main/java/com/microsoft/bingads/internal/ResultFuture.java b/src/main/java/com/microsoft/bingads/internal/ResultFuture.java index 1dbe6ea428..0557fb9809 100644 --- a/src/main/java/com/microsoft/bingads/internal/ResultFuture.java +++ b/src/main/java/com/microsoft/bingads/internal/ResultFuture.java @@ -8,7 +8,7 @@ public class ResultFuture implements Future { - final AsyncCallback handler; + protected AsyncCallback handler; protected T result; protected Throwable exception; @@ -23,33 +23,39 @@ public void setResult(T res) { result = res; if (handler != null) { - handler.onCompleted(new Future() { - @Override - public boolean cancel(boolean mayInterruptIfRunning) { - cancelled = true; - return true; - } - - @Override - public boolean isCancelled() { - return cancelled; - } - - @Override - public boolean isDone() { - return true; - } - - @Override - public T get() throws InterruptedException, ExecutionException { - return result; - } - - @Override - public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { - return result; - } - }); + try { + handler.onCompleted(new Future() { + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + cancelled = true; + return true; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public boolean isDone() { + return true; + } + + @Override + public T get() throws InterruptedException, ExecutionException { + return result; + } + + @Override + public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { + return result; + } + }); + } catch (Throwable t) { + setException(t, false); + + return; + } } done = true; @@ -123,38 +129,48 @@ public T get(long timeout, TimeUnit unit) throws InterruptedException, Execution } public void setException(final Throwable ex) { - exception = ex instanceof ExecutionException - ? ex.getCause() - : ex; + setException(ex, true); + } - if (handler != null) { - handler.onCompleted(new Future() { - @Override - public boolean cancel(boolean mayInterruptIfRunning) { - cancelled = true; - return true; - } - - @Override - public boolean isCancelled() { - return cancelled; - } - - @Override - public boolean isDone() { - return true; - } - - @Override - public T get() throws InterruptedException, ExecutionException { - throw new ExecutionException(exception); - } - - @Override - public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { - throw new ExecutionException(exception); - } - }); + private void setException(final Throwable ex, boolean invokeHandler) { + exception = ex instanceof ExecutionException + ? ex.getCause() + : ex; + + if (invokeHandler && handler != null) { + try { + handler.onCompleted(new Future() { + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + cancelled = true; + return true; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public boolean isDone() { + return true; + } + + @Override + public T get() throws InterruptedException, ExecutionException { + throw new ExecutionException(exception); + } + + @Override + public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { + throw new ExecutionException(exception); + } + }); + } catch (Throwable t) { + setException(t, false); + + return; + } } done = true; diff --git a/src/main/java/com/microsoft/bingads/internal/ServiceFactoryImpl.java b/src/main/java/com/microsoft/bingads/internal/ServiceFactoryImpl.java index f9669afbe4..ed46f3f183 100644 --- a/src/main/java/com/microsoft/bingads/internal/ServiceFactoryImpl.java +++ b/src/main/java/com/microsoft/bingads/internal/ServiceFactoryImpl.java @@ -1,23 +1,18 @@ package com.microsoft.bingads.internal; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; import java.net.URL; import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Properties; +import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.xml.namespace.QName; @@ -32,7 +27,7 @@ public class ServiceFactoryImpl implements ServiceFactory { - private static final String VERSION = "13.0.19"; + public static final String VERSION = "13.0.19.1"; private static final int DEFAULT_WS_CREATE_TIMEOUT_IN_SECOND = 60; @@ -40,15 +35,13 @@ public class ServiceFactoryImpl implements ServiceFactory { private static final int WS_CREATE_RETRY_TIMES = 3; - private static Logger logger = Logger.getLogger(ServiceFactoryImpl.class.getName()); - - private static final Map endpoints = new HashMap() { + public static final Map, ServiceInfo> endpoints = new HashMap, ServiceInfo>() { { - put(com.microsoft.bingads.v13.customerbilling.ICustomerBillingService.class, new ServiceInfo() { { setProductionUrl("https://clientcenter.api.bingads.microsoft.com/Api/Billing/v13/CustomerBillingService.svc"); setSandboxUrl("https://clientcenter.api.sandbox.bingads.microsoft.com/Api/Billing/v13/CustomerBillingService.svc"); + setServiceNameAndVersion("Billing/v13"); } }); @@ -56,6 +49,7 @@ public class ServiceFactoryImpl implements ServiceFactory { { setProductionUrl("https://clientcenter.api.bingads.microsoft.com/Api/CustomerManagement/v13/CustomerManagementService.svc"); setSandboxUrl("https://clientcenter.api.sandbox.bingads.microsoft.com/Api/CustomerManagement/v13/CustomerManagementService.svc"); + setServiceNameAndVersion("CustomerManagement/v13"); } }); @@ -63,24 +57,28 @@ public class ServiceFactoryImpl implements ServiceFactory { { setProductionUrl("https://reporting.api.bingads.microsoft.com/Api/Advertiser/Reporting/v13/ReportingService.svc"); setSandboxUrl("https://reporting.api.sandbox.bingads.microsoft.com/Api/Advertiser/Reporting/v13/ReportingService.svc"); + setServiceNameAndVersion("Reporting/v13"); } }); put(com.microsoft.bingads.v13.campaignmanagement.ICampaignManagementService.class, new ServiceInfo() { { setProductionUrl("https://campaign.api.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v13/CampaignManagementService.svc"); setSandboxUrl("https://campaign.api.sandbox.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v13/CampaignManagementService.svc"); + setServiceNameAndVersion("CampaignManagement/v13"); } }); put(com.microsoft.bingads.v13.adinsight.IAdInsightService.class, new ServiceInfo() { { setProductionUrl("https://adinsight.api.bingads.microsoft.com/Api/Advertiser/AdInsight/v13/AdInsightService.svc"); setSandboxUrl("https://adinsight.api.sandbox.bingads.microsoft.com/Api/Advertiser/AdInsight/v13/AdInsightService.svc"); + setServiceNameAndVersion("AdInsight/v13"); } }); put(com.microsoft.bingads.v13.bulk.IBulkService.class, new ServiceInfo() { { setProductionUrl("https://bulk.api.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v13/BulkService.svc"); setSandboxUrl("https://bulk.api.sandbox.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v13/BulkService.svc"); + setServiceNameAndVersion("Bulk/v13"); } }); //End of v13 @@ -115,11 +113,21 @@ private Service createServiceWithRetry(Class serviceInterface, ApiEnvironment en Future future = pool.submit(new Callable() { public Service call() throws Exception { if (isCxf) { - // CXF doesn't require WSDL url to be passed - return Service.create(qName); - } else { - return Service.create(url, qName); - } + return CxfUtils.runOnNewBus( + // CXF doesn't require WSDL url to be passed + () -> Service.create(qName), + (logging) -> { + Set elementNames = new HashSet<>(); + + elementNames.add("AuthenticationToken"); + elementNames.add("Password"); + + logging.setSensitiveElementNames(elementNames); + } + ); + } + + return Service.create(url, qName); } }); diff --git a/src/main/java/com/microsoft/bingads/internal/ServiceInfo.java b/src/main/java/com/microsoft/bingads/internal/ServiceInfo.java index 9d71dfbc47..812d9824b7 100644 --- a/src/main/java/com/microsoft/bingads/internal/ServiceInfo.java +++ b/src/main/java/com/microsoft/bingads/internal/ServiceInfo.java @@ -6,7 +6,9 @@ public class ServiceInfo { private String productionUrl; - private String sandboxUrl; + private String sandboxUrl; + + private String serviceNameAndVersion; public String getProductionUrl() { return productionUrl; @@ -23,6 +25,14 @@ public String getSandboxUrl() { public void setSandboxUrl(String sandboxUrl) { this.sandboxUrl = sandboxUrl; } + + public String getServiceNameAndVersion() { + return serviceNameAndVersion; + } + + public void setServiceNameAndVersion(String serviceNameAndVersion) { + this.serviceNameAndVersion = serviceNameAndVersion; + } public String GetUrl(ApiEnvironment environment) { switch (environment) { @@ -35,7 +45,7 @@ public String GetUrl(ApiEnvironment environment) { case PRODUCTION: return getProductionUrl(); default: - throw new UnsupportedOperationException("The service is not available in Sandbox"); + throw new UnsupportedOperationException("Unknown environment name: " + environment); } } } diff --git a/src/main/java/com/microsoft/bingads/internal/ServiceUtils.java b/src/main/java/com/microsoft/bingads/internal/ServiceUtils.java index 1f3b892f5e..3f0cb00209 100644 --- a/src/main/java/com/microsoft/bingads/internal/ServiceUtils.java +++ b/src/main/java/com/microsoft/bingads/internal/ServiceUtils.java @@ -1,11 +1,7 @@ package com.microsoft.bingads.internal; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.util.logging.Level; -import java.util.logging.Logger; import java.util.Map; import java.util.Properties; @@ -19,143 +15,102 @@ * Reserved for internal use. */ public class ServiceUtils { - public static final String PROPERTY_FILE_PROPERTY = "PROPERTY_FILE"; - - public static final String PROPERTY_FILE = "bingads.properties"; + private static String PROPRETY_PREFIX = "com.microsoft.bingads."; public static String TRACKING_KEY = "com.microsoft.bingads.trackingId"; public static String REQUEST_HEADERS_KEY = "com.microsoft.bingads.requestHeaders"; - public static String TRACKING_HEADER_NAME = "TrackingId"; + public static String TRACKING_HEADER_NAME = "TrackingId"; - public static String GetTrackingId(Response response) { - Map context = response.getContext(); - return context != null ? context.get(TRACKING_KEY).toString() : ""; - } - - public static String getPropertyFile() { - String file = System.getProperty(PROPERTY_FILE_PROPERTY); - if (file == null || file.length() == 0) { - return PROPERTY_FILE; - } - return file; - } - - public static void setPropertyFile(String file) { - if (file != null && file.length() > 0) { - System.setProperty(PROPERTY_FILE_PROPERTY, file); - } + private static Properties FileProperties; + + public static String getPropertyFileName() { + return System.getProperty("com.microsoft.bingads.propertyFileName", "bingads.properties"); } - - public static ApiEnvironment getEnvironmentFromConfig() { - InputStream input = null; - try { - input = ServiceUtils.class.getClassLoader().getResourceAsStream(getPropertyFile()); - if (input == null) { - return null; - } - Properties props = new Properties(); - props.load(input); + static { + String propertyFileName = getPropertyFileName(); - String envString = props.getProperty("environment"); + try(InputStream input = ServiceUtils.class.getClassLoader().getResourceAsStream(propertyFileName)) { + if (input != null) { + FileProperties = new Properties(); - if (envString == null) { - return null; + FileProperties.load(input); } - - return ApiEnvironment.fromValue(envString); } catch (IOException ex) { - ex.printStackTrace(); - return null; - } finally { - try { - if (input != null) { - input.close(); - } - } catch (IOException ex) { - throw new InternalException(ex); - } + throw new InternalException(ex); } } + + public static String getPropertyValue(String name) { + String systemPropertyName = name.startsWith(PROPRETY_PREFIX) + ? name + : PROPRETY_PREFIX + name; + + return System.getProperty(systemPropertyName, FileProperties != null ? FileProperties.getProperty(name) : null); + } + + public static String getPropertyValue(String name, String valueIfNotFound) { + String propertyValue = getPropertyValue(name); + + if (propertyValue == null) { + return valueIfNotFound; + } + + return propertyValue; + } + + public static String GetTrackingId(Response response) { + Map context = response.getContext(); + return context != null ? context.get(TRACKING_KEY).toString() : ""; + } - public static String getServiceUrlFromConfig(Class serviceInterface) { - InputStream input = null; - try { - File file = new File(ServiceUtils.getPropertyFile()); - if (!file.exists()) { - return null; - } - input = new FileInputStream(file); - Properties props = new Properties(); - props.load(input); - return props.getProperty(serviceInterface.getCanonicalName() + ".url"); - } catch (IOException ex) { - // Ignore. In this case we will load service Url from endpoints. + public static ApiEnvironment getEnvironmentFromConfig() { + String envString = getPropertyValue("environment"); + + if (envString == null) { return null; - } finally { - try { - if (input != null) { - input.close(); - } - } catch (IOException ex) { - System.out.println(ex); - } } + + return ApiEnvironment.fromValue(envString); + } + + public static String getServiceUrlFromConfig(Class serviceInterface) { + return getPropertyValue(serviceInterface.getCanonicalName() + ".url"); } public static boolean getFallbackFlag() { - InputStream input = null; - try { - File file = new File(ServiceUtils.getPropertyFile()); - if (!file.exists()) { - return true; - } - input = new FileInputStream(file); - Properties props = new Properties(); - props.load(input); - if (props.getProperty("EnableFallbackToSoap") == null) { - return true; - } - return Boolean.valueOf(props.getProperty("EnableFallbackToSoap")); - } catch (IOException ex) { + String propertyValue = getPropertyValue("EnableFallbackToSoap"); + + if (propertyValue == null) { return true; - } finally { - try { - if (input != null) { - input.close(); - } - } catch (IOException ex) { - System.out.println(ex); - } } + + return Boolean.parseBoolean(propertyValue); } - public static String getUserAgent() { - InputStream input = null; - try { - File file = new File(ServiceUtils.getPropertyFile()); - if (!file.exists()) { - return null; - } - input = new FileInputStream(file); - Properties props = new Properties(); - props.load(input); - if (props.getProperty("UserAgent") == null) { - return null; - } - return props.getProperty("UserAgent").toString(); - } catch (IOException ex) { - return null; - } finally { - try { - if (input != null) { - input.close(); - } - } catch (IOException ex) { - System.out.println(ex); - } + public static String getClientName() { + return getPropertyValue("ClientName"); + } + + public static boolean getEnableRestApi() { + String propertyValue = getPropertyValue("EnableRestApi"); + + if (propertyValue == null) { + return false; } + + return Boolean.parseBoolean(propertyValue); + } + + public static boolean getDisableRestApi(Class serviceInterface) { + String propertyValue = getPropertyValue(serviceInterface.getSimpleName() + ".DisableRestApi"); + + if (propertyValue == null) { + return false; + } + + return Boolean.parseBoolean(propertyValue); } } diff --git a/src/main/java/com/microsoft/bingads/internal/restful/BulkRestfulServiceClient.java b/src/main/java/com/microsoft/bingads/internal/restful/BulkRestfulServiceClient.java deleted file mode 100644 index 7e72981513..0000000000 --- a/src/main/java/com/microsoft/bingads/internal/restful/BulkRestfulServiceClient.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.microsoft.bingads.internal.restful; - -import java.io.IOException; -import java.net.URISyntaxException; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; - -import jakarta.xml.ws.AsyncHandler; -import jakarta.xml.ws.Response; - -import com.microsoft.bingads.ApiEnvironment; -import com.microsoft.bingads.AuthorizationData; -import com.microsoft.bingads.v13.bulk.*; - -public class BulkRestfulServiceClient extends RestfulServiceClient { - - public BulkRestfulServiceClient(AuthorizationData authData, ApiEnvironment env, Class serviceInterface) { - super(authData, env, serviceInterface); - } - - - public DownloadCampaignsByAccountIdsResponse downloadCampaignsByAccountIds(DownloadCampaignsByAccountIdsRequest request) - throws Exception { - return sendRequest(request, "/Campaigns/DownloadByAccountIds", HttpPost, DownloadCampaignsByAccountIdsResponse.class); - } - - public Response downloadCampaignsByAccountIdsAsync(DownloadCampaignsByAccountIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Campaigns/DownloadByAccountIds", HttpPost, DownloadCampaignsByAccountIdsResponse.class); - } - - public Future downloadCampaignsByAccountIdsAsync(DownloadCampaignsByAccountIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Campaigns/DownloadByAccountIds", HttpPost, DownloadCampaignsByAccountIdsResponse.class, asyncHandler); - } - - - public DownloadCampaignsByCampaignIdsResponse downloadCampaignsByCampaignIds(DownloadCampaignsByCampaignIdsRequest request) - throws Exception { - return sendRequest(request, "/Campaigns/DownloadByCampaignIds", HttpPost, DownloadCampaignsByCampaignIdsResponse.class); - } - - public Response downloadCampaignsByCampaignIdsAsync(DownloadCampaignsByCampaignIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Campaigns/DownloadByCampaignIds", HttpPost, DownloadCampaignsByCampaignIdsResponse.class); - } - - public Future downloadCampaignsByCampaignIdsAsync(DownloadCampaignsByCampaignIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Campaigns/DownloadByCampaignIds", HttpPost, DownloadCampaignsByCampaignIdsResponse.class, asyncHandler); - } - - - public GetBulkDownloadStatusResponse getBulkDownloadStatus(GetBulkDownloadStatusRequest request) - throws Exception { - return sendRequest(request, "/BulkDownloadStatus/Query", HttpPost, GetBulkDownloadStatusResponse.class); - } - - public Response getBulkDownloadStatusAsync(GetBulkDownloadStatusRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BulkDownloadStatus/Query", HttpPost, GetBulkDownloadStatusResponse.class); - } - - public Future getBulkDownloadStatusAsync(GetBulkDownloadStatusRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BulkDownloadStatus/Query", HttpPost, GetBulkDownloadStatusResponse.class, asyncHandler); - } - - - public GetBulkUploadUrlResponse getBulkUploadUrl(GetBulkUploadUrlRequest request) - throws Exception { - return sendRequest(request, "/BulkUploadUrl/Query", HttpPost, GetBulkUploadUrlResponse.class); - } - - public Response getBulkUploadUrlAsync(GetBulkUploadUrlRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BulkUploadUrl/Query", HttpPost, GetBulkUploadUrlResponse.class); - } - - public Future getBulkUploadUrlAsync(GetBulkUploadUrlRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BulkUploadUrl/Query", HttpPost, GetBulkUploadUrlResponse.class, asyncHandler); - } - - - public GetBulkUploadStatusResponse getBulkUploadStatus(GetBulkUploadStatusRequest request) - throws Exception { - return sendRequest(request, "/BulkUploadStatus/Query", HttpPost, GetBulkUploadStatusResponse.class); - } - - public Response getBulkUploadStatusAsync(GetBulkUploadStatusRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BulkUploadStatus/Query", HttpPost, GetBulkUploadStatusResponse.class); - } - - public Future getBulkUploadStatusAsync(GetBulkUploadStatusRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BulkUploadStatus/Query", HttpPost, GetBulkUploadStatusResponse.class, asyncHandler); - } - - - public UploadEntityRecordsResponse uploadEntityRecords(UploadEntityRecordsRequest request) - throws Exception { - return sendRequest(request, "/EntityRecords/Upload", HttpPost, UploadEntityRecordsResponse.class); - } - - public Response uploadEntityRecordsAsync(UploadEntityRecordsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/EntityRecords/Upload", HttpPost, UploadEntityRecordsResponse.class); - } - - public Future uploadEntityRecordsAsync(UploadEntityRecordsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/EntityRecords/Upload", HttpPost, UploadEntityRecordsResponse.class, asyncHandler); - } - - } \ No newline at end of file diff --git a/src/main/java/com/microsoft/bingads/internal/restful/BulkService.java b/src/main/java/com/microsoft/bingads/internal/restful/BulkService.java new file mode 100644 index 0000000000..cdfda77b5c --- /dev/null +++ b/src/main/java/com/microsoft/bingads/internal/restful/BulkService.java @@ -0,0 +1,205 @@ +package com.microsoft.bingads.internal.restful; + +import java.util.Map; +import java.util.concurrent.Future; +import java.util.function.BiFunction; +import java.util.function.Supplier; + +import jakarta.xml.ws.AsyncHandler; +import jakarta.xml.ws.Response; + +import com.microsoft.bingads.ApiEnvironment; +import com.microsoft.bingads.InternalException; +import com.microsoft.bingads.v13.bulk.*; + +public class BulkService extends RestfulServiceClient implements IBulkService { + Supplier fallbackService; + + public BulkService(Map headers, ApiEnvironment env, Supplier fallbackService) { + super(headers, env, IBulkService.class); + + this.fallbackService = fallbackService; + } + + Exception processFaultDetail(ApplicationFault faultDetail, boolean shouldThrow) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + String message = getFaultMessage(faultDetail.getTrackingId()); + + if (faultDetail instanceof AdApiFaultDetail) { + AdApiFaultDetail_Exception ex = new AdApiFaultDetail_Exception(message, (AdApiFaultDetail)faultDetail); + + if (shouldThrow) { + throw ex; + } + + return ex; + } + + if (faultDetail instanceof ApiFaultDetail) { + ApiFaultDetail_Exception ex = new ApiFaultDetail_Exception(message, (ApiFaultDetail)faultDetail); + + if (shouldThrow) { + throw ex; + } + + return ex; + } + + if (shouldThrow) { + throw new RuntimeException("Unknown fault type: " + faultDetail.getClass()); + } + + return null; + } + + protected Resp sendRequest(Req request, String entityEndpoint, String verb, Class respClass) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + ResponseInfo responseInfo = getResponseInfo(request, entityEndpoint, verb, respClass, ApplicationFault.class); + + if (responseInfo == null) { + return null; + } + + ApplicationFault faultDetail = responseInfo.getFaultDetail(); + + if (faultDetail != null) { + processFaultDetail(faultDetail, true); + } + + return responseInfo.getResponse(); + } + + private Exception getFaultException(ApplicationFault faultDetail) { + try { + Exception ex = processFaultDetail(faultDetail, false); + + return ex; + } catch (Exception ex) { + throw new InternalException(ex); + } + } + + protected Response sendRequestAsync(Req request, String entityEndpoint, String verb, Class respClass, BiFunction, Future> soapMethod, AsyncHandler handler) { + return processRequestAsync(request, entityEndpoint, verb, respClass, ApplicationFault.class, x -> getFaultException(x), soapMethod, handler); + } + + public DownloadCampaignsByAccountIdsResponse downloadCampaignsByAccountIds(DownloadCampaignsByAccountIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DownloadCampaignsByAccountIdsResponse response = sendRequest(request, "/Campaigns/DownloadByAccountIds", HttpPost, DownloadCampaignsByAccountIdsResponse.class); + + if (response == null) { + response = fallbackService.get().downloadCampaignsByAccountIds(request); + } + + return response; + } + + public Response downloadCampaignsByAccountIdsAsync(DownloadCampaignsByAccountIdsRequest request) { + return sendRequestAsync(request, "/Campaigns/DownloadByAccountIds", HttpPost, DownloadCampaignsByAccountIdsResponse.class, (r, h) -> fallbackService.get().downloadCampaignsByAccountIdsAsync(r, h), null); + } + + public Future downloadCampaignsByAccountIdsAsync(DownloadCampaignsByAccountIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Campaigns/DownloadByAccountIds", HttpPost, DownloadCampaignsByAccountIdsResponse.class, (r, h) -> fallbackService.get().downloadCampaignsByAccountIdsAsync(r, h), asyncHandler); + } + + + public DownloadCampaignsByCampaignIdsResponse downloadCampaignsByCampaignIds(DownloadCampaignsByCampaignIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DownloadCampaignsByCampaignIdsResponse response = sendRequest(request, "/Campaigns/DownloadByCampaignIds", HttpPost, DownloadCampaignsByCampaignIdsResponse.class); + + if (response == null) { + response = fallbackService.get().downloadCampaignsByCampaignIds(request); + } + + return response; + } + + public Response downloadCampaignsByCampaignIdsAsync(DownloadCampaignsByCampaignIdsRequest request) { + return sendRequestAsync(request, "/Campaigns/DownloadByCampaignIds", HttpPost, DownloadCampaignsByCampaignIdsResponse.class, (r, h) -> fallbackService.get().downloadCampaignsByCampaignIdsAsync(r, h), null); + } + + public Future downloadCampaignsByCampaignIdsAsync(DownloadCampaignsByCampaignIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Campaigns/DownloadByCampaignIds", HttpPost, DownloadCampaignsByCampaignIdsResponse.class, (r, h) -> fallbackService.get().downloadCampaignsByCampaignIdsAsync(r, h), asyncHandler); + } + + + public GetBulkDownloadStatusResponse getBulkDownloadStatus(GetBulkDownloadStatusRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetBulkDownloadStatusResponse response = sendRequest(request, "/BulkDownloadStatus/Query", HttpPost, GetBulkDownloadStatusResponse.class); + + if (response == null) { + response = fallbackService.get().getBulkDownloadStatus(request); + } + + return response; + } + + public Response getBulkDownloadStatusAsync(GetBulkDownloadStatusRequest request) { + return sendRequestAsync(request, "/BulkDownloadStatus/Query", HttpPost, GetBulkDownloadStatusResponse.class, (r, h) -> fallbackService.get().getBulkDownloadStatusAsync(r, h), null); + } + + public Future getBulkDownloadStatusAsync(GetBulkDownloadStatusRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/BulkDownloadStatus/Query", HttpPost, GetBulkDownloadStatusResponse.class, (r, h) -> fallbackService.get().getBulkDownloadStatusAsync(r, h), asyncHandler); + } + + + public GetBulkUploadUrlResponse getBulkUploadUrl(GetBulkUploadUrlRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetBulkUploadUrlResponse response = sendRequest(request, "/BulkUploadUrl/Query", HttpPost, GetBulkUploadUrlResponse.class); + + if (response == null) { + response = fallbackService.get().getBulkUploadUrl(request); + } + + return response; + } + + public Response getBulkUploadUrlAsync(GetBulkUploadUrlRequest request) { + return sendRequestAsync(request, "/BulkUploadUrl/Query", HttpPost, GetBulkUploadUrlResponse.class, (r, h) -> fallbackService.get().getBulkUploadUrlAsync(r, h), null); + } + + public Future getBulkUploadUrlAsync(GetBulkUploadUrlRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/BulkUploadUrl/Query", HttpPost, GetBulkUploadUrlResponse.class, (r, h) -> fallbackService.get().getBulkUploadUrlAsync(r, h), asyncHandler); + } + + + public GetBulkUploadStatusResponse getBulkUploadStatus(GetBulkUploadStatusRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetBulkUploadStatusResponse response = sendRequest(request, "/BulkUploadStatus/Query", HttpPost, GetBulkUploadStatusResponse.class); + + if (response == null) { + response = fallbackService.get().getBulkUploadStatus(request); + } + + return response; + } + + public Response getBulkUploadStatusAsync(GetBulkUploadStatusRequest request) { + return sendRequestAsync(request, "/BulkUploadStatus/Query", HttpPost, GetBulkUploadStatusResponse.class, (r, h) -> fallbackService.get().getBulkUploadStatusAsync(r, h), null); + } + + public Future getBulkUploadStatusAsync(GetBulkUploadStatusRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/BulkUploadStatus/Query", HttpPost, GetBulkUploadStatusResponse.class, (r, h) -> fallbackService.get().getBulkUploadStatusAsync(r, h), asyncHandler); + } + + + public UploadEntityRecordsResponse uploadEntityRecords(UploadEntityRecordsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UploadEntityRecordsResponse response = sendRequest(request, "/EntityRecords/Upload", HttpPost, UploadEntityRecordsResponse.class); + + if (response == null) { + response = fallbackService.get().uploadEntityRecords(request); + } + + return response; + } + + public Response uploadEntityRecordsAsync(UploadEntityRecordsRequest request) { + return sendRequestAsync(request, "/EntityRecords/Upload", HttpPost, UploadEntityRecordsResponse.class, (r, h) -> fallbackService.get().uploadEntityRecordsAsync(r, h), null); + } + + public Future uploadEntityRecordsAsync(UploadEntityRecordsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/EntityRecords/Upload", HttpPost, UploadEntityRecordsResponse.class, (r, h) -> fallbackService.get().uploadEntityRecordsAsync(r, h), asyncHandler); + } + + } \ No newline at end of file diff --git a/src/main/java/com/microsoft/bingads/internal/restful/CampaignManagementRestfulServiceClient.java b/src/main/java/com/microsoft/bingads/internal/restful/CampaignManagementRestfulServiceClient.java deleted file mode 100644 index 162cbe883d..0000000000 --- a/src/main/java/com/microsoft/bingads/internal/restful/CampaignManagementRestfulServiceClient.java +++ /dev/null @@ -1,2485 +0,0 @@ -package com.microsoft.bingads.internal.restful; - -import java.io.IOException; -import java.net.URISyntaxException; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; - -import jakarta.xml.ws.AsyncHandler; -import jakarta.xml.ws.Response; - -import com.microsoft.bingads.ApiEnvironment; -import com.microsoft.bingads.AuthorizationData; -import com.microsoft.bingads.v13.campaignmanagement.*; - -public class CampaignManagementRestfulServiceClient extends RestfulServiceClient { - - public CampaignManagementRestfulServiceClient(AuthorizationData authData, ApiEnvironment env, Class serviceInterface) { - super(authData, env, serviceInterface); - } - - - public AddCampaignsResponse addCampaigns(AddCampaignsRequest request) - throws Exception { - return sendRequest(request, "/Campaigns", HttpPost, AddCampaignsResponse.class); - } - - public Response addCampaignsAsync(AddCampaignsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Campaigns", HttpPost, AddCampaignsResponse.class); - } - - public Future addCampaignsAsync(AddCampaignsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Campaigns", HttpPost, AddCampaignsResponse.class, asyncHandler); - } - - - public GetCampaignsByAccountIdResponse getCampaignsByAccountId(GetCampaignsByAccountIdRequest request) - throws Exception { - return sendRequest(request, "/Campaigns/QueryByAccountId", HttpPost, GetCampaignsByAccountIdResponse.class); - } - - public Response getCampaignsByAccountIdAsync(GetCampaignsByAccountIdRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Campaigns/QueryByAccountId", HttpPost, GetCampaignsByAccountIdResponse.class); - } - - public Future getCampaignsByAccountIdAsync(GetCampaignsByAccountIdRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Campaigns/QueryByAccountId", HttpPost, GetCampaignsByAccountIdResponse.class, asyncHandler); - } - - - public GetCampaignsByIdsResponse getCampaignsByIds(GetCampaignsByIdsRequest request) - throws Exception { - return sendRequest(request, "/Campaigns/QueryByIds", HttpPost, GetCampaignsByIdsResponse.class); - } - - public Response getCampaignsByIdsAsync(GetCampaignsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Campaigns/QueryByIds", HttpPost, GetCampaignsByIdsResponse.class); - } - - public Future getCampaignsByIdsAsync(GetCampaignsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Campaigns/QueryByIds", HttpPost, GetCampaignsByIdsResponse.class, asyncHandler); - } - - - public DeleteCampaignsResponse deleteCampaigns(DeleteCampaignsRequest request) - throws Exception { - return sendRequest(request, "/Campaigns", HttpDelete, DeleteCampaignsResponse.class); - } - - public Response deleteCampaignsAsync(DeleteCampaignsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Campaigns", HttpDelete, DeleteCampaignsResponse.class); - } - - public Future deleteCampaignsAsync(DeleteCampaignsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Campaigns", HttpDelete, DeleteCampaignsResponse.class, asyncHandler); - } - - - public UpdateCampaignsResponse updateCampaigns(UpdateCampaignsRequest request) - throws Exception { - return sendRequest(request, "/Campaigns", HttpPut, UpdateCampaignsResponse.class); - } - - public Response updateCampaignsAsync(UpdateCampaignsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Campaigns", HttpPut, UpdateCampaignsResponse.class); - } - - public Future updateCampaignsAsync(UpdateCampaignsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Campaigns", HttpPut, UpdateCampaignsResponse.class, asyncHandler); - } - - - public GetNegativeSitesByCampaignIdsResponse getNegativeSitesByCampaignIds(GetNegativeSitesByCampaignIdsRequest request) - throws Exception { - return sendRequest(request, "/NegativeSites/QueryByCampaignIds", HttpPost, GetNegativeSitesByCampaignIdsResponse.class); - } - - public Response getNegativeSitesByCampaignIdsAsync(GetNegativeSitesByCampaignIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/NegativeSites/QueryByCampaignIds", HttpPost, GetNegativeSitesByCampaignIdsResponse.class); - } - - public Future getNegativeSitesByCampaignIdsAsync(GetNegativeSitesByCampaignIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/NegativeSites/QueryByCampaignIds", HttpPost, GetNegativeSitesByCampaignIdsResponse.class, asyncHandler); - } - - - public SetNegativeSitesToCampaignsResponse setNegativeSitesToCampaigns(SetNegativeSitesToCampaignsRequest request) - throws Exception { - return sendRequest(request, "/NegativeSites/SetToCampaigns", HttpPost, SetNegativeSitesToCampaignsResponse.class); - } - - public Response setNegativeSitesToCampaignsAsync(SetNegativeSitesToCampaignsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/NegativeSites/SetToCampaigns", HttpPost, SetNegativeSitesToCampaignsResponse.class); - } - - public Future setNegativeSitesToCampaignsAsync(SetNegativeSitesToCampaignsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/NegativeSites/SetToCampaigns", HttpPost, SetNegativeSitesToCampaignsResponse.class, asyncHandler); - } - - - public GetConfigValueResponse getConfigValue(GetConfigValueRequest request) - throws Exception { - return sendRequest(request, "/ConfigValue/Query", HttpPost, GetConfigValueResponse.class); - } - - public Response getConfigValueAsync(GetConfigValueRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ConfigValue/Query", HttpPost, GetConfigValueResponse.class); - } - - public Future getConfigValueAsync(GetConfigValueRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ConfigValue/Query", HttpPost, GetConfigValueResponse.class, asyncHandler); - } - - - public GetBSCCountriesResponse getBSCCountries(GetBSCCountriesRequest request) - throws Exception { - return sendRequest(request, "/BSCCountries/Query", HttpPost, GetBSCCountriesResponse.class); - } - - public Response getBSCCountriesAsync(GetBSCCountriesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BSCCountries/Query", HttpPost, GetBSCCountriesResponse.class); - } - - public Future getBSCCountriesAsync(GetBSCCountriesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BSCCountries/Query", HttpPost, GetBSCCountriesResponse.class, asyncHandler); - } - - - public AddAdGroupsResponse addAdGroups(AddAdGroupsRequest request) - throws Exception { - return sendRequest(request, "/AdGroups", HttpPost, AddAdGroupsResponse.class); - } - - public Response addAdGroupsAsync(AddAdGroupsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroups", HttpPost, AddAdGroupsResponse.class); - } - - public Future addAdGroupsAsync(AddAdGroupsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroups", HttpPost, AddAdGroupsResponse.class, asyncHandler); - } - - - public DeleteAdGroupsResponse deleteAdGroups(DeleteAdGroupsRequest request) - throws Exception { - return sendRequest(request, "/AdGroups", HttpDelete, DeleteAdGroupsResponse.class); - } - - public Response deleteAdGroupsAsync(DeleteAdGroupsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroups", HttpDelete, DeleteAdGroupsResponse.class); - } - - public Future deleteAdGroupsAsync(DeleteAdGroupsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroups", HttpDelete, DeleteAdGroupsResponse.class, asyncHandler); - } - - - public GetAdGroupsByIdsResponse getAdGroupsByIds(GetAdGroupsByIdsRequest request) - throws Exception { - return sendRequest(request, "/AdGroups/QueryByIds", HttpPost, GetAdGroupsByIdsResponse.class); - } - - public Response getAdGroupsByIdsAsync(GetAdGroupsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroups/QueryByIds", HttpPost, GetAdGroupsByIdsResponse.class); - } - - public Future getAdGroupsByIdsAsync(GetAdGroupsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroups/QueryByIds", HttpPost, GetAdGroupsByIdsResponse.class, asyncHandler); - } - - - public GetAdGroupsByCampaignIdResponse getAdGroupsByCampaignId(GetAdGroupsByCampaignIdRequest request) - throws Exception { - return sendRequest(request, "/AdGroups/QueryByCampaignId", HttpPost, GetAdGroupsByCampaignIdResponse.class); - } - - public Response getAdGroupsByCampaignIdAsync(GetAdGroupsByCampaignIdRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroups/QueryByCampaignId", HttpPost, GetAdGroupsByCampaignIdResponse.class); - } - - public Future getAdGroupsByCampaignIdAsync(GetAdGroupsByCampaignIdRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroups/QueryByCampaignId", HttpPost, GetAdGroupsByCampaignIdResponse.class, asyncHandler); - } - - - public UpdateAdGroupsResponse updateAdGroups(UpdateAdGroupsRequest request) - throws Exception { - return sendRequest(request, "/AdGroups", HttpPut, UpdateAdGroupsResponse.class); - } - - public Response updateAdGroupsAsync(UpdateAdGroupsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroups", HttpPut, UpdateAdGroupsResponse.class); - } - - public Future updateAdGroupsAsync(UpdateAdGroupsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroups", HttpPut, UpdateAdGroupsResponse.class, asyncHandler); - } - - - public GetNegativeSitesByAdGroupIdsResponse getNegativeSitesByAdGroupIds(GetNegativeSitesByAdGroupIdsRequest request) - throws Exception { - return sendRequest(request, "/NegativeSites/QueryByAdGroupIds", HttpPost, GetNegativeSitesByAdGroupIdsResponse.class); - } - - public Response getNegativeSitesByAdGroupIdsAsync(GetNegativeSitesByAdGroupIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/NegativeSites/QueryByAdGroupIds", HttpPost, GetNegativeSitesByAdGroupIdsResponse.class); - } - - public Future getNegativeSitesByAdGroupIdsAsync(GetNegativeSitesByAdGroupIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/NegativeSites/QueryByAdGroupIds", HttpPost, GetNegativeSitesByAdGroupIdsResponse.class, asyncHandler); - } - - - public SetNegativeSitesToAdGroupsResponse setNegativeSitesToAdGroups(SetNegativeSitesToAdGroupsRequest request) - throws Exception { - return sendRequest(request, "/NegativeSites/SetToAdGroups", HttpPost, SetNegativeSitesToAdGroupsResponse.class); - } - - public Response setNegativeSitesToAdGroupsAsync(SetNegativeSitesToAdGroupsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/NegativeSites/SetToAdGroups", HttpPost, SetNegativeSitesToAdGroupsResponse.class); - } - - public Future setNegativeSitesToAdGroupsAsync(SetNegativeSitesToAdGroupsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/NegativeSites/SetToAdGroups", HttpPost, SetNegativeSitesToAdGroupsResponse.class, asyncHandler); - } - - - public GetGeoLocationsFileUrlResponse getGeoLocationsFileUrl(GetGeoLocationsFileUrlRequest request) - throws Exception { - return sendRequest(request, "/GeoLocationsFileUrl/Query", HttpPost, GetGeoLocationsFileUrlResponse.class); - } - - public Response getGeoLocationsFileUrlAsync(GetGeoLocationsFileUrlRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/GeoLocationsFileUrl/Query", HttpPost, GetGeoLocationsFileUrlResponse.class); - } - - public Future getGeoLocationsFileUrlAsync(GetGeoLocationsFileUrlRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/GeoLocationsFileUrl/Query", HttpPost, GetGeoLocationsFileUrlResponse.class, asyncHandler); - } - - - public AddAdsResponse addAds(AddAdsRequest request) - throws Exception { - return sendRequest(request, "/Ads", HttpPost, AddAdsResponse.class); - } - - public Response addAdsAsync(AddAdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Ads", HttpPost, AddAdsResponse.class); - } - - public Future addAdsAsync(AddAdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Ads", HttpPost, AddAdsResponse.class, asyncHandler); - } - - - public DeleteAdsResponse deleteAds(DeleteAdsRequest request) - throws Exception { - return sendRequest(request, "/Ads", HttpDelete, DeleteAdsResponse.class); - } - - public Response deleteAdsAsync(DeleteAdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Ads", HttpDelete, DeleteAdsResponse.class); - } - - public Future deleteAdsAsync(DeleteAdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Ads", HttpDelete, DeleteAdsResponse.class, asyncHandler); - } - - - public GetAdsByEditorialStatusResponse getAdsByEditorialStatus(GetAdsByEditorialStatusRequest request) - throws Exception { - return sendRequest(request, "/Ads/QueryByEditorialStatus", HttpPost, GetAdsByEditorialStatusResponse.class); - } - - public Response getAdsByEditorialStatusAsync(GetAdsByEditorialStatusRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Ads/QueryByEditorialStatus", HttpPost, GetAdsByEditorialStatusResponse.class); - } - - public Future getAdsByEditorialStatusAsync(GetAdsByEditorialStatusRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Ads/QueryByEditorialStatus", HttpPost, GetAdsByEditorialStatusResponse.class, asyncHandler); - } - - - public GetAdsByIdsResponse getAdsByIds(GetAdsByIdsRequest request) - throws Exception { - return sendRequest(request, "/Ads/QueryByIds", HttpPost, GetAdsByIdsResponse.class); - } - - public Response getAdsByIdsAsync(GetAdsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Ads/QueryByIds", HttpPost, GetAdsByIdsResponse.class); - } - - public Future getAdsByIdsAsync(GetAdsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Ads/QueryByIds", HttpPost, GetAdsByIdsResponse.class, asyncHandler); - } - - - public GetAdsByAdGroupIdResponse getAdsByAdGroupId(GetAdsByAdGroupIdRequest request) - throws Exception { - return sendRequest(request, "/Ads/QueryByAdGroupId", HttpPost, GetAdsByAdGroupIdResponse.class); - } - - public Response getAdsByAdGroupIdAsync(GetAdsByAdGroupIdRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Ads/QueryByAdGroupId", HttpPost, GetAdsByAdGroupIdResponse.class); - } - - public Future getAdsByAdGroupIdAsync(GetAdsByAdGroupIdRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Ads/QueryByAdGroupId", HttpPost, GetAdsByAdGroupIdResponse.class, asyncHandler); - } - - - public UpdateAdsResponse updateAds(UpdateAdsRequest request) - throws Exception { - return sendRequest(request, "/Ads", HttpPut, UpdateAdsResponse.class); - } - - public Response updateAdsAsync(UpdateAdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Ads", HttpPut, UpdateAdsResponse.class); - } - - public Future updateAdsAsync(UpdateAdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Ads", HttpPut, UpdateAdsResponse.class, asyncHandler); - } - - - public AddKeywordsResponse addKeywords(AddKeywordsRequest request) - throws Exception { - return sendRequest(request, "/Keywords", HttpPost, AddKeywordsResponse.class); - } - - public Response addKeywordsAsync(AddKeywordsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Keywords", HttpPost, AddKeywordsResponse.class); - } - - public Future addKeywordsAsync(AddKeywordsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Keywords", HttpPost, AddKeywordsResponse.class, asyncHandler); - } - - - public DeleteKeywordsResponse deleteKeywords(DeleteKeywordsRequest request) - throws Exception { - return sendRequest(request, "/Keywords", HttpDelete, DeleteKeywordsResponse.class); - } - - public Response deleteKeywordsAsync(DeleteKeywordsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Keywords", HttpDelete, DeleteKeywordsResponse.class); - } - - public Future deleteKeywordsAsync(DeleteKeywordsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Keywords", HttpDelete, DeleteKeywordsResponse.class, asyncHandler); - } - - - public GetKeywordsByEditorialStatusResponse getKeywordsByEditorialStatus(GetKeywordsByEditorialStatusRequest request) - throws Exception { - return sendRequest(request, "/Keywords/QueryByEditorialStatus", HttpPost, GetKeywordsByEditorialStatusResponse.class); - } - - public Response getKeywordsByEditorialStatusAsync(GetKeywordsByEditorialStatusRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Keywords/QueryByEditorialStatus", HttpPost, GetKeywordsByEditorialStatusResponse.class); - } - - public Future getKeywordsByEditorialStatusAsync(GetKeywordsByEditorialStatusRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Keywords/QueryByEditorialStatus", HttpPost, GetKeywordsByEditorialStatusResponse.class, asyncHandler); - } - - - public GetKeywordsByIdsResponse getKeywordsByIds(GetKeywordsByIdsRequest request) - throws Exception { - return sendRequest(request, "/Keywords/QueryByIds", HttpPost, GetKeywordsByIdsResponse.class); - } - - public Response getKeywordsByIdsAsync(GetKeywordsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Keywords/QueryByIds", HttpPost, GetKeywordsByIdsResponse.class); - } - - public Future getKeywordsByIdsAsync(GetKeywordsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Keywords/QueryByIds", HttpPost, GetKeywordsByIdsResponse.class, asyncHandler); - } - - - public GetKeywordsByAdGroupIdResponse getKeywordsByAdGroupId(GetKeywordsByAdGroupIdRequest request) - throws Exception { - return sendRequest(request, "/Keywords/QueryByAdGroupId", HttpPost, GetKeywordsByAdGroupIdResponse.class); - } - - public Response getKeywordsByAdGroupIdAsync(GetKeywordsByAdGroupIdRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Keywords/QueryByAdGroupId", HttpPost, GetKeywordsByAdGroupIdResponse.class); - } - - public Future getKeywordsByAdGroupIdAsync(GetKeywordsByAdGroupIdRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Keywords/QueryByAdGroupId", HttpPost, GetKeywordsByAdGroupIdResponse.class, asyncHandler); - } - - - public UpdateKeywordsResponse updateKeywords(UpdateKeywordsRequest request) - throws Exception { - return sendRequest(request, "/Keywords", HttpPut, UpdateKeywordsResponse.class); - } - - public Response updateKeywordsAsync(UpdateKeywordsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Keywords", HttpPut, UpdateKeywordsResponse.class); - } - - public Future updateKeywordsAsync(UpdateKeywordsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Keywords", HttpPut, UpdateKeywordsResponse.class, asyncHandler); - } - - - public AppealEditorialRejectionsResponse appealEditorialRejections(AppealEditorialRejectionsRequest request) - throws Exception { - return sendRequest(request, "/EditorialRejections/Appeal", HttpPost, AppealEditorialRejectionsResponse.class); - } - - public Response appealEditorialRejectionsAsync(AppealEditorialRejectionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/EditorialRejections/Appeal", HttpPost, AppealEditorialRejectionsResponse.class); - } - - public Future appealEditorialRejectionsAsync(AppealEditorialRejectionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/EditorialRejections/Appeal", HttpPost, AppealEditorialRejectionsResponse.class, asyncHandler); - } - - - public GetEditorialReasonsByIdsResponse getEditorialReasonsByIds(GetEditorialReasonsByIdsRequest request) - throws Exception { - return sendRequest(request, "/EditorialReasons/QueryByIds", HttpPost, GetEditorialReasonsByIdsResponse.class); - } - - public Response getEditorialReasonsByIdsAsync(GetEditorialReasonsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/EditorialReasons/QueryByIds", HttpPost, GetEditorialReasonsByIdsResponse.class); - } - - public Future getEditorialReasonsByIdsAsync(GetEditorialReasonsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/EditorialReasons/QueryByIds", HttpPost, GetEditorialReasonsByIdsResponse.class, asyncHandler); - } - - - public GetAccountMigrationStatusesResponse getAccountMigrationStatuses(GetAccountMigrationStatusesRequest request) - throws Exception { - return sendRequest(request, "/AccountMigrationStatuses/Query", HttpPost, GetAccountMigrationStatusesResponse.class); - } - - public Response getAccountMigrationStatusesAsync(GetAccountMigrationStatusesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AccountMigrationStatuses/Query", HttpPost, GetAccountMigrationStatusesResponse.class); - } - - public Future getAccountMigrationStatusesAsync(GetAccountMigrationStatusesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AccountMigrationStatuses/Query", HttpPost, GetAccountMigrationStatusesResponse.class, asyncHandler); - } - - - public SetAccountPropertiesResponse setAccountProperties(SetAccountPropertiesRequest request) - throws Exception { - return sendRequest(request, "/AccountProperties/Set", HttpPost, SetAccountPropertiesResponse.class); - } - - public Response setAccountPropertiesAsync(SetAccountPropertiesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AccountProperties/Set", HttpPost, SetAccountPropertiesResponse.class); - } - - public Future setAccountPropertiesAsync(SetAccountPropertiesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AccountProperties/Set", HttpPost, SetAccountPropertiesResponse.class, asyncHandler); - } - - - public GetAccountPropertiesResponse getAccountProperties(GetAccountPropertiesRequest request) - throws Exception { - return sendRequest(request, "/AccountProperties/Query", HttpPost, GetAccountPropertiesResponse.class); - } - - public Response getAccountPropertiesAsync(GetAccountPropertiesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AccountProperties/Query", HttpPost, GetAccountPropertiesResponse.class); - } - - public Future getAccountPropertiesAsync(GetAccountPropertiesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AccountProperties/Query", HttpPost, GetAccountPropertiesResponse.class, asyncHandler); - } - - - public AddAdExtensionsResponse addAdExtensions(AddAdExtensionsRequest request) - throws Exception { - return sendRequest(request, "/AdExtensions", HttpPost, AddAdExtensionsResponse.class); - } - - public Response addAdExtensionsAsync(AddAdExtensionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensions", HttpPost, AddAdExtensionsResponse.class); - } - - public Future addAdExtensionsAsync(AddAdExtensionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensions", HttpPost, AddAdExtensionsResponse.class, asyncHandler); - } - - - public GetAdExtensionsByIdsResponse getAdExtensionsByIds(GetAdExtensionsByIdsRequest request) - throws Exception { - return sendRequest(request, "/AdExtensions/QueryByIds", HttpPost, GetAdExtensionsByIdsResponse.class); - } - - public Response getAdExtensionsByIdsAsync(GetAdExtensionsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensions/QueryByIds", HttpPost, GetAdExtensionsByIdsResponse.class); - } - - public Future getAdExtensionsByIdsAsync(GetAdExtensionsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensions/QueryByIds", HttpPost, GetAdExtensionsByIdsResponse.class, asyncHandler); - } - - - public UpdateAdExtensionsResponse updateAdExtensions(UpdateAdExtensionsRequest request) - throws Exception { - return sendRequest(request, "/AdExtensions", HttpPut, UpdateAdExtensionsResponse.class); - } - - public Response updateAdExtensionsAsync(UpdateAdExtensionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensions", HttpPut, UpdateAdExtensionsResponse.class); - } - - public Future updateAdExtensionsAsync(UpdateAdExtensionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensions", HttpPut, UpdateAdExtensionsResponse.class, asyncHandler); - } - - - public DeleteAdExtensionsResponse deleteAdExtensions(DeleteAdExtensionsRequest request) - throws Exception { - return sendRequest(request, "/AdExtensions", HttpDelete, DeleteAdExtensionsResponse.class); - } - - public Response deleteAdExtensionsAsync(DeleteAdExtensionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensions", HttpDelete, DeleteAdExtensionsResponse.class); - } - - public Future deleteAdExtensionsAsync(DeleteAdExtensionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensions", HttpDelete, DeleteAdExtensionsResponse.class, asyncHandler); - } - - - public GetAdExtensionsEditorialReasonsResponse getAdExtensionsEditorialReasons(GetAdExtensionsEditorialReasonsRequest request) - throws Exception { - return sendRequest(request, "/AdExtensionsEditorialReasons/Query", HttpPost, GetAdExtensionsEditorialReasonsResponse.class); - } - - public Response getAdExtensionsEditorialReasonsAsync(GetAdExtensionsEditorialReasonsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensionsEditorialReasons/Query", HttpPost, GetAdExtensionsEditorialReasonsResponse.class); - } - - public Future getAdExtensionsEditorialReasonsAsync(GetAdExtensionsEditorialReasonsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensionsEditorialReasons/Query", HttpPost, GetAdExtensionsEditorialReasonsResponse.class, asyncHandler); - } - - - public SetAdExtensionsAssociationsResponse setAdExtensionsAssociations(SetAdExtensionsAssociationsRequest request) - throws Exception { - return sendRequest(request, "/AdExtensionsAssociations/Set", HttpPost, SetAdExtensionsAssociationsResponse.class); - } - - public Response setAdExtensionsAssociationsAsync(SetAdExtensionsAssociationsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensionsAssociations/Set", HttpPost, SetAdExtensionsAssociationsResponse.class); - } - - public Future setAdExtensionsAssociationsAsync(SetAdExtensionsAssociationsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensionsAssociations/Set", HttpPost, SetAdExtensionsAssociationsResponse.class, asyncHandler); - } - - - public GetAdExtensionsAssociationsResponse getAdExtensionsAssociations(GetAdExtensionsAssociationsRequest request) - throws Exception { - return sendRequest(request, "/AdExtensionsAssociations/Query", HttpPost, GetAdExtensionsAssociationsResponse.class); - } - - public Response getAdExtensionsAssociationsAsync(GetAdExtensionsAssociationsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensionsAssociations/Query", HttpPost, GetAdExtensionsAssociationsResponse.class); - } - - public Future getAdExtensionsAssociationsAsync(GetAdExtensionsAssociationsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensionsAssociations/Query", HttpPost, GetAdExtensionsAssociationsResponse.class, asyncHandler); - } - - - public DeleteAdExtensionsAssociationsResponse deleteAdExtensionsAssociations(DeleteAdExtensionsAssociationsRequest request) - throws Exception { - return sendRequest(request, "/AdExtensionsAssociations", HttpDelete, DeleteAdExtensionsAssociationsResponse.class); - } - - public Response deleteAdExtensionsAssociationsAsync(DeleteAdExtensionsAssociationsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensionsAssociations", HttpDelete, DeleteAdExtensionsAssociationsResponse.class); - } - - public Future deleteAdExtensionsAssociationsAsync(DeleteAdExtensionsAssociationsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensionsAssociations", HttpDelete, DeleteAdExtensionsAssociationsResponse.class, asyncHandler); - } - - - public GetAdExtensionIdsByAccountIdResponse getAdExtensionIdsByAccountId(GetAdExtensionIdsByAccountIdRequest request) - throws Exception { - return sendRequest(request, "/AdExtensionIds/QueryByAccountId", HttpPost, GetAdExtensionIdsByAccountIdResponse.class); - } - - public Response getAdExtensionIdsByAccountIdAsync(GetAdExtensionIdsByAccountIdRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensionIds/QueryByAccountId", HttpPost, GetAdExtensionIdsByAccountIdResponse.class); - } - - public Future getAdExtensionIdsByAccountIdAsync(GetAdExtensionIdsByAccountIdRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdExtensionIds/QueryByAccountId", HttpPost, GetAdExtensionIdsByAccountIdResponse.class, asyncHandler); - } - - - public AddMediaResponse addMedia(AddMediaRequest request) - throws Exception { - return sendRequest(request, "/Media", HttpPost, AddMediaResponse.class); - } - - public Response addMediaAsync(AddMediaRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Media", HttpPost, AddMediaResponse.class); - } - - public Future addMediaAsync(AddMediaRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Media", HttpPost, AddMediaResponse.class, asyncHandler); - } - - - public DeleteMediaResponse deleteMedia(DeleteMediaRequest request) - throws Exception { - return sendRequest(request, "/Media", HttpDelete, DeleteMediaResponse.class); - } - - public Response deleteMediaAsync(DeleteMediaRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Media", HttpDelete, DeleteMediaResponse.class); - } - - public Future deleteMediaAsync(DeleteMediaRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Media", HttpDelete, DeleteMediaResponse.class, asyncHandler); - } - - - public GetMediaMetaDataByAccountIdResponse getMediaMetaDataByAccountId(GetMediaMetaDataByAccountIdRequest request) - throws Exception { - return sendRequest(request, "/MediaMetaData/QueryByAccountId", HttpPost, GetMediaMetaDataByAccountIdResponse.class); - } - - public Response getMediaMetaDataByAccountIdAsync(GetMediaMetaDataByAccountIdRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/MediaMetaData/QueryByAccountId", HttpPost, GetMediaMetaDataByAccountIdResponse.class); - } - - public Future getMediaMetaDataByAccountIdAsync(GetMediaMetaDataByAccountIdRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/MediaMetaData/QueryByAccountId", HttpPost, GetMediaMetaDataByAccountIdResponse.class, asyncHandler); - } - - - public GetMediaMetaDataByIdsResponse getMediaMetaDataByIds(GetMediaMetaDataByIdsRequest request) - throws Exception { - return sendRequest(request, "/MediaMetaData/QueryByIds", HttpPost, GetMediaMetaDataByIdsResponse.class); - } - - public Response getMediaMetaDataByIdsAsync(GetMediaMetaDataByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/MediaMetaData/QueryByIds", HttpPost, GetMediaMetaDataByIdsResponse.class); - } - - public Future getMediaMetaDataByIdsAsync(GetMediaMetaDataByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/MediaMetaData/QueryByIds", HttpPost, GetMediaMetaDataByIdsResponse.class, asyncHandler); - } - - - public GetMediaAssociationsResponse getMediaAssociations(GetMediaAssociationsRequest request) - throws Exception { - return sendRequest(request, "/MediaAssociations/Query", HttpPost, GetMediaAssociationsResponse.class); - } - - public Response getMediaAssociationsAsync(GetMediaAssociationsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/MediaAssociations/Query", HttpPost, GetMediaAssociationsResponse.class); - } - - public Future getMediaAssociationsAsync(GetMediaAssociationsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/MediaAssociations/Query", HttpPost, GetMediaAssociationsResponse.class, asyncHandler); - } - - - public GetAdGroupCriterionsByIdsResponse getAdGroupCriterionsByIds(GetAdGroupCriterionsByIdsRequest request) - throws Exception { - return sendRequest(request, "/AdGroupCriterions/QueryByIds", HttpPost, GetAdGroupCriterionsByIdsResponse.class); - } - - public Response getAdGroupCriterionsByIdsAsync(GetAdGroupCriterionsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroupCriterions/QueryByIds", HttpPost, GetAdGroupCriterionsByIdsResponse.class); - } - - public Future getAdGroupCriterionsByIdsAsync(GetAdGroupCriterionsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroupCriterions/QueryByIds", HttpPost, GetAdGroupCriterionsByIdsResponse.class, asyncHandler); - } - - - public AddAdGroupCriterionsResponse addAdGroupCriterions(AddAdGroupCriterionsRequest request) - throws Exception { - return sendRequest(request, "/AdGroupCriterions", HttpPost, AddAdGroupCriterionsResponse.class); - } - - public Response addAdGroupCriterionsAsync(AddAdGroupCriterionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroupCriterions", HttpPost, AddAdGroupCriterionsResponse.class); - } - - public Future addAdGroupCriterionsAsync(AddAdGroupCriterionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroupCriterions", HttpPost, AddAdGroupCriterionsResponse.class, asyncHandler); - } - - - public UpdateAdGroupCriterionsResponse updateAdGroupCriterions(UpdateAdGroupCriterionsRequest request) - throws Exception { - return sendRequest(request, "/AdGroupCriterions", HttpPut, UpdateAdGroupCriterionsResponse.class); - } - - public Response updateAdGroupCriterionsAsync(UpdateAdGroupCriterionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroupCriterions", HttpPut, UpdateAdGroupCriterionsResponse.class); - } - - public Future updateAdGroupCriterionsAsync(UpdateAdGroupCriterionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroupCriterions", HttpPut, UpdateAdGroupCriterionsResponse.class, asyncHandler); - } - - - public DeleteAdGroupCriterionsResponse deleteAdGroupCriterions(DeleteAdGroupCriterionsRequest request) - throws Exception { - return sendRequest(request, "/AdGroupCriterions", HttpDelete, DeleteAdGroupCriterionsResponse.class); - } - - public Response deleteAdGroupCriterionsAsync(DeleteAdGroupCriterionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroupCriterions", HttpDelete, DeleteAdGroupCriterionsResponse.class); - } - - public Future deleteAdGroupCriterionsAsync(DeleteAdGroupCriterionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AdGroupCriterions", HttpDelete, DeleteAdGroupCriterionsResponse.class, asyncHandler); - } - - - public ApplyProductPartitionActionsResponse applyProductPartitionActions(ApplyProductPartitionActionsRequest request) - throws Exception { - return sendRequest(request, "/ProductPartitionActions/Apply", HttpPost, ApplyProductPartitionActionsResponse.class); - } - - public Response applyProductPartitionActionsAsync(ApplyProductPartitionActionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ProductPartitionActions/Apply", HttpPost, ApplyProductPartitionActionsResponse.class); - } - - public Future applyProductPartitionActionsAsync(ApplyProductPartitionActionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ProductPartitionActions/Apply", HttpPost, ApplyProductPartitionActionsResponse.class, asyncHandler); - } - - - public ApplyHotelGroupActionsResponse applyHotelGroupActions(ApplyHotelGroupActionsRequest request) - throws Exception { - return sendRequest(request, "/HotelGroupActions/Apply", HttpPost, ApplyHotelGroupActionsResponse.class); - } - - public Response applyHotelGroupActionsAsync(ApplyHotelGroupActionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/HotelGroupActions/Apply", HttpPost, ApplyHotelGroupActionsResponse.class); - } - - public Future applyHotelGroupActionsAsync(ApplyHotelGroupActionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/HotelGroupActions/Apply", HttpPost, ApplyHotelGroupActionsResponse.class, asyncHandler); - } - - - public ApplyAssetGroupListingGroupActionsResponse applyAssetGroupListingGroupActions(ApplyAssetGroupListingGroupActionsRequest request) - throws Exception { - return sendRequest(request, "/AssetGroupListingGroupActions/Apply", HttpPost, ApplyAssetGroupListingGroupActionsResponse.class); - } - - public Response applyAssetGroupListingGroupActionsAsync(ApplyAssetGroupListingGroupActionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroupListingGroupActions/Apply", HttpPost, ApplyAssetGroupListingGroupActionsResponse.class); - } - - public Future applyAssetGroupListingGroupActionsAsync(ApplyAssetGroupListingGroupActionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroupListingGroupActions/Apply", HttpPost, ApplyAssetGroupListingGroupActionsResponse.class, asyncHandler); - } - - - public GetAssetGroupListingGroupsByIdsResponse getAssetGroupListingGroupsByIds(GetAssetGroupListingGroupsByIdsRequest request) - throws Exception { - return sendRequest(request, "/AssetGroupListingGroups/QueryByIds", HttpPost, GetAssetGroupListingGroupsByIdsResponse.class); - } - - public Response getAssetGroupListingGroupsByIdsAsync(GetAssetGroupListingGroupsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroupListingGroups/QueryByIds", HttpPost, GetAssetGroupListingGroupsByIdsResponse.class); - } - - public Future getAssetGroupListingGroupsByIdsAsync(GetAssetGroupListingGroupsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroupListingGroups/QueryByIds", HttpPost, GetAssetGroupListingGroupsByIdsResponse.class, asyncHandler); - } - - - public GetBMCStoresByCustomerIdResponse getBMCStoresByCustomerId(GetBMCStoresByCustomerIdRequest request) - throws Exception { - return sendRequest(request, "/BMCStores/QueryByCustomerId", HttpPost, GetBMCStoresByCustomerIdResponse.class); - } - - public Response getBMCStoresByCustomerIdAsync(GetBMCStoresByCustomerIdRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BMCStores/QueryByCustomerId", HttpPost, GetBMCStoresByCustomerIdResponse.class); - } - - public Future getBMCStoresByCustomerIdAsync(GetBMCStoresByCustomerIdRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BMCStores/QueryByCustomerId", HttpPost, GetBMCStoresByCustomerIdResponse.class, asyncHandler); - } - - - public AddNegativeKeywordsToEntitiesResponse addNegativeKeywordsToEntities(AddNegativeKeywordsToEntitiesRequest request) - throws Exception { - return sendRequest(request, "/EntityNegativeKeywords", HttpPost, AddNegativeKeywordsToEntitiesResponse.class); - } - - public Response addNegativeKeywordsToEntitiesAsync(AddNegativeKeywordsToEntitiesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/EntityNegativeKeywords", HttpPost, AddNegativeKeywordsToEntitiesResponse.class); - } - - public Future addNegativeKeywordsToEntitiesAsync(AddNegativeKeywordsToEntitiesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/EntityNegativeKeywords", HttpPost, AddNegativeKeywordsToEntitiesResponse.class, asyncHandler); - } - - - public GetNegativeKeywordsByEntityIdsResponse getNegativeKeywordsByEntityIds(GetNegativeKeywordsByEntityIdsRequest request) - throws Exception { - return sendRequest(request, "/NegativeKeywords/QueryByEntityIds", HttpPost, GetNegativeKeywordsByEntityIdsResponse.class); - } - - public Response getNegativeKeywordsByEntityIdsAsync(GetNegativeKeywordsByEntityIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/NegativeKeywords/QueryByEntityIds", HttpPost, GetNegativeKeywordsByEntityIdsResponse.class); - } - - public Future getNegativeKeywordsByEntityIdsAsync(GetNegativeKeywordsByEntityIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/NegativeKeywords/QueryByEntityIds", HttpPost, GetNegativeKeywordsByEntityIdsResponse.class, asyncHandler); - } - - - public DeleteNegativeKeywordsFromEntitiesResponse deleteNegativeKeywordsFromEntities(DeleteNegativeKeywordsFromEntitiesRequest request) - throws Exception { - return sendRequest(request, "/EntityNegativeKeywords", HttpDelete, DeleteNegativeKeywordsFromEntitiesResponse.class); - } - - public Response deleteNegativeKeywordsFromEntitiesAsync(DeleteNegativeKeywordsFromEntitiesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/EntityNegativeKeywords", HttpDelete, DeleteNegativeKeywordsFromEntitiesResponse.class); - } - - public Future deleteNegativeKeywordsFromEntitiesAsync(DeleteNegativeKeywordsFromEntitiesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/EntityNegativeKeywords", HttpDelete, DeleteNegativeKeywordsFromEntitiesResponse.class, asyncHandler); - } - - - public GetSharedEntitiesByAccountIdResponse getSharedEntitiesByAccountId(GetSharedEntitiesByAccountIdRequest request) - throws Exception { - return sendRequest(request, "/SharedEntities/QueryByAccountId", HttpPost, GetSharedEntitiesByAccountIdResponse.class); - } - - public Response getSharedEntitiesByAccountIdAsync(GetSharedEntitiesByAccountIdRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntities/QueryByAccountId", HttpPost, GetSharedEntitiesByAccountIdResponse.class); - } - - public Future getSharedEntitiesByAccountIdAsync(GetSharedEntitiesByAccountIdRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntities/QueryByAccountId", HttpPost, GetSharedEntitiesByAccountIdResponse.class, asyncHandler); - } - - - public GetSharedEntitiesResponse getSharedEntities(GetSharedEntitiesRequest request) - throws Exception { - return sendRequest(request, "/SharedEntities/Query", HttpPost, GetSharedEntitiesResponse.class); - } - - public Response getSharedEntitiesAsync(GetSharedEntitiesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntities/Query", HttpPost, GetSharedEntitiesResponse.class); - } - - public Future getSharedEntitiesAsync(GetSharedEntitiesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntities/Query", HttpPost, GetSharedEntitiesResponse.class, asyncHandler); - } - - - public AddSharedEntityResponse addSharedEntity(AddSharedEntityRequest request) - throws Exception { - return sendRequest(request, "/SharedEntity", HttpPost, AddSharedEntityResponse.class); - } - - public Response addSharedEntityAsync(AddSharedEntityRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntity", HttpPost, AddSharedEntityResponse.class); - } - - public Future addSharedEntityAsync(AddSharedEntityRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntity", HttpPost, AddSharedEntityResponse.class, asyncHandler); - } - - - public GetListItemsBySharedListResponse getListItemsBySharedList(GetListItemsBySharedListRequest request) - throws Exception { - return sendRequest(request, "/ListItems/QueryBySharedList", HttpPost, GetListItemsBySharedListResponse.class); - } - - public Response getListItemsBySharedListAsync(GetListItemsBySharedListRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ListItems/QueryBySharedList", HttpPost, GetListItemsBySharedListResponse.class); - } - - public Future getListItemsBySharedListAsync(GetListItemsBySharedListRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ListItems/QueryBySharedList", HttpPost, GetListItemsBySharedListResponse.class, asyncHandler); - } - - - public AddListItemsToSharedListResponse addListItemsToSharedList(AddListItemsToSharedListRequest request) - throws Exception { - return sendRequest(request, "/ListItems", HttpPost, AddListItemsToSharedListResponse.class); - } - - public Response addListItemsToSharedListAsync(AddListItemsToSharedListRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ListItems", HttpPost, AddListItemsToSharedListResponse.class); - } - - public Future addListItemsToSharedListAsync(AddListItemsToSharedListRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ListItems", HttpPost, AddListItemsToSharedListResponse.class, asyncHandler); - } - - - public UpdateSharedEntitiesResponse updateSharedEntities(UpdateSharedEntitiesRequest request) - throws Exception { - return sendRequest(request, "/SharedEntities", HttpPut, UpdateSharedEntitiesResponse.class); - } - - public Response updateSharedEntitiesAsync(UpdateSharedEntitiesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntities", HttpPut, UpdateSharedEntitiesResponse.class); - } - - public Future updateSharedEntitiesAsync(UpdateSharedEntitiesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntities", HttpPut, UpdateSharedEntitiesResponse.class, asyncHandler); - } - - - public DeleteListItemsFromSharedListResponse deleteListItemsFromSharedList(DeleteListItemsFromSharedListRequest request) - throws Exception { - return sendRequest(request, "/ListItems", HttpDelete, DeleteListItemsFromSharedListResponse.class); - } - - public Response deleteListItemsFromSharedListAsync(DeleteListItemsFromSharedListRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ListItems", HttpDelete, DeleteListItemsFromSharedListResponse.class); - } - - public Future deleteListItemsFromSharedListAsync(DeleteListItemsFromSharedListRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ListItems", HttpDelete, DeleteListItemsFromSharedListResponse.class, asyncHandler); - } - - - public SetSharedEntityAssociationsResponse setSharedEntityAssociations(SetSharedEntityAssociationsRequest request) - throws Exception { - return sendRequest(request, "/SharedEntityAssociations/Set", HttpPost, SetSharedEntityAssociationsResponse.class); - } - - public Response setSharedEntityAssociationsAsync(SetSharedEntityAssociationsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntityAssociations/Set", HttpPost, SetSharedEntityAssociationsResponse.class); - } - - public Future setSharedEntityAssociationsAsync(SetSharedEntityAssociationsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntityAssociations/Set", HttpPost, SetSharedEntityAssociationsResponse.class, asyncHandler); - } - - - public DeleteSharedEntityAssociationsResponse deleteSharedEntityAssociations(DeleteSharedEntityAssociationsRequest request) - throws Exception { - return sendRequest(request, "/SharedEntityAssociations", HttpDelete, DeleteSharedEntityAssociationsResponse.class); - } - - public Response deleteSharedEntityAssociationsAsync(DeleteSharedEntityAssociationsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntityAssociations", HttpDelete, DeleteSharedEntityAssociationsResponse.class); - } - - public Future deleteSharedEntityAssociationsAsync(DeleteSharedEntityAssociationsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntityAssociations", HttpDelete, DeleteSharedEntityAssociationsResponse.class, asyncHandler); - } - - - public GetSharedEntityAssociationsBySharedEntityIdsResponse getSharedEntityAssociationsBySharedEntityIds(GetSharedEntityAssociationsBySharedEntityIdsRequest request) - throws Exception { - return sendRequest(request, "/SharedEntityAssociations/QueryBySharedEntityIds", HttpPost, GetSharedEntityAssociationsBySharedEntityIdsResponse.class); - } - - public Response getSharedEntityAssociationsBySharedEntityIdsAsync(GetSharedEntityAssociationsBySharedEntityIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntityAssociations/QueryBySharedEntityIds", HttpPost, GetSharedEntityAssociationsBySharedEntityIdsResponse.class); - } - - public Future getSharedEntityAssociationsBySharedEntityIdsAsync(GetSharedEntityAssociationsBySharedEntityIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntityAssociations/QueryBySharedEntityIds", HttpPost, GetSharedEntityAssociationsBySharedEntityIdsResponse.class, asyncHandler); - } - - - public GetSharedEntityAssociationsByEntityIdsResponse getSharedEntityAssociationsByEntityIds(GetSharedEntityAssociationsByEntityIdsRequest request) - throws Exception { - return sendRequest(request, "/SharedEntityAssociations/QueryByEntityIds", HttpPost, GetSharedEntityAssociationsByEntityIdsResponse.class); - } - - public Response getSharedEntityAssociationsByEntityIdsAsync(GetSharedEntityAssociationsByEntityIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntityAssociations/QueryByEntityIds", HttpPost, GetSharedEntityAssociationsByEntityIdsResponse.class); - } - - public Future getSharedEntityAssociationsByEntityIdsAsync(GetSharedEntityAssociationsByEntityIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntityAssociations/QueryByEntityIds", HttpPost, GetSharedEntityAssociationsByEntityIdsResponse.class, asyncHandler); - } - - - public DeleteSharedEntitiesResponse deleteSharedEntities(DeleteSharedEntitiesRequest request) - throws Exception { - return sendRequest(request, "/SharedEntities", HttpDelete, DeleteSharedEntitiesResponse.class); - } - - public Response deleteSharedEntitiesAsync(DeleteSharedEntitiesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntities", HttpDelete, DeleteSharedEntitiesResponse.class); - } - - public Future deleteSharedEntitiesAsync(DeleteSharedEntitiesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SharedEntities", HttpDelete, DeleteSharedEntitiesResponse.class, asyncHandler); - } - - - public GetCampaignSizesByAccountIdResponse getCampaignSizesByAccountId(GetCampaignSizesByAccountIdRequest request) - throws Exception { - return sendRequest(request, "/CampaignSizes/QueryByAccountId", HttpPost, GetCampaignSizesByAccountIdResponse.class); - } - - public Response getCampaignSizesByAccountIdAsync(GetCampaignSizesByAccountIdRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignSizes/QueryByAccountId", HttpPost, GetCampaignSizesByAccountIdResponse.class); - } - - public Future getCampaignSizesByAccountIdAsync(GetCampaignSizesByAccountIdRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignSizes/QueryByAccountId", HttpPost, GetCampaignSizesByAccountIdResponse.class, asyncHandler); - } - - - public AddCampaignCriterionsResponse addCampaignCriterions(AddCampaignCriterionsRequest request) - throws Exception { - return sendRequest(request, "/CampaignCriterions", HttpPost, AddCampaignCriterionsResponse.class); - } - - public Response addCampaignCriterionsAsync(AddCampaignCriterionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignCriterions", HttpPost, AddCampaignCriterionsResponse.class); - } - - public Future addCampaignCriterionsAsync(AddCampaignCriterionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignCriterions", HttpPost, AddCampaignCriterionsResponse.class, asyncHandler); - } - - - public UpdateCampaignCriterionsResponse updateCampaignCriterions(UpdateCampaignCriterionsRequest request) - throws Exception { - return sendRequest(request, "/CampaignCriterions", HttpPut, UpdateCampaignCriterionsResponse.class); - } - - public Response updateCampaignCriterionsAsync(UpdateCampaignCriterionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignCriterions", HttpPut, UpdateCampaignCriterionsResponse.class); - } - - public Future updateCampaignCriterionsAsync(UpdateCampaignCriterionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignCriterions", HttpPut, UpdateCampaignCriterionsResponse.class, asyncHandler); - } - - - public DeleteCampaignCriterionsResponse deleteCampaignCriterions(DeleteCampaignCriterionsRequest request) - throws Exception { - return sendRequest(request, "/CampaignCriterions", HttpDelete, DeleteCampaignCriterionsResponse.class); - } - - public Response deleteCampaignCriterionsAsync(DeleteCampaignCriterionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignCriterions", HttpDelete, DeleteCampaignCriterionsResponse.class); - } - - public Future deleteCampaignCriterionsAsync(DeleteCampaignCriterionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignCriterions", HttpDelete, DeleteCampaignCriterionsResponse.class, asyncHandler); - } - - - public GetCampaignCriterionsByIdsResponse getCampaignCriterionsByIds(GetCampaignCriterionsByIdsRequest request) - throws Exception { - return sendRequest(request, "/CampaignCriterions/QueryByIds", HttpPost, GetCampaignCriterionsByIdsResponse.class); - } - - public Response getCampaignCriterionsByIdsAsync(GetCampaignCriterionsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignCriterions/QueryByIds", HttpPost, GetCampaignCriterionsByIdsResponse.class); - } - - public Future getCampaignCriterionsByIdsAsync(GetCampaignCriterionsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignCriterions/QueryByIds", HttpPost, GetCampaignCriterionsByIdsResponse.class, asyncHandler); - } - - - public AddBudgetsResponse addBudgets(AddBudgetsRequest request) - throws Exception { - return sendRequest(request, "/Budgets", HttpPost, AddBudgetsResponse.class); - } - - public Response addBudgetsAsync(AddBudgetsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Budgets", HttpPost, AddBudgetsResponse.class); - } - - public Future addBudgetsAsync(AddBudgetsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Budgets", HttpPost, AddBudgetsResponse.class, asyncHandler); - } - - - public UpdateBudgetsResponse updateBudgets(UpdateBudgetsRequest request) - throws Exception { - return sendRequest(request, "/Budgets", HttpPut, UpdateBudgetsResponse.class); - } - - public Response updateBudgetsAsync(UpdateBudgetsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Budgets", HttpPut, UpdateBudgetsResponse.class); - } - - public Future updateBudgetsAsync(UpdateBudgetsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Budgets", HttpPut, UpdateBudgetsResponse.class, asyncHandler); - } - - - public DeleteBudgetsResponse deleteBudgets(DeleteBudgetsRequest request) - throws Exception { - return sendRequest(request, "/Budgets", HttpDelete, DeleteBudgetsResponse.class); - } - - public Response deleteBudgetsAsync(DeleteBudgetsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Budgets", HttpDelete, DeleteBudgetsResponse.class); - } - - public Future deleteBudgetsAsync(DeleteBudgetsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Budgets", HttpDelete, DeleteBudgetsResponse.class, asyncHandler); - } - - - public GetBudgetsByIdsResponse getBudgetsByIds(GetBudgetsByIdsRequest request) - throws Exception { - return sendRequest(request, "/Budgets/QueryByIds", HttpPost, GetBudgetsByIdsResponse.class); - } - - public Response getBudgetsByIdsAsync(GetBudgetsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Budgets/QueryByIds", HttpPost, GetBudgetsByIdsResponse.class); - } - - public Future getBudgetsByIdsAsync(GetBudgetsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Budgets/QueryByIds", HttpPost, GetBudgetsByIdsResponse.class, asyncHandler); - } - - - public GetCampaignIdsByBudgetIdsResponse getCampaignIdsByBudgetIds(GetCampaignIdsByBudgetIdsRequest request) - throws Exception { - return sendRequest(request, "/CampaignIds/QueryByBudgetIds", HttpPost, GetCampaignIdsByBudgetIdsResponse.class); - } - - public Response getCampaignIdsByBudgetIdsAsync(GetCampaignIdsByBudgetIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignIds/QueryByBudgetIds", HttpPost, GetCampaignIdsByBudgetIdsResponse.class); - } - - public Future getCampaignIdsByBudgetIdsAsync(GetCampaignIdsByBudgetIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignIds/QueryByBudgetIds", HttpPost, GetCampaignIdsByBudgetIdsResponse.class, asyncHandler); - } - - - public AddBidStrategiesResponse addBidStrategies(AddBidStrategiesRequest request) - throws Exception { - return sendRequest(request, "/BidStrategies", HttpPost, AddBidStrategiesResponse.class); - } - - public Response addBidStrategiesAsync(AddBidStrategiesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BidStrategies", HttpPost, AddBidStrategiesResponse.class); - } - - public Future addBidStrategiesAsync(AddBidStrategiesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BidStrategies", HttpPost, AddBidStrategiesResponse.class, asyncHandler); - } - - - public UpdateBidStrategiesResponse updateBidStrategies(UpdateBidStrategiesRequest request) - throws Exception { - return sendRequest(request, "/BidStrategies", HttpPut, UpdateBidStrategiesResponse.class); - } - - public Response updateBidStrategiesAsync(UpdateBidStrategiesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BidStrategies", HttpPut, UpdateBidStrategiesResponse.class); - } - - public Future updateBidStrategiesAsync(UpdateBidStrategiesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BidStrategies", HttpPut, UpdateBidStrategiesResponse.class, asyncHandler); - } - - - public DeleteBidStrategiesResponse deleteBidStrategies(DeleteBidStrategiesRequest request) - throws Exception { - return sendRequest(request, "/BidStrategies", HttpDelete, DeleteBidStrategiesResponse.class); - } - - public Response deleteBidStrategiesAsync(DeleteBidStrategiesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BidStrategies", HttpDelete, DeleteBidStrategiesResponse.class); - } - - public Future deleteBidStrategiesAsync(DeleteBidStrategiesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BidStrategies", HttpDelete, DeleteBidStrategiesResponse.class, asyncHandler); - } - - - public GetBidStrategiesByIdsResponse getBidStrategiesByIds(GetBidStrategiesByIdsRequest request) - throws Exception { - return sendRequest(request, "/BidStrategies/QueryByIds", HttpPost, GetBidStrategiesByIdsResponse.class); - } - - public Response getBidStrategiesByIdsAsync(GetBidStrategiesByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BidStrategies/QueryByIds", HttpPost, GetBidStrategiesByIdsResponse.class); - } - - public Future getBidStrategiesByIdsAsync(GetBidStrategiesByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/BidStrategies/QueryByIds", HttpPost, GetBidStrategiesByIdsResponse.class, asyncHandler); - } - - - public GetCampaignIdsByBidStrategyIdsResponse getCampaignIdsByBidStrategyIds(GetCampaignIdsByBidStrategyIdsRequest request) - throws Exception { - return sendRequest(request, "/CampaignIds/QueryByBidStrategyIds", HttpPost, GetCampaignIdsByBidStrategyIdsResponse.class); - } - - public Response getCampaignIdsByBidStrategyIdsAsync(GetCampaignIdsByBidStrategyIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignIds/QueryByBidStrategyIds", HttpPost, GetCampaignIdsByBidStrategyIdsResponse.class); - } - - public Future getCampaignIdsByBidStrategyIdsAsync(GetCampaignIdsByBidStrategyIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignIds/QueryByBidStrategyIds", HttpPost, GetCampaignIdsByBidStrategyIdsResponse.class, asyncHandler); - } - - - public AddAudienceGroupsResponse addAudienceGroups(AddAudienceGroupsRequest request) - throws Exception { - return sendRequest(request, "/AudienceGroups", HttpPost, AddAudienceGroupsResponse.class); - } - - public Response addAudienceGroupsAsync(AddAudienceGroupsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroups", HttpPost, AddAudienceGroupsResponse.class); - } - - public Future addAudienceGroupsAsync(AddAudienceGroupsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroups", HttpPost, AddAudienceGroupsResponse.class, asyncHandler); - } - - - public UpdateAudienceGroupsResponse updateAudienceGroups(UpdateAudienceGroupsRequest request) - throws Exception { - return sendRequest(request, "/AudienceGroups", HttpPut, UpdateAudienceGroupsResponse.class); - } - - public Response updateAudienceGroupsAsync(UpdateAudienceGroupsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroups", HttpPut, UpdateAudienceGroupsResponse.class); - } - - public Future updateAudienceGroupsAsync(UpdateAudienceGroupsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroups", HttpPut, UpdateAudienceGroupsResponse.class, asyncHandler); - } - - - public DeleteAudienceGroupsResponse deleteAudienceGroups(DeleteAudienceGroupsRequest request) - throws Exception { - return sendRequest(request, "/AudienceGroups", HttpDelete, DeleteAudienceGroupsResponse.class); - } - - public Response deleteAudienceGroupsAsync(DeleteAudienceGroupsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroups", HttpDelete, DeleteAudienceGroupsResponse.class); - } - - public Future deleteAudienceGroupsAsync(DeleteAudienceGroupsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroups", HttpDelete, DeleteAudienceGroupsResponse.class, asyncHandler); - } - - - public GetAudienceGroupsByIdsResponse getAudienceGroupsByIds(GetAudienceGroupsByIdsRequest request) - throws Exception { - return sendRequest(request, "/AudienceGroups/QueryByIds", HttpPost, GetAudienceGroupsByIdsResponse.class); - } - - public Response getAudienceGroupsByIdsAsync(GetAudienceGroupsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroups/QueryByIds", HttpPost, GetAudienceGroupsByIdsResponse.class); - } - - public Future getAudienceGroupsByIdsAsync(GetAudienceGroupsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroups/QueryByIds", HttpPost, GetAudienceGroupsByIdsResponse.class, asyncHandler); - } - - - public AddAssetGroupsResponse addAssetGroups(AddAssetGroupsRequest request) - throws Exception { - return sendRequest(request, "/AssetGroups", HttpPost, AddAssetGroupsResponse.class); - } - - public Response addAssetGroupsAsync(AddAssetGroupsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroups", HttpPost, AddAssetGroupsResponse.class); - } - - public Future addAssetGroupsAsync(AddAssetGroupsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroups", HttpPost, AddAssetGroupsResponse.class, asyncHandler); - } - - - public UpdateAssetGroupsResponse updateAssetGroups(UpdateAssetGroupsRequest request) - throws Exception { - return sendRequest(request, "/AssetGroups", HttpPut, UpdateAssetGroupsResponse.class); - } - - public Response updateAssetGroupsAsync(UpdateAssetGroupsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroups", HttpPut, UpdateAssetGroupsResponse.class); - } - - public Future updateAssetGroupsAsync(UpdateAssetGroupsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroups", HttpPut, UpdateAssetGroupsResponse.class, asyncHandler); - } - - - public DeleteAssetGroupsResponse deleteAssetGroups(DeleteAssetGroupsRequest request) - throws Exception { - return sendRequest(request, "/AssetGroups", HttpDelete, DeleteAssetGroupsResponse.class); - } - - public Response deleteAssetGroupsAsync(DeleteAssetGroupsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroups", HttpDelete, DeleteAssetGroupsResponse.class); - } - - public Future deleteAssetGroupsAsync(DeleteAssetGroupsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroups", HttpDelete, DeleteAssetGroupsResponse.class, asyncHandler); - } - - - public GetAssetGroupsByIdsResponse getAssetGroupsByIds(GetAssetGroupsByIdsRequest request) - throws Exception { - return sendRequest(request, "/AssetGroups/QueryByIds", HttpPost, GetAssetGroupsByIdsResponse.class); - } - - public Response getAssetGroupsByIdsAsync(GetAssetGroupsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroups/QueryByIds", HttpPost, GetAssetGroupsByIdsResponse.class); - } - - public Future getAssetGroupsByIdsAsync(GetAssetGroupsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroups/QueryByIds", HttpPost, GetAssetGroupsByIdsResponse.class, asyncHandler); - } - - - public GetAssetGroupsByCampaignIdResponse getAssetGroupsByCampaignId(GetAssetGroupsByCampaignIdRequest request) - throws Exception { - return sendRequest(request, "/AssetGroups/QueryByCampaignId", HttpPost, GetAssetGroupsByCampaignIdResponse.class); - } - - public Response getAssetGroupsByCampaignIdAsync(GetAssetGroupsByCampaignIdRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroups/QueryByCampaignId", HttpPost, GetAssetGroupsByCampaignIdResponse.class); - } - - public Future getAssetGroupsByCampaignIdAsync(GetAssetGroupsByCampaignIdRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroups/QueryByCampaignId", HttpPost, GetAssetGroupsByCampaignIdResponse.class, asyncHandler); - } - - - public GetAssetGroupsEditorialReasonsResponse getAssetGroupsEditorialReasons(GetAssetGroupsEditorialReasonsRequest request) - throws Exception { - return sendRequest(request, "/AssetGroupsEditorialReasons/Query", HttpPost, GetAssetGroupsEditorialReasonsResponse.class); - } - - public Response getAssetGroupsEditorialReasonsAsync(GetAssetGroupsEditorialReasonsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroupsEditorialReasons/Query", HttpPost, GetAssetGroupsEditorialReasonsResponse.class); - } - - public Future getAssetGroupsEditorialReasonsAsync(GetAssetGroupsEditorialReasonsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AssetGroupsEditorialReasons/Query", HttpPost, GetAssetGroupsEditorialReasonsResponse.class, asyncHandler); - } - - - public SetAudienceGroupAssetGroupAssociationsResponse setAudienceGroupAssetGroupAssociations(SetAudienceGroupAssetGroupAssociationsRequest request) - throws Exception { - return sendRequest(request, "/AudienceGroupAssetGroupAssociations/Set", HttpPost, SetAudienceGroupAssetGroupAssociationsResponse.class); - } - - public Response setAudienceGroupAssetGroupAssociationsAsync(SetAudienceGroupAssetGroupAssociationsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations/Set", HttpPost, SetAudienceGroupAssetGroupAssociationsResponse.class); - } - - public Future setAudienceGroupAssetGroupAssociationsAsync(SetAudienceGroupAssetGroupAssociationsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations/Set", HttpPost, SetAudienceGroupAssetGroupAssociationsResponse.class, asyncHandler); - } - - - public DeleteAudienceGroupAssetGroupAssociationsResponse deleteAudienceGroupAssetGroupAssociations(DeleteAudienceGroupAssetGroupAssociationsRequest request) - throws Exception { - return sendRequest(request, "/AudienceGroupAssetGroupAssociations", HttpDelete, DeleteAudienceGroupAssetGroupAssociationsResponse.class); - } - - public Response deleteAudienceGroupAssetGroupAssociationsAsync(DeleteAudienceGroupAssetGroupAssociationsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations", HttpDelete, DeleteAudienceGroupAssetGroupAssociationsResponse.class); - } - - public Future deleteAudienceGroupAssetGroupAssociationsAsync(DeleteAudienceGroupAssetGroupAssociationsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations", HttpDelete, DeleteAudienceGroupAssetGroupAssociationsResponse.class, asyncHandler); - } - - - public GetAudienceGroupAssetGroupAssociationsByAssetGroupIdsResponse getAudienceGroupAssetGroupAssociationsByAssetGroupIds(GetAudienceGroupAssetGroupAssociationsByAssetGroupIdsRequest request) - throws Exception { - return sendRequest(request, "/AudienceGroupAssetGroupAssociations/QueryByAssetGroupIds", HttpPost, GetAudienceGroupAssetGroupAssociationsByAssetGroupIdsResponse.class); - } - - public Response getAudienceGroupAssetGroupAssociationsByAssetGroupIdsAsync(GetAudienceGroupAssetGroupAssociationsByAssetGroupIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations/QueryByAssetGroupIds", HttpPost, GetAudienceGroupAssetGroupAssociationsByAssetGroupIdsResponse.class); - } - - public Future getAudienceGroupAssetGroupAssociationsByAssetGroupIdsAsync(GetAudienceGroupAssetGroupAssociationsByAssetGroupIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations/QueryByAssetGroupIds", HttpPost, GetAudienceGroupAssetGroupAssociationsByAssetGroupIdsResponse.class, asyncHandler); - } - - - public GetAudienceGroupAssetGroupAssociationsByAudienceGroupIdsResponse getAudienceGroupAssetGroupAssociationsByAudienceGroupIds(GetAudienceGroupAssetGroupAssociationsByAudienceGroupIdsRequest request) - throws Exception { - return sendRequest(request, "/AudienceGroupAssetGroupAssociations/QueryByAudienceGroupIds", HttpPost, GetAudienceGroupAssetGroupAssociationsByAudienceGroupIdsResponse.class); - } - - public Response getAudienceGroupAssetGroupAssociationsByAudienceGroupIdsAsync(GetAudienceGroupAssetGroupAssociationsByAudienceGroupIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations/QueryByAudienceGroupIds", HttpPost, GetAudienceGroupAssetGroupAssociationsByAudienceGroupIdsResponse.class); - } - - public Future getAudienceGroupAssetGroupAssociationsByAudienceGroupIdsAsync(GetAudienceGroupAssetGroupAssociationsByAudienceGroupIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations/QueryByAudienceGroupIds", HttpPost, GetAudienceGroupAssetGroupAssociationsByAudienceGroupIdsResponse.class, asyncHandler); - } - - - public AddAudiencesResponse addAudiences(AddAudiencesRequest request) - throws Exception { - return sendRequest(request, "/Audiences", HttpPost, AddAudiencesResponse.class); - } - - public Response addAudiencesAsync(AddAudiencesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Audiences", HttpPost, AddAudiencesResponse.class); - } - - public Future addAudiencesAsync(AddAudiencesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Audiences", HttpPost, AddAudiencesResponse.class, asyncHandler); - } - - - public UpdateAudiencesResponse updateAudiences(UpdateAudiencesRequest request) - throws Exception { - return sendRequest(request, "/Audiences", HttpPut, UpdateAudiencesResponse.class); - } - - public Response updateAudiencesAsync(UpdateAudiencesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Audiences", HttpPut, UpdateAudiencesResponse.class); - } - - public Future updateAudiencesAsync(UpdateAudiencesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Audiences", HttpPut, UpdateAudiencesResponse.class, asyncHandler); - } - - - public DeleteAudiencesResponse deleteAudiences(DeleteAudiencesRequest request) - throws Exception { - return sendRequest(request, "/Audiences", HttpDelete, DeleteAudiencesResponse.class); - } - - public Response deleteAudiencesAsync(DeleteAudiencesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Audiences", HttpDelete, DeleteAudiencesResponse.class); - } - - public Future deleteAudiencesAsync(DeleteAudiencesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Audiences", HttpDelete, DeleteAudiencesResponse.class, asyncHandler); - } - - - public GetAudiencesByIdsResponse getAudiencesByIds(GetAudiencesByIdsRequest request) - throws Exception { - return sendRequest(request, "/Audiences/QueryByIds", HttpPost, GetAudiencesByIdsResponse.class); - } - - public Response getAudiencesByIdsAsync(GetAudiencesByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Audiences/QueryByIds", HttpPost, GetAudiencesByIdsResponse.class); - } - - public Future getAudiencesByIdsAsync(GetAudiencesByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Audiences/QueryByIds", HttpPost, GetAudiencesByIdsResponse.class, asyncHandler); - } - - - public ApplyCustomerListItemsResponse applyCustomerListItems(ApplyCustomerListItemsRequest request) - throws Exception { - return sendRequest(request, "/CustomerListItems/Apply", HttpPost, ApplyCustomerListItemsResponse.class); - } - - public Response applyCustomerListItemsAsync(ApplyCustomerListItemsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CustomerListItems/Apply", HttpPost, ApplyCustomerListItemsResponse.class); - } - - public Future applyCustomerListItemsAsync(ApplyCustomerListItemsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CustomerListItems/Apply", HttpPost, ApplyCustomerListItemsResponse.class, asyncHandler); - } - - - public ApplyCustomerListUserDataResponse applyCustomerListUserData(ApplyCustomerListUserDataRequest request) - throws Exception { - return sendRequest(request, "/CustomerListUserData/Apply", HttpPost, ApplyCustomerListUserDataResponse.class); - } - - public Response applyCustomerListUserDataAsync(ApplyCustomerListUserDataRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CustomerListUserData/Apply", HttpPost, ApplyCustomerListUserDataResponse.class); - } - - public Future applyCustomerListUserDataAsync(ApplyCustomerListUserDataRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CustomerListUserData/Apply", HttpPost, ApplyCustomerListUserDataResponse.class, asyncHandler); - } - - - public GetUetTagsByIdsResponse getUetTagsByIds(GetUetTagsByIdsRequest request) - throws Exception { - return sendRequest(request, "/UetTags/QueryByIds", HttpPost, GetUetTagsByIdsResponse.class); - } - - public Response getUetTagsByIdsAsync(GetUetTagsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/UetTags/QueryByIds", HttpPost, GetUetTagsByIdsResponse.class); - } - - public Future getUetTagsByIdsAsync(GetUetTagsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/UetTags/QueryByIds", HttpPost, GetUetTagsByIdsResponse.class, asyncHandler); - } - - - public AddUetTagsResponse addUetTags(AddUetTagsRequest request) - throws Exception { - return sendRequest(request, "/UetTags", HttpPost, AddUetTagsResponse.class); - } - - public Response addUetTagsAsync(AddUetTagsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/UetTags", HttpPost, AddUetTagsResponse.class); - } - - public Future addUetTagsAsync(AddUetTagsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/UetTags", HttpPost, AddUetTagsResponse.class, asyncHandler); - } - - - public UpdateUetTagsResponse updateUetTags(UpdateUetTagsRequest request) - throws Exception { - return sendRequest(request, "/UetTags", HttpPut, UpdateUetTagsResponse.class); - } - - public Response updateUetTagsAsync(UpdateUetTagsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/UetTags", HttpPut, UpdateUetTagsResponse.class); - } - - public Future updateUetTagsAsync(UpdateUetTagsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/UetTags", HttpPut, UpdateUetTagsResponse.class, asyncHandler); - } - - - public GetConversionGoalsByIdsResponse getConversionGoalsByIds(GetConversionGoalsByIdsRequest request) - throws Exception { - return sendRequest(request, "/ConversionGoals/QueryByIds", HttpPost, GetConversionGoalsByIdsResponse.class); - } - - public Response getConversionGoalsByIdsAsync(GetConversionGoalsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ConversionGoals/QueryByIds", HttpPost, GetConversionGoalsByIdsResponse.class); - } - - public Future getConversionGoalsByIdsAsync(GetConversionGoalsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ConversionGoals/QueryByIds", HttpPost, GetConversionGoalsByIdsResponse.class, asyncHandler); - } - - - public GetConversionGoalsByTagIdsResponse getConversionGoalsByTagIds(GetConversionGoalsByTagIdsRequest request) - throws Exception { - return sendRequest(request, "/ConversionGoals/QueryByTagIds", HttpPost, GetConversionGoalsByTagIdsResponse.class); - } - - public Response getConversionGoalsByTagIdsAsync(GetConversionGoalsByTagIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ConversionGoals/QueryByTagIds", HttpPost, GetConversionGoalsByTagIdsResponse.class); - } - - public Future getConversionGoalsByTagIdsAsync(GetConversionGoalsByTagIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ConversionGoals/QueryByTagIds", HttpPost, GetConversionGoalsByTagIdsResponse.class, asyncHandler); - } - - - public AddConversionGoalsResponse addConversionGoals(AddConversionGoalsRequest request) - throws Exception { - return sendRequest(request, "/ConversionGoals", HttpPost, AddConversionGoalsResponse.class); - } - - public Response addConversionGoalsAsync(AddConversionGoalsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ConversionGoals", HttpPost, AddConversionGoalsResponse.class); - } - - public Future addConversionGoalsAsync(AddConversionGoalsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ConversionGoals", HttpPost, AddConversionGoalsResponse.class, asyncHandler); - } - - - public UpdateConversionGoalsResponse updateConversionGoals(UpdateConversionGoalsRequest request) - throws Exception { - return sendRequest(request, "/ConversionGoals", HttpPut, UpdateConversionGoalsResponse.class); - } - - public Response updateConversionGoalsAsync(UpdateConversionGoalsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ConversionGoals", HttpPut, UpdateConversionGoalsResponse.class); - } - - public Future updateConversionGoalsAsync(UpdateConversionGoalsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ConversionGoals", HttpPut, UpdateConversionGoalsResponse.class, asyncHandler); - } - - - public ApplyOfflineConversionsResponse applyOfflineConversions(ApplyOfflineConversionsRequest request) - throws Exception { - return sendRequest(request, "/OfflineConversions/Apply", HttpPost, ApplyOfflineConversionsResponse.class); - } - - public Response applyOfflineConversionsAsync(ApplyOfflineConversionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/OfflineConversions/Apply", HttpPost, ApplyOfflineConversionsResponse.class); - } - - public Future applyOfflineConversionsAsync(ApplyOfflineConversionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/OfflineConversions/Apply", HttpPost, ApplyOfflineConversionsResponse.class, asyncHandler); - } - - - public ApplyOfflineConversionAdjustmentsResponse applyOfflineConversionAdjustments(ApplyOfflineConversionAdjustmentsRequest request) - throws Exception { - return sendRequest(request, "/OfflineConversionAdjustments/Apply", HttpPost, ApplyOfflineConversionAdjustmentsResponse.class); - } - - public Response applyOfflineConversionAdjustmentsAsync(ApplyOfflineConversionAdjustmentsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/OfflineConversionAdjustments/Apply", HttpPost, ApplyOfflineConversionAdjustmentsResponse.class); - } - - public Future applyOfflineConversionAdjustmentsAsync(ApplyOfflineConversionAdjustmentsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/OfflineConversionAdjustments/Apply", HttpPost, ApplyOfflineConversionAdjustmentsResponse.class, asyncHandler); - } - - - public ApplyOnlineConversionAdjustmentsResponse applyOnlineConversionAdjustments(ApplyOnlineConversionAdjustmentsRequest request) - throws Exception { - return sendRequest(request, "/OnlineConversionAdjustments/Apply", HttpPost, ApplyOnlineConversionAdjustmentsResponse.class); - } - - public Response applyOnlineConversionAdjustmentsAsync(ApplyOnlineConversionAdjustmentsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/OnlineConversionAdjustments/Apply", HttpPost, ApplyOnlineConversionAdjustmentsResponse.class); - } - - public Future applyOnlineConversionAdjustmentsAsync(ApplyOnlineConversionAdjustmentsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/OnlineConversionAdjustments/Apply", HttpPost, ApplyOnlineConversionAdjustmentsResponse.class, asyncHandler); - } - - - public AddLabelsResponse addLabels(AddLabelsRequest request) - throws Exception { - return sendRequest(request, "/Labels", HttpPost, AddLabelsResponse.class); - } - - public Response addLabelsAsync(AddLabelsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Labels", HttpPost, AddLabelsResponse.class); - } - - public Future addLabelsAsync(AddLabelsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Labels", HttpPost, AddLabelsResponse.class, asyncHandler); - } - - - public DeleteLabelsResponse deleteLabels(DeleteLabelsRequest request) - throws Exception { - return sendRequest(request, "/Labels", HttpDelete, DeleteLabelsResponse.class); - } - - public Response deleteLabelsAsync(DeleteLabelsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Labels", HttpDelete, DeleteLabelsResponse.class); - } - - public Future deleteLabelsAsync(DeleteLabelsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Labels", HttpDelete, DeleteLabelsResponse.class, asyncHandler); - } - - - public UpdateLabelsResponse updateLabels(UpdateLabelsRequest request) - throws Exception { - return sendRequest(request, "/Labels", HttpPut, UpdateLabelsResponse.class); - } - - public Response updateLabelsAsync(UpdateLabelsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Labels", HttpPut, UpdateLabelsResponse.class); - } - - public Future updateLabelsAsync(UpdateLabelsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Labels", HttpPut, UpdateLabelsResponse.class, asyncHandler); - } - - - public GetLabelsByIdsResponse getLabelsByIds(GetLabelsByIdsRequest request) - throws Exception { - return sendRequest(request, "/Labels/QueryByIds", HttpPost, GetLabelsByIdsResponse.class); - } - - public Response getLabelsByIdsAsync(GetLabelsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Labels/QueryByIds", HttpPost, GetLabelsByIdsResponse.class); - } - - public Future getLabelsByIdsAsync(GetLabelsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Labels/QueryByIds", HttpPost, GetLabelsByIdsResponse.class, asyncHandler); - } - - - public SetLabelAssociationsResponse setLabelAssociations(SetLabelAssociationsRequest request) - throws Exception { - return sendRequest(request, "/LabelAssociations/Set", HttpPost, SetLabelAssociationsResponse.class); - } - - public Response setLabelAssociationsAsync(SetLabelAssociationsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/LabelAssociations/Set", HttpPost, SetLabelAssociationsResponse.class); - } - - public Future setLabelAssociationsAsync(SetLabelAssociationsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/LabelAssociations/Set", HttpPost, SetLabelAssociationsResponse.class, asyncHandler); - } - - - public DeleteLabelAssociationsResponse deleteLabelAssociations(DeleteLabelAssociationsRequest request) - throws Exception { - return sendRequest(request, "/LabelAssociations", HttpDelete, DeleteLabelAssociationsResponse.class); - } - - public Response deleteLabelAssociationsAsync(DeleteLabelAssociationsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/LabelAssociations", HttpDelete, DeleteLabelAssociationsResponse.class); - } - - public Future deleteLabelAssociationsAsync(DeleteLabelAssociationsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/LabelAssociations", HttpDelete, DeleteLabelAssociationsResponse.class, asyncHandler); - } - - - public GetLabelAssociationsByEntityIdsResponse getLabelAssociationsByEntityIds(GetLabelAssociationsByEntityIdsRequest request) - throws Exception { - return sendRequest(request, "/LabelAssociations/QueryByEntityIds", HttpPost, GetLabelAssociationsByEntityIdsResponse.class); - } - - public Response getLabelAssociationsByEntityIdsAsync(GetLabelAssociationsByEntityIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/LabelAssociations/QueryByEntityIds", HttpPost, GetLabelAssociationsByEntityIdsResponse.class); - } - - public Future getLabelAssociationsByEntityIdsAsync(GetLabelAssociationsByEntityIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/LabelAssociations/QueryByEntityIds", HttpPost, GetLabelAssociationsByEntityIdsResponse.class, asyncHandler); - } - - - public GetLabelAssociationsByLabelIdsResponse getLabelAssociationsByLabelIds(GetLabelAssociationsByLabelIdsRequest request) - throws Exception { - return sendRequest(request, "/LabelAssociations/QueryByLabelIds", HttpPost, GetLabelAssociationsByLabelIdsResponse.class); - } - - public Response getLabelAssociationsByLabelIdsAsync(GetLabelAssociationsByLabelIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/LabelAssociations/QueryByLabelIds", HttpPost, GetLabelAssociationsByLabelIdsResponse.class); - } - - public Future getLabelAssociationsByLabelIdsAsync(GetLabelAssociationsByLabelIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/LabelAssociations/QueryByLabelIds", HttpPost, GetLabelAssociationsByLabelIdsResponse.class, asyncHandler); - } - - - public AddExperimentsResponse addExperiments(AddExperimentsRequest request) - throws Exception { - return sendRequest(request, "/Experiments", HttpPost, AddExperimentsResponse.class); - } - - public Response addExperimentsAsync(AddExperimentsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Experiments", HttpPost, AddExperimentsResponse.class); - } - - public Future addExperimentsAsync(AddExperimentsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Experiments", HttpPost, AddExperimentsResponse.class, asyncHandler); - } - - - public DeleteExperimentsResponse deleteExperiments(DeleteExperimentsRequest request) - throws Exception { - return sendRequest(request, "/Experiments", HttpDelete, DeleteExperimentsResponse.class); - } - - public Response deleteExperimentsAsync(DeleteExperimentsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Experiments", HttpDelete, DeleteExperimentsResponse.class); - } - - public Future deleteExperimentsAsync(DeleteExperimentsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Experiments", HttpDelete, DeleteExperimentsResponse.class, asyncHandler); - } - - - public UpdateExperimentsResponse updateExperiments(UpdateExperimentsRequest request) - throws Exception { - return sendRequest(request, "/Experiments", HttpPut, UpdateExperimentsResponse.class); - } - - public Response updateExperimentsAsync(UpdateExperimentsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Experiments", HttpPut, UpdateExperimentsResponse.class); - } - - public Future updateExperimentsAsync(UpdateExperimentsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Experiments", HttpPut, UpdateExperimentsResponse.class, asyncHandler); - } - - - public GetExperimentsByIdsResponse getExperimentsByIds(GetExperimentsByIdsRequest request) - throws Exception { - return sendRequest(request, "/Experiments/QueryByIds", HttpPost, GetExperimentsByIdsResponse.class); - } - - public Response getExperimentsByIdsAsync(GetExperimentsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Experiments/QueryByIds", HttpPost, GetExperimentsByIdsResponse.class); - } - - public Future getExperimentsByIdsAsync(GetExperimentsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Experiments/QueryByIds", HttpPost, GetExperimentsByIdsResponse.class, asyncHandler); - } - - - public GetProfileDataFileUrlResponse getProfileDataFileUrl(GetProfileDataFileUrlRequest request) - throws Exception { - return sendRequest(request, "/ProfileDataFileUrl/Query", HttpPost, GetProfileDataFileUrlResponse.class); - } - - public Response getProfileDataFileUrlAsync(GetProfileDataFileUrlRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ProfileDataFileUrl/Query", HttpPost, GetProfileDataFileUrlResponse.class); - } - - public Future getProfileDataFileUrlAsync(GetProfileDataFileUrlRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ProfileDataFileUrl/Query", HttpPost, GetProfileDataFileUrlResponse.class, asyncHandler); - } - - - public SearchCompaniesResponse searchCompanies(SearchCompaniesRequest request) - throws Exception { - return sendRequest(request, "/Companies/Search", HttpPost, SearchCompaniesResponse.class); - } - - public Response searchCompaniesAsync(SearchCompaniesRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Companies/Search", HttpPost, SearchCompaniesResponse.class); - } - - public Future searchCompaniesAsync(SearchCompaniesRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Companies/Search", HttpPost, SearchCompaniesResponse.class, asyncHandler); - } - - - public GetFileImportUploadUrlResponse getFileImportUploadUrl(GetFileImportUploadUrlRequest request) - throws Exception { - return sendRequest(request, "/FileImportUploadUrl/Query", HttpPost, GetFileImportUploadUrlResponse.class); - } - - public Response getFileImportUploadUrlAsync(GetFileImportUploadUrlRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/FileImportUploadUrl/Query", HttpPost, GetFileImportUploadUrlResponse.class); - } - - public Future getFileImportUploadUrlAsync(GetFileImportUploadUrlRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/FileImportUploadUrl/Query", HttpPost, GetFileImportUploadUrlResponse.class, asyncHandler); - } - - - public AddImportJobsResponse addImportJobs(AddImportJobsRequest request) - throws Exception { - return sendRequest(request, "/ImportJobs", HttpPost, AddImportJobsResponse.class); - } - - public Response addImportJobsAsync(AddImportJobsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ImportJobs", HttpPost, AddImportJobsResponse.class); - } - - public Future addImportJobsAsync(AddImportJobsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ImportJobs", HttpPost, AddImportJobsResponse.class, asyncHandler); - } - - - public GetImportResultsResponse getImportResults(GetImportResultsRequest request) - throws Exception { - return sendRequest(request, "/ImportResults/Query", HttpPost, GetImportResultsResponse.class); - } - - public Response getImportResultsAsync(GetImportResultsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ImportResults/Query", HttpPost, GetImportResultsResponse.class); - } - - public Future getImportResultsAsync(GetImportResultsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ImportResults/Query", HttpPost, GetImportResultsResponse.class, asyncHandler); - } - - - public GetImportJobsByIdsResponse getImportJobsByIds(GetImportJobsByIdsRequest request) - throws Exception { - return sendRequest(request, "/ImportJobs/QueryByIds", HttpPost, GetImportJobsByIdsResponse.class); - } - - public Response getImportJobsByIdsAsync(GetImportJobsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ImportJobs/QueryByIds", HttpPost, GetImportJobsByIdsResponse.class); - } - - public Future getImportJobsByIdsAsync(GetImportJobsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ImportJobs/QueryByIds", HttpPost, GetImportJobsByIdsResponse.class, asyncHandler); - } - - - public DeleteImportJobsResponse deleteImportJobs(DeleteImportJobsRequest request) - throws Exception { - return sendRequest(request, "/ImportJobs", HttpDelete, DeleteImportJobsResponse.class); - } - - public Response deleteImportJobsAsync(DeleteImportJobsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ImportJobs", HttpDelete, DeleteImportJobsResponse.class); - } - - public Future deleteImportJobsAsync(DeleteImportJobsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ImportJobs", HttpDelete, DeleteImportJobsResponse.class, asyncHandler); - } - - - public GetImportEntityIdsMappingResponse getImportEntityIdsMapping(GetImportEntityIdsMappingRequest request) - throws Exception { - return sendRequest(request, "/ImportEntityIdsMapping/Query", HttpPost, GetImportEntityIdsMappingResponse.class); - } - - public Response getImportEntityIdsMappingAsync(GetImportEntityIdsMappingRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ImportEntityIdsMapping/Query", HttpPost, GetImportEntityIdsMappingResponse.class); - } - - public Future getImportEntityIdsMappingAsync(GetImportEntityIdsMappingRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ImportEntityIdsMapping/Query", HttpPost, GetImportEntityIdsMappingResponse.class, asyncHandler); - } - - - public UpdateImportJobsResponse updateImportJobs(UpdateImportJobsRequest request) - throws Exception { - return sendRequest(request, "/ImportJobs", HttpPut, UpdateImportJobsResponse.class); - } - - public Response updateImportJobsAsync(UpdateImportJobsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ImportJobs", HttpPut, UpdateImportJobsResponse.class); - } - - public Future updateImportJobsAsync(UpdateImportJobsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/ImportJobs", HttpPut, UpdateImportJobsResponse.class, asyncHandler); - } - - - public AddVideosResponse addVideos(AddVideosRequest request) - throws Exception { - return sendRequest(request, "/Videos", HttpPost, AddVideosResponse.class); - } - - public Response addVideosAsync(AddVideosRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Videos", HttpPost, AddVideosResponse.class); - } - - public Future addVideosAsync(AddVideosRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Videos", HttpPost, AddVideosResponse.class, asyncHandler); - } - - - public DeleteVideosResponse deleteVideos(DeleteVideosRequest request) - throws Exception { - return sendRequest(request, "/Videos", HttpDelete, DeleteVideosResponse.class); - } - - public Response deleteVideosAsync(DeleteVideosRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Videos", HttpDelete, DeleteVideosResponse.class); - } - - public Future deleteVideosAsync(DeleteVideosRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Videos", HttpDelete, DeleteVideosResponse.class, asyncHandler); - } - - - public GetVideosByIdsResponse getVideosByIds(GetVideosByIdsRequest request) - throws Exception { - return sendRequest(request, "/Videos/QueryByIds", HttpPost, GetVideosByIdsResponse.class); - } - - public Response getVideosByIdsAsync(GetVideosByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Videos/QueryByIds", HttpPost, GetVideosByIdsResponse.class); - } - - public Future getVideosByIdsAsync(GetVideosByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Videos/QueryByIds", HttpPost, GetVideosByIdsResponse.class, asyncHandler); - } - - - public UpdateVideosResponse updateVideos(UpdateVideosRequest request) - throws Exception { - return sendRequest(request, "/Videos", HttpPut, UpdateVideosResponse.class); - } - - public Response updateVideosAsync(UpdateVideosRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Videos", HttpPut, UpdateVideosResponse.class); - } - - public Future updateVideosAsync(UpdateVideosRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/Videos", HttpPut, UpdateVideosResponse.class, asyncHandler); - } - - - public AddCampaignConversionGoalsResponse addCampaignConversionGoals(AddCampaignConversionGoalsRequest request) - throws Exception { - return sendRequest(request, "/CampaignConversionGoals", HttpPost, AddCampaignConversionGoalsResponse.class); - } - - public Response addCampaignConversionGoalsAsync(AddCampaignConversionGoalsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignConversionGoals", HttpPost, AddCampaignConversionGoalsResponse.class); - } - - public Future addCampaignConversionGoalsAsync(AddCampaignConversionGoalsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignConversionGoals", HttpPost, AddCampaignConversionGoalsResponse.class, asyncHandler); - } - - - public DeleteCampaignConversionGoalsResponse deleteCampaignConversionGoals(DeleteCampaignConversionGoalsRequest request) - throws Exception { - return sendRequest(request, "/CampaignConversionGoals", HttpDelete, DeleteCampaignConversionGoalsResponse.class); - } - - public Response deleteCampaignConversionGoalsAsync(DeleteCampaignConversionGoalsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignConversionGoals", HttpDelete, DeleteCampaignConversionGoalsResponse.class); - } - - public Future deleteCampaignConversionGoalsAsync(DeleteCampaignConversionGoalsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/CampaignConversionGoals", HttpDelete, DeleteCampaignConversionGoalsResponse.class, asyncHandler); - } - - - public AddDataExclusionsResponse addDataExclusions(AddDataExclusionsRequest request) - throws Exception { - return sendRequest(request, "/DataExclusions", HttpPost, AddDataExclusionsResponse.class); - } - - public Response addDataExclusionsAsync(AddDataExclusionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/DataExclusions", HttpPost, AddDataExclusionsResponse.class); - } - - public Future addDataExclusionsAsync(AddDataExclusionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/DataExclusions", HttpPost, AddDataExclusionsResponse.class, asyncHandler); - } - - - public UpdateDataExclusionsResponse updateDataExclusions(UpdateDataExclusionsRequest request) - throws Exception { - return sendRequest(request, "/DataExclusions", HttpPut, UpdateDataExclusionsResponse.class); - } - - public Response updateDataExclusionsAsync(UpdateDataExclusionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/DataExclusions", HttpPut, UpdateDataExclusionsResponse.class); - } - - public Future updateDataExclusionsAsync(UpdateDataExclusionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/DataExclusions", HttpPut, UpdateDataExclusionsResponse.class, asyncHandler); - } - - - public DeleteDataExclusionsResponse deleteDataExclusions(DeleteDataExclusionsRequest request) - throws Exception { - return sendRequest(request, "/DataExclusions", HttpDelete, DeleteDataExclusionsResponse.class); - } - - public Response deleteDataExclusionsAsync(DeleteDataExclusionsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/DataExclusions", HttpDelete, DeleteDataExclusionsResponse.class); - } - - public Future deleteDataExclusionsAsync(DeleteDataExclusionsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/DataExclusions", HttpDelete, DeleteDataExclusionsResponse.class, asyncHandler); - } - - - public GetDataExclusionsByIdsResponse getDataExclusionsByIds(GetDataExclusionsByIdsRequest request) - throws Exception { - return sendRequest(request, "/DataExclusions/QueryByIds", HttpPost, GetDataExclusionsByIdsResponse.class); - } - - public Response getDataExclusionsByIdsAsync(GetDataExclusionsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/DataExclusions/QueryByIds", HttpPost, GetDataExclusionsByIdsResponse.class); - } - - public Future getDataExclusionsByIdsAsync(GetDataExclusionsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/DataExclusions/QueryByIds", HttpPost, GetDataExclusionsByIdsResponse.class, asyncHandler); - } - - - public GetDataExclusionsByAccountIdResponse getDataExclusionsByAccountId(GetDataExclusionsByAccountIdRequest request) - throws Exception { - return sendRequest(request, "/DataExclusions/QueryByAccountId", HttpPost, GetDataExclusionsByAccountIdResponse.class); - } - - public Response getDataExclusionsByAccountIdAsync(GetDataExclusionsByAccountIdRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/DataExclusions/QueryByAccountId", HttpPost, GetDataExclusionsByAccountIdResponse.class); - } - - public Future getDataExclusionsByAccountIdAsync(GetDataExclusionsByAccountIdRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/DataExclusions/QueryByAccountId", HttpPost, GetDataExclusionsByAccountIdResponse.class, asyncHandler); - } - - - public AddSeasonalityAdjustmentsResponse addSeasonalityAdjustments(AddSeasonalityAdjustmentsRequest request) - throws Exception { - return sendRequest(request, "/SeasonalityAdjustments", HttpPost, AddSeasonalityAdjustmentsResponse.class); - } - - public Response addSeasonalityAdjustmentsAsync(AddSeasonalityAdjustmentsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SeasonalityAdjustments", HttpPost, AddSeasonalityAdjustmentsResponse.class); - } - - public Future addSeasonalityAdjustmentsAsync(AddSeasonalityAdjustmentsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SeasonalityAdjustments", HttpPost, AddSeasonalityAdjustmentsResponse.class, asyncHandler); - } - - - public UpdateSeasonalityAdjustmentsResponse updateSeasonalityAdjustments(UpdateSeasonalityAdjustmentsRequest request) - throws Exception { - return sendRequest(request, "/SeasonalityAdjustments", HttpPut, UpdateSeasonalityAdjustmentsResponse.class); - } - - public Response updateSeasonalityAdjustmentsAsync(UpdateSeasonalityAdjustmentsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SeasonalityAdjustments", HttpPut, UpdateSeasonalityAdjustmentsResponse.class); - } - - public Future updateSeasonalityAdjustmentsAsync(UpdateSeasonalityAdjustmentsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SeasonalityAdjustments", HttpPut, UpdateSeasonalityAdjustmentsResponse.class, asyncHandler); - } - - - public DeleteSeasonalityAdjustmentsResponse deleteSeasonalityAdjustments(DeleteSeasonalityAdjustmentsRequest request) - throws Exception { - return sendRequest(request, "/SeasonalityAdjustments", HttpDelete, DeleteSeasonalityAdjustmentsResponse.class); - } - - public Response deleteSeasonalityAdjustmentsAsync(DeleteSeasonalityAdjustmentsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SeasonalityAdjustments", HttpDelete, DeleteSeasonalityAdjustmentsResponse.class); - } - - public Future deleteSeasonalityAdjustmentsAsync(DeleteSeasonalityAdjustmentsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SeasonalityAdjustments", HttpDelete, DeleteSeasonalityAdjustmentsResponse.class, asyncHandler); - } - - - public GetSeasonalityAdjustmentsByIdsResponse getSeasonalityAdjustmentsByIds(GetSeasonalityAdjustmentsByIdsRequest request) - throws Exception { - return sendRequest(request, "/SeasonalityAdjustments/QueryByIds", HttpPost, GetSeasonalityAdjustmentsByIdsResponse.class); - } - - public Response getSeasonalityAdjustmentsByIdsAsync(GetSeasonalityAdjustmentsByIdsRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SeasonalityAdjustments/QueryByIds", HttpPost, GetSeasonalityAdjustmentsByIdsResponse.class); - } - - public Future getSeasonalityAdjustmentsByIdsAsync(GetSeasonalityAdjustmentsByIdsRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SeasonalityAdjustments/QueryByIds", HttpPost, GetSeasonalityAdjustmentsByIdsResponse.class, asyncHandler); - } - - - public GetSeasonalityAdjustmentsByAccountIdResponse getSeasonalityAdjustmentsByAccountId(GetSeasonalityAdjustmentsByAccountIdRequest request) - throws Exception { - return sendRequest(request, "/SeasonalityAdjustments/QueryByAccountId", HttpPost, GetSeasonalityAdjustmentsByAccountIdResponse.class); - } - - public Response getSeasonalityAdjustmentsByAccountIdAsync(GetSeasonalityAdjustmentsByAccountIdRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SeasonalityAdjustments/QueryByAccountId", HttpPost, GetSeasonalityAdjustmentsByAccountIdResponse.class); - } - - public Future getSeasonalityAdjustmentsByAccountIdAsync(GetSeasonalityAdjustmentsByAccountIdRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/SeasonalityAdjustments/QueryByAccountId", HttpPost, GetSeasonalityAdjustmentsByAccountIdResponse.class, asyncHandler); - } - - } \ No newline at end of file diff --git a/src/main/java/com/microsoft/bingads/internal/restful/CampaignManagementService.java b/src/main/java/com/microsoft/bingads/internal/restful/CampaignManagementService.java new file mode 100644 index 0000000000..4dab5138bb --- /dev/null +++ b/src/main/java/com/microsoft/bingads/internal/restful/CampaignManagementService.java @@ -0,0 +1,3218 @@ +package com.microsoft.bingads.internal.restful; + +import java.util.Map; +import java.util.concurrent.Future; +import java.util.function.BiFunction; +import java.util.function.Supplier; + +import jakarta.xml.ws.AsyncHandler; +import jakarta.xml.ws.Response; + +import com.microsoft.bingads.ApiEnvironment; +import com.microsoft.bingads.InternalException; +import com.microsoft.bingads.v13.campaignmanagement.*; + +public class CampaignManagementService extends RestfulServiceClient implements ICampaignManagementService { + + private Supplier fallbackService; + + public CampaignManagementService(Map headers, ApiEnvironment env, Supplier fallbackService) { + super(headers, env, ICampaignManagementService.class); + + this.fallbackService = fallbackService; + } + + Exception processFaultDetail(ApplicationFault faultDetail, boolean shouldThrow) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + String message = getFaultMessage(faultDetail.getTrackingId()); + + if (faultDetail instanceof AdApiFaultDetail) { + AdApiFaultDetail_Exception ex = new AdApiFaultDetail_Exception(message, (AdApiFaultDetail)faultDetail); + + if (shouldThrow) { + throw ex; + } + + return ex; + } + + if (faultDetail instanceof ApiFaultDetail) { + ApiFaultDetail_Exception ex = new ApiFaultDetail_Exception(message, (ApiFaultDetail)faultDetail); + + if (shouldThrow) { + throw ex; + } + + return ex; + } + + if (shouldThrow) { + throw new RuntimeException("Unknown fault type: " + faultDetail.getClass()); + } + + return null; + } + + Exception processFaultDetailEditorialFault(ApplicationFault faultDetail, boolean shouldThrow) + throws AdApiFaultDetail_Exception, EditorialApiFaultDetail_Exception { + String message = getFaultMessage(faultDetail.getTrackingId()); + + if (faultDetail instanceof AdApiFaultDetail) { + AdApiFaultDetail_Exception ex = new AdApiFaultDetail_Exception(message, (AdApiFaultDetail)faultDetail); + + if (shouldThrow) { + throw ex; + } + + return ex; + } + + if (faultDetail instanceof EditorialApiFaultDetail) { + EditorialApiFaultDetail_Exception ex = new EditorialApiFaultDetail_Exception(message, (EditorialApiFaultDetail)faultDetail); + + if (shouldThrow) { + throw ex; + } + + return ex; + } + + if (shouldThrow) { + throw new RuntimeException("Unknown fault type: " + faultDetail.getClass()); + } + + return null; + } + + protected Resp sendRequest(Req request, String entityEndpoint, String verb, Class respClass) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + ResponseInfo responseInfo = getResponseInfo(request, entityEndpoint, verb, respClass, ApplicationFault.class); + + if (responseInfo == null) { + return null; + } + + ApplicationFault faultDetail = responseInfo.getFaultDetail(); + + if (faultDetail != null) { + processFaultDetail(faultDetail, true); + } + + return responseInfo.getResponse(); + } + + protected Resp sendRequestEditorialFault(Req request, String entityEndpoint, String verb, Class respClass) + throws AdApiFaultDetail_Exception, EditorialApiFaultDetail_Exception { + ResponseInfo responseInfo = getResponseInfo(request, entityEndpoint, verb, respClass, ApplicationFault.class); + + if (responseInfo == null) { + return null; + } + + ApplicationFault faultDetail = responseInfo.getFaultDetail(); + + if (faultDetail != null) { + processFaultDetailEditorialFault(faultDetail, true); + } + + return responseInfo.getResponse(); + } + + private Exception getFaultException(ApplicationFault faultDetail) { + try { + Exception ex = processFaultDetail(faultDetail, false); + + if (ex == null) { + ex = processFaultDetailEditorialFault(faultDetail, false); + } + + return ex; + } catch (Exception ex) { + throw new InternalException(ex); + } + } + + protected Response sendRequestAsync(Req request, String entityEndpoint, String verb, Class respClass, BiFunction, Future> soapMethod, AsyncHandler handler) { + return processRequestAsync(request, entityEndpoint, verb, respClass, ApplicationFault.class, x -> getFaultException(x), soapMethod, handler); + } + + public AddCampaignsResponse addCampaigns(AddCampaignsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddCampaignsResponse response = sendRequest(request, "/Campaigns", HttpPost, AddCampaignsResponse.class); + + if (response == null) { + response = fallbackService.get().addCampaigns(request); + } + + return response; + } + + public Response addCampaignsAsync(AddCampaignsRequest request) { + return sendRequestAsync(request, "/Campaigns", HttpPost, AddCampaignsResponse.class, (r, h) -> fallbackService.get().addCampaignsAsync(r, h), null); + } + + public Future addCampaignsAsync(AddCampaignsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Campaigns", HttpPost, AddCampaignsResponse.class, (r, h) -> fallbackService.get().addCampaignsAsync(r, h), asyncHandler); + } + + + public GetCampaignsByAccountIdResponse getCampaignsByAccountId(GetCampaignsByAccountIdRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetCampaignsByAccountIdResponse response = sendRequest(request, "/Campaigns/QueryByAccountId", HttpPost, GetCampaignsByAccountIdResponse.class); + + if (response == null) { + response = fallbackService.get().getCampaignsByAccountId(request); + } + + return response; + } + + public Response getCampaignsByAccountIdAsync(GetCampaignsByAccountIdRequest request) { + return sendRequestAsync(request, "/Campaigns/QueryByAccountId", HttpPost, GetCampaignsByAccountIdResponse.class, (r, h) -> fallbackService.get().getCampaignsByAccountIdAsync(r, h), null); + } + + public Future getCampaignsByAccountIdAsync(GetCampaignsByAccountIdRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Campaigns/QueryByAccountId", HttpPost, GetCampaignsByAccountIdResponse.class, (r, h) -> fallbackService.get().getCampaignsByAccountIdAsync(r, h), asyncHandler); + } + + + public GetCampaignsByIdsResponse getCampaignsByIds(GetCampaignsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetCampaignsByIdsResponse response = sendRequest(request, "/Campaigns/QueryByIds", HttpPost, GetCampaignsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getCampaignsByIds(request); + } + + return response; + } + + public Response getCampaignsByIdsAsync(GetCampaignsByIdsRequest request) { + return sendRequestAsync(request, "/Campaigns/QueryByIds", HttpPost, GetCampaignsByIdsResponse.class, (r, h) -> fallbackService.get().getCampaignsByIdsAsync(r, h), null); + } + + public Future getCampaignsByIdsAsync(GetCampaignsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Campaigns/QueryByIds", HttpPost, GetCampaignsByIdsResponse.class, (r, h) -> fallbackService.get().getCampaignsByIdsAsync(r, h), asyncHandler); + } + + + public DeleteCampaignsResponse deleteCampaigns(DeleteCampaignsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteCampaignsResponse response = sendRequest(request, "/Campaigns", HttpDelete, DeleteCampaignsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteCampaigns(request); + } + + return response; + } + + public Response deleteCampaignsAsync(DeleteCampaignsRequest request) { + return sendRequestAsync(request, "/Campaigns", HttpDelete, DeleteCampaignsResponse.class, (r, h) -> fallbackService.get().deleteCampaignsAsync(r, h), null); + } + + public Future deleteCampaignsAsync(DeleteCampaignsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Campaigns", HttpDelete, DeleteCampaignsResponse.class, (r, h) -> fallbackService.get().deleteCampaignsAsync(r, h), asyncHandler); + } + + + public UpdateCampaignsResponse updateCampaigns(UpdateCampaignsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateCampaignsResponse response = sendRequest(request, "/Campaigns", HttpPut, UpdateCampaignsResponse.class); + + if (response == null) { + response = fallbackService.get().updateCampaigns(request); + } + + return response; + } + + public Response updateCampaignsAsync(UpdateCampaignsRequest request) { + return sendRequestAsync(request, "/Campaigns", HttpPut, UpdateCampaignsResponse.class, (r, h) -> fallbackService.get().updateCampaignsAsync(r, h), null); + } + + public Future updateCampaignsAsync(UpdateCampaignsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Campaigns", HttpPut, UpdateCampaignsResponse.class, (r, h) -> fallbackService.get().updateCampaignsAsync(r, h), asyncHandler); + } + + + public GetNegativeSitesByCampaignIdsResponse getNegativeSitesByCampaignIds(GetNegativeSitesByCampaignIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetNegativeSitesByCampaignIdsResponse response = sendRequest(request, "/NegativeSites/QueryByCampaignIds", HttpPost, GetNegativeSitesByCampaignIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getNegativeSitesByCampaignIds(request); + } + + return response; + } + + public Response getNegativeSitesByCampaignIdsAsync(GetNegativeSitesByCampaignIdsRequest request) { + return sendRequestAsync(request, "/NegativeSites/QueryByCampaignIds", HttpPost, GetNegativeSitesByCampaignIdsResponse.class, (r, h) -> fallbackService.get().getNegativeSitesByCampaignIdsAsync(r, h), null); + } + + public Future getNegativeSitesByCampaignIdsAsync(GetNegativeSitesByCampaignIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/NegativeSites/QueryByCampaignIds", HttpPost, GetNegativeSitesByCampaignIdsResponse.class, (r, h) -> fallbackService.get().getNegativeSitesByCampaignIdsAsync(r, h), asyncHandler); + } + + + public SetNegativeSitesToCampaignsResponse setNegativeSitesToCampaigns(SetNegativeSitesToCampaignsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + SetNegativeSitesToCampaignsResponse response = sendRequest(request, "/NegativeSites/SetToCampaigns", HttpPost, SetNegativeSitesToCampaignsResponse.class); + + if (response == null) { + response = fallbackService.get().setNegativeSitesToCampaigns(request); + } + + return response; + } + + public Response setNegativeSitesToCampaignsAsync(SetNegativeSitesToCampaignsRequest request) { + return sendRequestAsync(request, "/NegativeSites/SetToCampaigns", HttpPost, SetNegativeSitesToCampaignsResponse.class, (r, h) -> fallbackService.get().setNegativeSitesToCampaignsAsync(r, h), null); + } + + public Future setNegativeSitesToCampaignsAsync(SetNegativeSitesToCampaignsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/NegativeSites/SetToCampaigns", HttpPost, SetNegativeSitesToCampaignsResponse.class, (r, h) -> fallbackService.get().setNegativeSitesToCampaignsAsync(r, h), asyncHandler); + } + + + public GetConfigValueResponse getConfigValue(GetConfigValueRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetConfigValueResponse response = sendRequest(request, "/ConfigValue/Query", HttpPost, GetConfigValueResponse.class); + + if (response == null) { + response = fallbackService.get().getConfigValue(request); + } + + return response; + } + + public Response getConfigValueAsync(GetConfigValueRequest request) { + return sendRequestAsync(request, "/ConfigValue/Query", HttpPost, GetConfigValueResponse.class, (r, h) -> fallbackService.get().getConfigValueAsync(r, h), null); + } + + public Future getConfigValueAsync(GetConfigValueRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ConfigValue/Query", HttpPost, GetConfigValueResponse.class, (r, h) -> fallbackService.get().getConfigValueAsync(r, h), asyncHandler); + } + + + public GetBSCCountriesResponse getBSCCountries(GetBSCCountriesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetBSCCountriesResponse response = sendRequest(request, "/BSCCountries/Query", HttpPost, GetBSCCountriesResponse.class); + + if (response == null) { + response = fallbackService.get().getBSCCountries(request); + } + + return response; + } + + public Response getBSCCountriesAsync(GetBSCCountriesRequest request) { + return sendRequestAsync(request, "/BSCCountries/Query", HttpPost, GetBSCCountriesResponse.class, (r, h) -> fallbackService.get().getBSCCountriesAsync(r, h), null); + } + + public Future getBSCCountriesAsync(GetBSCCountriesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/BSCCountries/Query", HttpPost, GetBSCCountriesResponse.class, (r, h) -> fallbackService.get().getBSCCountriesAsync(r, h), asyncHandler); + } + + + public AddAdGroupsResponse addAdGroups(AddAdGroupsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddAdGroupsResponse response = sendRequest(request, "/AdGroups", HttpPost, AddAdGroupsResponse.class); + + if (response == null) { + response = fallbackService.get().addAdGroups(request); + } + + return response; + } + + public Response addAdGroupsAsync(AddAdGroupsRequest request) { + return sendRequestAsync(request, "/AdGroups", HttpPost, AddAdGroupsResponse.class, (r, h) -> fallbackService.get().addAdGroupsAsync(r, h), null); + } + + public Future addAdGroupsAsync(AddAdGroupsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdGroups", HttpPost, AddAdGroupsResponse.class, (r, h) -> fallbackService.get().addAdGroupsAsync(r, h), asyncHandler); + } + + + public DeleteAdGroupsResponse deleteAdGroups(DeleteAdGroupsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteAdGroupsResponse response = sendRequest(request, "/AdGroups", HttpDelete, DeleteAdGroupsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteAdGroups(request); + } + + return response; + } + + public Response deleteAdGroupsAsync(DeleteAdGroupsRequest request) { + return sendRequestAsync(request, "/AdGroups", HttpDelete, DeleteAdGroupsResponse.class, (r, h) -> fallbackService.get().deleteAdGroupsAsync(r, h), null); + } + + public Future deleteAdGroupsAsync(DeleteAdGroupsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdGroups", HttpDelete, DeleteAdGroupsResponse.class, (r, h) -> fallbackService.get().deleteAdGroupsAsync(r, h), asyncHandler); + } + + + public GetAdGroupsByIdsResponse getAdGroupsByIds(GetAdGroupsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAdGroupsByIdsResponse response = sendRequest(request, "/AdGroups/QueryByIds", HttpPost, GetAdGroupsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getAdGroupsByIds(request); + } + + return response; + } + + public Response getAdGroupsByIdsAsync(GetAdGroupsByIdsRequest request) { + return sendRequestAsync(request, "/AdGroups/QueryByIds", HttpPost, GetAdGroupsByIdsResponse.class, (r, h) -> fallbackService.get().getAdGroupsByIdsAsync(r, h), null); + } + + public Future getAdGroupsByIdsAsync(GetAdGroupsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdGroups/QueryByIds", HttpPost, GetAdGroupsByIdsResponse.class, (r, h) -> fallbackService.get().getAdGroupsByIdsAsync(r, h), asyncHandler); + } + + + public GetAdGroupsByCampaignIdResponse getAdGroupsByCampaignId(GetAdGroupsByCampaignIdRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAdGroupsByCampaignIdResponse response = sendRequest(request, "/AdGroups/QueryByCampaignId", HttpPost, GetAdGroupsByCampaignIdResponse.class); + + if (response == null) { + response = fallbackService.get().getAdGroupsByCampaignId(request); + } + + return response; + } + + public Response getAdGroupsByCampaignIdAsync(GetAdGroupsByCampaignIdRequest request) { + return sendRequestAsync(request, "/AdGroups/QueryByCampaignId", HttpPost, GetAdGroupsByCampaignIdResponse.class, (r, h) -> fallbackService.get().getAdGroupsByCampaignIdAsync(r, h), null); + } + + public Future getAdGroupsByCampaignIdAsync(GetAdGroupsByCampaignIdRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdGroups/QueryByCampaignId", HttpPost, GetAdGroupsByCampaignIdResponse.class, (r, h) -> fallbackService.get().getAdGroupsByCampaignIdAsync(r, h), asyncHandler); + } + + + public UpdateAdGroupsResponse updateAdGroups(UpdateAdGroupsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateAdGroupsResponse response = sendRequest(request, "/AdGroups", HttpPut, UpdateAdGroupsResponse.class); + + if (response == null) { + response = fallbackService.get().updateAdGroups(request); + } + + return response; + } + + public Response updateAdGroupsAsync(UpdateAdGroupsRequest request) { + return sendRequestAsync(request, "/AdGroups", HttpPut, UpdateAdGroupsResponse.class, (r, h) -> fallbackService.get().updateAdGroupsAsync(r, h), null); + } + + public Future updateAdGroupsAsync(UpdateAdGroupsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdGroups", HttpPut, UpdateAdGroupsResponse.class, (r, h) -> fallbackService.get().updateAdGroupsAsync(r, h), asyncHandler); + } + + + public GetNegativeSitesByAdGroupIdsResponse getNegativeSitesByAdGroupIds(GetNegativeSitesByAdGroupIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetNegativeSitesByAdGroupIdsResponse response = sendRequest(request, "/NegativeSites/QueryByAdGroupIds", HttpPost, GetNegativeSitesByAdGroupIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getNegativeSitesByAdGroupIds(request); + } + + return response; + } + + public Response getNegativeSitesByAdGroupIdsAsync(GetNegativeSitesByAdGroupIdsRequest request) { + return sendRequestAsync(request, "/NegativeSites/QueryByAdGroupIds", HttpPost, GetNegativeSitesByAdGroupIdsResponse.class, (r, h) -> fallbackService.get().getNegativeSitesByAdGroupIdsAsync(r, h), null); + } + + public Future getNegativeSitesByAdGroupIdsAsync(GetNegativeSitesByAdGroupIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/NegativeSites/QueryByAdGroupIds", HttpPost, GetNegativeSitesByAdGroupIdsResponse.class, (r, h) -> fallbackService.get().getNegativeSitesByAdGroupIdsAsync(r, h), asyncHandler); + } + + + public SetNegativeSitesToAdGroupsResponse setNegativeSitesToAdGroups(SetNegativeSitesToAdGroupsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + SetNegativeSitesToAdGroupsResponse response = sendRequest(request, "/NegativeSites/SetToAdGroups", HttpPost, SetNegativeSitesToAdGroupsResponse.class); + + if (response == null) { + response = fallbackService.get().setNegativeSitesToAdGroups(request); + } + + return response; + } + + public Response setNegativeSitesToAdGroupsAsync(SetNegativeSitesToAdGroupsRequest request) { + return sendRequestAsync(request, "/NegativeSites/SetToAdGroups", HttpPost, SetNegativeSitesToAdGroupsResponse.class, (r, h) -> fallbackService.get().setNegativeSitesToAdGroupsAsync(r, h), null); + } + + public Future setNegativeSitesToAdGroupsAsync(SetNegativeSitesToAdGroupsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/NegativeSites/SetToAdGroups", HttpPost, SetNegativeSitesToAdGroupsResponse.class, (r, h) -> fallbackService.get().setNegativeSitesToAdGroupsAsync(r, h), asyncHandler); + } + + + public GetGeoLocationsFileUrlResponse getGeoLocationsFileUrl(GetGeoLocationsFileUrlRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetGeoLocationsFileUrlResponse response = sendRequest(request, "/GeoLocationsFileUrl/Query", HttpPost, GetGeoLocationsFileUrlResponse.class); + + if (response == null) { + response = fallbackService.get().getGeoLocationsFileUrl(request); + } + + return response; + } + + public Response getGeoLocationsFileUrlAsync(GetGeoLocationsFileUrlRequest request) { + return sendRequestAsync(request, "/GeoLocationsFileUrl/Query", HttpPost, GetGeoLocationsFileUrlResponse.class, (r, h) -> fallbackService.get().getGeoLocationsFileUrlAsync(r, h), null); + } + + public Future getGeoLocationsFileUrlAsync(GetGeoLocationsFileUrlRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/GeoLocationsFileUrl/Query", HttpPost, GetGeoLocationsFileUrlResponse.class, (r, h) -> fallbackService.get().getGeoLocationsFileUrlAsync(r, h), asyncHandler); + } + + + public AddAdsResponse addAds(AddAdsRequest request) + throws AdApiFaultDetail_Exception, EditorialApiFaultDetail_Exception { + AddAdsResponse response = sendRequestEditorialFault(request, "/Ads", HttpPost, AddAdsResponse.class); + + if (response == null) { + response = fallbackService.get().addAds(request); + } + + return response; + } + + public Response addAdsAsync(AddAdsRequest request) { + return sendRequestAsync(request, "/Ads", HttpPost, AddAdsResponse.class, (r, h) -> fallbackService.get().addAdsAsync(r, h), null); + } + + public Future addAdsAsync(AddAdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Ads", HttpPost, AddAdsResponse.class, (r, h) -> fallbackService.get().addAdsAsync(r, h), asyncHandler); + } + + + public DeleteAdsResponse deleteAds(DeleteAdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteAdsResponse response = sendRequest(request, "/Ads", HttpDelete, DeleteAdsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteAds(request); + } + + return response; + } + + public Response deleteAdsAsync(DeleteAdsRequest request) { + return sendRequestAsync(request, "/Ads", HttpDelete, DeleteAdsResponse.class, (r, h) -> fallbackService.get().deleteAdsAsync(r, h), null); + } + + public Future deleteAdsAsync(DeleteAdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Ads", HttpDelete, DeleteAdsResponse.class, (r, h) -> fallbackService.get().deleteAdsAsync(r, h), asyncHandler); + } + + + public GetAdsByEditorialStatusResponse getAdsByEditorialStatus(GetAdsByEditorialStatusRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAdsByEditorialStatusResponse response = sendRequest(request, "/Ads/QueryByEditorialStatus", HttpPost, GetAdsByEditorialStatusResponse.class); + + if (response == null) { + response = fallbackService.get().getAdsByEditorialStatus(request); + } + + return response; + } + + public Response getAdsByEditorialStatusAsync(GetAdsByEditorialStatusRequest request) { + return sendRequestAsync(request, "/Ads/QueryByEditorialStatus", HttpPost, GetAdsByEditorialStatusResponse.class, (r, h) -> fallbackService.get().getAdsByEditorialStatusAsync(r, h), null); + } + + public Future getAdsByEditorialStatusAsync(GetAdsByEditorialStatusRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Ads/QueryByEditorialStatus", HttpPost, GetAdsByEditorialStatusResponse.class, (r, h) -> fallbackService.get().getAdsByEditorialStatusAsync(r, h), asyncHandler); + } + + + public GetAdsByIdsResponse getAdsByIds(GetAdsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAdsByIdsResponse response = sendRequest(request, "/Ads/QueryByIds", HttpPost, GetAdsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getAdsByIds(request); + } + + return response; + } + + public Response getAdsByIdsAsync(GetAdsByIdsRequest request) { + return sendRequestAsync(request, "/Ads/QueryByIds", HttpPost, GetAdsByIdsResponse.class, (r, h) -> fallbackService.get().getAdsByIdsAsync(r, h), null); + } + + public Future getAdsByIdsAsync(GetAdsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Ads/QueryByIds", HttpPost, GetAdsByIdsResponse.class, (r, h) -> fallbackService.get().getAdsByIdsAsync(r, h), asyncHandler); + } + + + public GetAdsByAdGroupIdResponse getAdsByAdGroupId(GetAdsByAdGroupIdRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAdsByAdGroupIdResponse response = sendRequest(request, "/Ads/QueryByAdGroupId", HttpPost, GetAdsByAdGroupIdResponse.class); + + if (response == null) { + response = fallbackService.get().getAdsByAdGroupId(request); + } + + return response; + } + + public Response getAdsByAdGroupIdAsync(GetAdsByAdGroupIdRequest request) { + return sendRequestAsync(request, "/Ads/QueryByAdGroupId", HttpPost, GetAdsByAdGroupIdResponse.class, (r, h) -> fallbackService.get().getAdsByAdGroupIdAsync(r, h), null); + } + + public Future getAdsByAdGroupIdAsync(GetAdsByAdGroupIdRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Ads/QueryByAdGroupId", HttpPost, GetAdsByAdGroupIdResponse.class, (r, h) -> fallbackService.get().getAdsByAdGroupIdAsync(r, h), asyncHandler); + } + + + public UpdateAdsResponse updateAds(UpdateAdsRequest request) + throws AdApiFaultDetail_Exception, EditorialApiFaultDetail_Exception { + UpdateAdsResponse response = sendRequestEditorialFault(request, "/Ads", HttpPut, UpdateAdsResponse.class); + + if (response == null) { + response = fallbackService.get().updateAds(request); + } + + return response; + } + + public Response updateAdsAsync(UpdateAdsRequest request) { + return sendRequestAsync(request, "/Ads", HttpPut, UpdateAdsResponse.class, (r, h) -> fallbackService.get().updateAdsAsync(r, h), null); + } + + public Future updateAdsAsync(UpdateAdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Ads", HttpPut, UpdateAdsResponse.class, (r, h) -> fallbackService.get().updateAdsAsync(r, h), asyncHandler); + } + + + public AddKeywordsResponse addKeywords(AddKeywordsRequest request) + throws AdApiFaultDetail_Exception, EditorialApiFaultDetail_Exception { + AddKeywordsResponse response = sendRequestEditorialFault(request, "/Keywords", HttpPost, AddKeywordsResponse.class); + + if (response == null) { + response = fallbackService.get().addKeywords(request); + } + + return response; + } + + public Response addKeywordsAsync(AddKeywordsRequest request) { + return sendRequestAsync(request, "/Keywords", HttpPost, AddKeywordsResponse.class, (r, h) -> fallbackService.get().addKeywordsAsync(r, h), null); + } + + public Future addKeywordsAsync(AddKeywordsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Keywords", HttpPost, AddKeywordsResponse.class, (r, h) -> fallbackService.get().addKeywordsAsync(r, h), asyncHandler); + } + + + public DeleteKeywordsResponse deleteKeywords(DeleteKeywordsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteKeywordsResponse response = sendRequest(request, "/Keywords", HttpDelete, DeleteKeywordsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteKeywords(request); + } + + return response; + } + + public Response deleteKeywordsAsync(DeleteKeywordsRequest request) { + return sendRequestAsync(request, "/Keywords", HttpDelete, DeleteKeywordsResponse.class, (r, h) -> fallbackService.get().deleteKeywordsAsync(r, h), null); + } + + public Future deleteKeywordsAsync(DeleteKeywordsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Keywords", HttpDelete, DeleteKeywordsResponse.class, (r, h) -> fallbackService.get().deleteKeywordsAsync(r, h), asyncHandler); + } + + + public GetKeywordsByEditorialStatusResponse getKeywordsByEditorialStatus(GetKeywordsByEditorialStatusRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetKeywordsByEditorialStatusResponse response = sendRequest(request, "/Keywords/QueryByEditorialStatus", HttpPost, GetKeywordsByEditorialStatusResponse.class); + + if (response == null) { + response = fallbackService.get().getKeywordsByEditorialStatus(request); + } + + return response; + } + + public Response getKeywordsByEditorialStatusAsync(GetKeywordsByEditorialStatusRequest request) { + return sendRequestAsync(request, "/Keywords/QueryByEditorialStatus", HttpPost, GetKeywordsByEditorialStatusResponse.class, (r, h) -> fallbackService.get().getKeywordsByEditorialStatusAsync(r, h), null); + } + + public Future getKeywordsByEditorialStatusAsync(GetKeywordsByEditorialStatusRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Keywords/QueryByEditorialStatus", HttpPost, GetKeywordsByEditorialStatusResponse.class, (r, h) -> fallbackService.get().getKeywordsByEditorialStatusAsync(r, h), asyncHandler); + } + + + public GetKeywordsByIdsResponse getKeywordsByIds(GetKeywordsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetKeywordsByIdsResponse response = sendRequest(request, "/Keywords/QueryByIds", HttpPost, GetKeywordsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getKeywordsByIds(request); + } + + return response; + } + + public Response getKeywordsByIdsAsync(GetKeywordsByIdsRequest request) { + return sendRequestAsync(request, "/Keywords/QueryByIds", HttpPost, GetKeywordsByIdsResponse.class, (r, h) -> fallbackService.get().getKeywordsByIdsAsync(r, h), null); + } + + public Future getKeywordsByIdsAsync(GetKeywordsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Keywords/QueryByIds", HttpPost, GetKeywordsByIdsResponse.class, (r, h) -> fallbackService.get().getKeywordsByIdsAsync(r, h), asyncHandler); + } + + + public GetKeywordsByAdGroupIdResponse getKeywordsByAdGroupId(GetKeywordsByAdGroupIdRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetKeywordsByAdGroupIdResponse response = sendRequest(request, "/Keywords/QueryByAdGroupId", HttpPost, GetKeywordsByAdGroupIdResponse.class); + + if (response == null) { + response = fallbackService.get().getKeywordsByAdGroupId(request); + } + + return response; + } + + public Response getKeywordsByAdGroupIdAsync(GetKeywordsByAdGroupIdRequest request) { + return sendRequestAsync(request, "/Keywords/QueryByAdGroupId", HttpPost, GetKeywordsByAdGroupIdResponse.class, (r, h) -> fallbackService.get().getKeywordsByAdGroupIdAsync(r, h), null); + } + + public Future getKeywordsByAdGroupIdAsync(GetKeywordsByAdGroupIdRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Keywords/QueryByAdGroupId", HttpPost, GetKeywordsByAdGroupIdResponse.class, (r, h) -> fallbackService.get().getKeywordsByAdGroupIdAsync(r, h), asyncHandler); + } + + + public UpdateKeywordsResponse updateKeywords(UpdateKeywordsRequest request) + throws AdApiFaultDetail_Exception, EditorialApiFaultDetail_Exception { + UpdateKeywordsResponse response = sendRequestEditorialFault(request, "/Keywords", HttpPut, UpdateKeywordsResponse.class); + + if (response == null) { + response = fallbackService.get().updateKeywords(request); + } + + return response; + } + + public Response updateKeywordsAsync(UpdateKeywordsRequest request) { + return sendRequestAsync(request, "/Keywords", HttpPut, UpdateKeywordsResponse.class, (r, h) -> fallbackService.get().updateKeywordsAsync(r, h), null); + } + + public Future updateKeywordsAsync(UpdateKeywordsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Keywords", HttpPut, UpdateKeywordsResponse.class, (r, h) -> fallbackService.get().updateKeywordsAsync(r, h), asyncHandler); + } + + + public AppealEditorialRejectionsResponse appealEditorialRejections(AppealEditorialRejectionsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AppealEditorialRejectionsResponse response = sendRequest(request, "/EditorialRejections/Appeal", HttpPost, AppealEditorialRejectionsResponse.class); + + if (response == null) { + response = fallbackService.get().appealEditorialRejections(request); + } + + return response; + } + + public Response appealEditorialRejectionsAsync(AppealEditorialRejectionsRequest request) { + return sendRequestAsync(request, "/EditorialRejections/Appeal", HttpPost, AppealEditorialRejectionsResponse.class, (r, h) -> fallbackService.get().appealEditorialRejectionsAsync(r, h), null); + } + + public Future appealEditorialRejectionsAsync(AppealEditorialRejectionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/EditorialRejections/Appeal", HttpPost, AppealEditorialRejectionsResponse.class, (r, h) -> fallbackService.get().appealEditorialRejectionsAsync(r, h), asyncHandler); + } + + + public GetEditorialReasonsByIdsResponse getEditorialReasonsByIds(GetEditorialReasonsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetEditorialReasonsByIdsResponse response = sendRequest(request, "/EditorialReasons/QueryByIds", HttpPost, GetEditorialReasonsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getEditorialReasonsByIds(request); + } + + return response; + } + + public Response getEditorialReasonsByIdsAsync(GetEditorialReasonsByIdsRequest request) { + return sendRequestAsync(request, "/EditorialReasons/QueryByIds", HttpPost, GetEditorialReasonsByIdsResponse.class, (r, h) -> fallbackService.get().getEditorialReasonsByIdsAsync(r, h), null); + } + + public Future getEditorialReasonsByIdsAsync(GetEditorialReasonsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/EditorialReasons/QueryByIds", HttpPost, GetEditorialReasonsByIdsResponse.class, (r, h) -> fallbackService.get().getEditorialReasonsByIdsAsync(r, h), asyncHandler); + } + + + public GetAccountMigrationStatusesResponse getAccountMigrationStatuses(GetAccountMigrationStatusesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAccountMigrationStatusesResponse response = sendRequest(request, "/AccountMigrationStatuses/Query", HttpPost, GetAccountMigrationStatusesResponse.class); + + if (response == null) { + response = fallbackService.get().getAccountMigrationStatuses(request); + } + + return response; + } + + public Response getAccountMigrationStatusesAsync(GetAccountMigrationStatusesRequest request) { + return sendRequestAsync(request, "/AccountMigrationStatuses/Query", HttpPost, GetAccountMigrationStatusesResponse.class, (r, h) -> fallbackService.get().getAccountMigrationStatusesAsync(r, h), null); + } + + public Future getAccountMigrationStatusesAsync(GetAccountMigrationStatusesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AccountMigrationStatuses/Query", HttpPost, GetAccountMigrationStatusesResponse.class, (r, h) -> fallbackService.get().getAccountMigrationStatusesAsync(r, h), asyncHandler); + } + + + public SetAccountPropertiesResponse setAccountProperties(SetAccountPropertiesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + SetAccountPropertiesResponse response = sendRequest(request, "/AccountProperties/Set", HttpPost, SetAccountPropertiesResponse.class); + + if (response == null) { + response = fallbackService.get().setAccountProperties(request); + } + + return response; + } + + public Response setAccountPropertiesAsync(SetAccountPropertiesRequest request) { + return sendRequestAsync(request, "/AccountProperties/Set", HttpPost, SetAccountPropertiesResponse.class, (r, h) -> fallbackService.get().setAccountPropertiesAsync(r, h), null); + } + + public Future setAccountPropertiesAsync(SetAccountPropertiesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AccountProperties/Set", HttpPost, SetAccountPropertiesResponse.class, (r, h) -> fallbackService.get().setAccountPropertiesAsync(r, h), asyncHandler); + } + + + public GetAccountPropertiesResponse getAccountProperties(GetAccountPropertiesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAccountPropertiesResponse response = sendRequest(request, "/AccountProperties/Query", HttpPost, GetAccountPropertiesResponse.class); + + if (response == null) { + response = fallbackService.get().getAccountProperties(request); + } + + return response; + } + + public Response getAccountPropertiesAsync(GetAccountPropertiesRequest request) { + return sendRequestAsync(request, "/AccountProperties/Query", HttpPost, GetAccountPropertiesResponse.class, (r, h) -> fallbackService.get().getAccountPropertiesAsync(r, h), null); + } + + public Future getAccountPropertiesAsync(GetAccountPropertiesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AccountProperties/Query", HttpPost, GetAccountPropertiesResponse.class, (r, h) -> fallbackService.get().getAccountPropertiesAsync(r, h), asyncHandler); + } + + + public AddAdExtensionsResponse addAdExtensions(AddAdExtensionsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddAdExtensionsResponse response = sendRequest(request, "/AdExtensions", HttpPost, AddAdExtensionsResponse.class); + + if (response == null) { + response = fallbackService.get().addAdExtensions(request); + } + + return response; + } + + public Response addAdExtensionsAsync(AddAdExtensionsRequest request) { + return sendRequestAsync(request, "/AdExtensions", HttpPost, AddAdExtensionsResponse.class, (r, h) -> fallbackService.get().addAdExtensionsAsync(r, h), null); + } + + public Future addAdExtensionsAsync(AddAdExtensionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdExtensions", HttpPost, AddAdExtensionsResponse.class, (r, h) -> fallbackService.get().addAdExtensionsAsync(r, h), asyncHandler); + } + + + public GetAdExtensionsByIdsResponse getAdExtensionsByIds(GetAdExtensionsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAdExtensionsByIdsResponse response = sendRequest(request, "/AdExtensions/QueryByIds", HttpPost, GetAdExtensionsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getAdExtensionsByIds(request); + } + + return response; + } + + public Response getAdExtensionsByIdsAsync(GetAdExtensionsByIdsRequest request) { + return sendRequestAsync(request, "/AdExtensions/QueryByIds", HttpPost, GetAdExtensionsByIdsResponse.class, (r, h) -> fallbackService.get().getAdExtensionsByIdsAsync(r, h), null); + } + + public Future getAdExtensionsByIdsAsync(GetAdExtensionsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdExtensions/QueryByIds", HttpPost, GetAdExtensionsByIdsResponse.class, (r, h) -> fallbackService.get().getAdExtensionsByIdsAsync(r, h), asyncHandler); + } + + + public UpdateAdExtensionsResponse updateAdExtensions(UpdateAdExtensionsRequest request) + throws AdApiFaultDetail_Exception, EditorialApiFaultDetail_Exception { + UpdateAdExtensionsResponse response = sendRequestEditorialFault(request, "/AdExtensions", HttpPut, UpdateAdExtensionsResponse.class); + + if (response == null) { + response = fallbackService.get().updateAdExtensions(request); + } + + return response; + } + + public Response updateAdExtensionsAsync(UpdateAdExtensionsRequest request) { + return sendRequestAsync(request, "/AdExtensions", HttpPut, UpdateAdExtensionsResponse.class, (r, h) -> fallbackService.get().updateAdExtensionsAsync(r, h), null); + } + + public Future updateAdExtensionsAsync(UpdateAdExtensionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdExtensions", HttpPut, UpdateAdExtensionsResponse.class, (r, h) -> fallbackService.get().updateAdExtensionsAsync(r, h), asyncHandler); + } + + + public DeleteAdExtensionsResponse deleteAdExtensions(DeleteAdExtensionsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteAdExtensionsResponse response = sendRequest(request, "/AdExtensions", HttpDelete, DeleteAdExtensionsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteAdExtensions(request); + } + + return response; + } + + public Response deleteAdExtensionsAsync(DeleteAdExtensionsRequest request) { + return sendRequestAsync(request, "/AdExtensions", HttpDelete, DeleteAdExtensionsResponse.class, (r, h) -> fallbackService.get().deleteAdExtensionsAsync(r, h), null); + } + + public Future deleteAdExtensionsAsync(DeleteAdExtensionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdExtensions", HttpDelete, DeleteAdExtensionsResponse.class, (r, h) -> fallbackService.get().deleteAdExtensionsAsync(r, h), asyncHandler); + } + + + public GetAdExtensionsEditorialReasonsResponse getAdExtensionsEditorialReasons(GetAdExtensionsEditorialReasonsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAdExtensionsEditorialReasonsResponse response = sendRequest(request, "/AdExtensionsEditorialReasons/Query", HttpPost, GetAdExtensionsEditorialReasonsResponse.class); + + if (response == null) { + response = fallbackService.get().getAdExtensionsEditorialReasons(request); + } + + return response; + } + + public Response getAdExtensionsEditorialReasonsAsync(GetAdExtensionsEditorialReasonsRequest request) { + return sendRequestAsync(request, "/AdExtensionsEditorialReasons/Query", HttpPost, GetAdExtensionsEditorialReasonsResponse.class, (r, h) -> fallbackService.get().getAdExtensionsEditorialReasonsAsync(r, h), null); + } + + public Future getAdExtensionsEditorialReasonsAsync(GetAdExtensionsEditorialReasonsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdExtensionsEditorialReasons/Query", HttpPost, GetAdExtensionsEditorialReasonsResponse.class, (r, h) -> fallbackService.get().getAdExtensionsEditorialReasonsAsync(r, h), asyncHandler); + } + + + public SetAdExtensionsAssociationsResponse setAdExtensionsAssociations(SetAdExtensionsAssociationsRequest request) + throws AdApiFaultDetail_Exception, EditorialApiFaultDetail_Exception { + SetAdExtensionsAssociationsResponse response = sendRequestEditorialFault(request, "/AdExtensionsAssociations/Set", HttpPost, SetAdExtensionsAssociationsResponse.class); + + if (response == null) { + response = fallbackService.get().setAdExtensionsAssociations(request); + } + + return response; + } + + public Response setAdExtensionsAssociationsAsync(SetAdExtensionsAssociationsRequest request) { + return sendRequestAsync(request, "/AdExtensionsAssociations/Set", HttpPost, SetAdExtensionsAssociationsResponse.class, (r, h) -> fallbackService.get().setAdExtensionsAssociationsAsync(r, h), null); + } + + public Future setAdExtensionsAssociationsAsync(SetAdExtensionsAssociationsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdExtensionsAssociations/Set", HttpPost, SetAdExtensionsAssociationsResponse.class, (r, h) -> fallbackService.get().setAdExtensionsAssociationsAsync(r, h), asyncHandler); + } + + + public GetAdExtensionsAssociationsResponse getAdExtensionsAssociations(GetAdExtensionsAssociationsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAdExtensionsAssociationsResponse response = sendRequest(request, "/AdExtensionsAssociations/Query", HttpPost, GetAdExtensionsAssociationsResponse.class); + + if (response == null) { + response = fallbackService.get().getAdExtensionsAssociations(request); + } + + return response; + } + + public Response getAdExtensionsAssociationsAsync(GetAdExtensionsAssociationsRequest request) { + return sendRequestAsync(request, "/AdExtensionsAssociations/Query", HttpPost, GetAdExtensionsAssociationsResponse.class, (r, h) -> fallbackService.get().getAdExtensionsAssociationsAsync(r, h), null); + } + + public Future getAdExtensionsAssociationsAsync(GetAdExtensionsAssociationsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdExtensionsAssociations/Query", HttpPost, GetAdExtensionsAssociationsResponse.class, (r, h) -> fallbackService.get().getAdExtensionsAssociationsAsync(r, h), asyncHandler); + } + + + public DeleteAdExtensionsAssociationsResponse deleteAdExtensionsAssociations(DeleteAdExtensionsAssociationsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteAdExtensionsAssociationsResponse response = sendRequest(request, "/AdExtensionsAssociations", HttpDelete, DeleteAdExtensionsAssociationsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteAdExtensionsAssociations(request); + } + + return response; + } + + public Response deleteAdExtensionsAssociationsAsync(DeleteAdExtensionsAssociationsRequest request) { + return sendRequestAsync(request, "/AdExtensionsAssociations", HttpDelete, DeleteAdExtensionsAssociationsResponse.class, (r, h) -> fallbackService.get().deleteAdExtensionsAssociationsAsync(r, h), null); + } + + public Future deleteAdExtensionsAssociationsAsync(DeleteAdExtensionsAssociationsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdExtensionsAssociations", HttpDelete, DeleteAdExtensionsAssociationsResponse.class, (r, h) -> fallbackService.get().deleteAdExtensionsAssociationsAsync(r, h), asyncHandler); + } + + + public GetAdExtensionIdsByAccountIdResponse getAdExtensionIdsByAccountId(GetAdExtensionIdsByAccountIdRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAdExtensionIdsByAccountIdResponse response = sendRequest(request, "/AdExtensionIds/QueryByAccountId", HttpPost, GetAdExtensionIdsByAccountIdResponse.class); + + if (response == null) { + response = fallbackService.get().getAdExtensionIdsByAccountId(request); + } + + return response; + } + + public Response getAdExtensionIdsByAccountIdAsync(GetAdExtensionIdsByAccountIdRequest request) { + return sendRequestAsync(request, "/AdExtensionIds/QueryByAccountId", HttpPost, GetAdExtensionIdsByAccountIdResponse.class, (r, h) -> fallbackService.get().getAdExtensionIdsByAccountIdAsync(r, h), null); + } + + public Future getAdExtensionIdsByAccountIdAsync(GetAdExtensionIdsByAccountIdRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdExtensionIds/QueryByAccountId", HttpPost, GetAdExtensionIdsByAccountIdResponse.class, (r, h) -> fallbackService.get().getAdExtensionIdsByAccountIdAsync(r, h), asyncHandler); + } + + + public AddMediaResponse addMedia(AddMediaRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddMediaResponse response = sendRequest(request, "/Media", HttpPost, AddMediaResponse.class); + + if (response == null) { + response = fallbackService.get().addMedia(request); + } + + return response; + } + + public Response addMediaAsync(AddMediaRequest request) { + return sendRequestAsync(request, "/Media", HttpPost, AddMediaResponse.class, (r, h) -> fallbackService.get().addMediaAsync(r, h), null); + } + + public Future addMediaAsync(AddMediaRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Media", HttpPost, AddMediaResponse.class, (r, h) -> fallbackService.get().addMediaAsync(r, h), asyncHandler); + } + + + public DeleteMediaResponse deleteMedia(DeleteMediaRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteMediaResponse response = sendRequest(request, "/Media", HttpDelete, DeleteMediaResponse.class); + + if (response == null) { + response = fallbackService.get().deleteMedia(request); + } + + return response; + } + + public Response deleteMediaAsync(DeleteMediaRequest request) { + return sendRequestAsync(request, "/Media", HttpDelete, DeleteMediaResponse.class, (r, h) -> fallbackService.get().deleteMediaAsync(r, h), null); + } + + public Future deleteMediaAsync(DeleteMediaRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Media", HttpDelete, DeleteMediaResponse.class, (r, h) -> fallbackService.get().deleteMediaAsync(r, h), asyncHandler); + } + + + public GetMediaMetaDataByAccountIdResponse getMediaMetaDataByAccountId(GetMediaMetaDataByAccountIdRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetMediaMetaDataByAccountIdResponse response = sendRequest(request, "/MediaMetaData/QueryByAccountId", HttpPost, GetMediaMetaDataByAccountIdResponse.class); + + if (response == null) { + response = fallbackService.get().getMediaMetaDataByAccountId(request); + } + + return response; + } + + public Response getMediaMetaDataByAccountIdAsync(GetMediaMetaDataByAccountIdRequest request) { + return sendRequestAsync(request, "/MediaMetaData/QueryByAccountId", HttpPost, GetMediaMetaDataByAccountIdResponse.class, (r, h) -> fallbackService.get().getMediaMetaDataByAccountIdAsync(r, h), null); + } + + public Future getMediaMetaDataByAccountIdAsync(GetMediaMetaDataByAccountIdRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/MediaMetaData/QueryByAccountId", HttpPost, GetMediaMetaDataByAccountIdResponse.class, (r, h) -> fallbackService.get().getMediaMetaDataByAccountIdAsync(r, h), asyncHandler); + } + + + public GetMediaMetaDataByIdsResponse getMediaMetaDataByIds(GetMediaMetaDataByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetMediaMetaDataByIdsResponse response = sendRequest(request, "/MediaMetaData/QueryByIds", HttpPost, GetMediaMetaDataByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getMediaMetaDataByIds(request); + } + + return response; + } + + public Response getMediaMetaDataByIdsAsync(GetMediaMetaDataByIdsRequest request) { + return sendRequestAsync(request, "/MediaMetaData/QueryByIds", HttpPost, GetMediaMetaDataByIdsResponse.class, (r, h) -> fallbackService.get().getMediaMetaDataByIdsAsync(r, h), null); + } + + public Future getMediaMetaDataByIdsAsync(GetMediaMetaDataByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/MediaMetaData/QueryByIds", HttpPost, GetMediaMetaDataByIdsResponse.class, (r, h) -> fallbackService.get().getMediaMetaDataByIdsAsync(r, h), asyncHandler); + } + + + public GetMediaAssociationsResponse getMediaAssociations(GetMediaAssociationsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetMediaAssociationsResponse response = sendRequest(request, "/MediaAssociations/Query", HttpPost, GetMediaAssociationsResponse.class); + + if (response == null) { + response = fallbackService.get().getMediaAssociations(request); + } + + return response; + } + + public Response getMediaAssociationsAsync(GetMediaAssociationsRequest request) { + return sendRequestAsync(request, "/MediaAssociations/Query", HttpPost, GetMediaAssociationsResponse.class, (r, h) -> fallbackService.get().getMediaAssociationsAsync(r, h), null); + } + + public Future getMediaAssociationsAsync(GetMediaAssociationsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/MediaAssociations/Query", HttpPost, GetMediaAssociationsResponse.class, (r, h) -> fallbackService.get().getMediaAssociationsAsync(r, h), asyncHandler); + } + + + public GetAdGroupCriterionsByIdsResponse getAdGroupCriterionsByIds(GetAdGroupCriterionsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAdGroupCriterionsByIdsResponse response = sendRequest(request, "/AdGroupCriterions/QueryByIds", HttpPost, GetAdGroupCriterionsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getAdGroupCriterionsByIds(request); + } + + return response; + } + + public Response getAdGroupCriterionsByIdsAsync(GetAdGroupCriterionsByIdsRequest request) { + return sendRequestAsync(request, "/AdGroupCriterions/QueryByIds", HttpPost, GetAdGroupCriterionsByIdsResponse.class, (r, h) -> fallbackService.get().getAdGroupCriterionsByIdsAsync(r, h), null); + } + + public Future getAdGroupCriterionsByIdsAsync(GetAdGroupCriterionsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdGroupCriterions/QueryByIds", HttpPost, GetAdGroupCriterionsByIdsResponse.class, (r, h) -> fallbackService.get().getAdGroupCriterionsByIdsAsync(r, h), asyncHandler); + } + + + public AddAdGroupCriterionsResponse addAdGroupCriterions(AddAdGroupCriterionsRequest request) + throws AdApiFaultDetail_Exception, EditorialApiFaultDetail_Exception { + AddAdGroupCriterionsResponse response = sendRequestEditorialFault(request, "/AdGroupCriterions", HttpPost, AddAdGroupCriterionsResponse.class); + + if (response == null) { + response = fallbackService.get().addAdGroupCriterions(request); + } + + return response; + } + + public Response addAdGroupCriterionsAsync(AddAdGroupCriterionsRequest request) { + return sendRequestAsync(request, "/AdGroupCriterions", HttpPost, AddAdGroupCriterionsResponse.class, (r, h) -> fallbackService.get().addAdGroupCriterionsAsync(r, h), null); + } + + public Future addAdGroupCriterionsAsync(AddAdGroupCriterionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdGroupCriterions", HttpPost, AddAdGroupCriterionsResponse.class, (r, h) -> fallbackService.get().addAdGroupCriterionsAsync(r, h), asyncHandler); + } + + + public UpdateAdGroupCriterionsResponse updateAdGroupCriterions(UpdateAdGroupCriterionsRequest request) + throws AdApiFaultDetail_Exception, EditorialApiFaultDetail_Exception { + UpdateAdGroupCriterionsResponse response = sendRequestEditorialFault(request, "/AdGroupCriterions", HttpPut, UpdateAdGroupCriterionsResponse.class); + + if (response == null) { + response = fallbackService.get().updateAdGroupCriterions(request); + } + + return response; + } + + public Response updateAdGroupCriterionsAsync(UpdateAdGroupCriterionsRequest request) { + return sendRequestAsync(request, "/AdGroupCriterions", HttpPut, UpdateAdGroupCriterionsResponse.class, (r, h) -> fallbackService.get().updateAdGroupCriterionsAsync(r, h), null); + } + + public Future updateAdGroupCriterionsAsync(UpdateAdGroupCriterionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdGroupCriterions", HttpPut, UpdateAdGroupCriterionsResponse.class, (r, h) -> fallbackService.get().updateAdGroupCriterionsAsync(r, h), asyncHandler); + } + + + public DeleteAdGroupCriterionsResponse deleteAdGroupCriterions(DeleteAdGroupCriterionsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteAdGroupCriterionsResponse response = sendRequest(request, "/AdGroupCriterions", HttpDelete, DeleteAdGroupCriterionsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteAdGroupCriterions(request); + } + + return response; + } + + public Response deleteAdGroupCriterionsAsync(DeleteAdGroupCriterionsRequest request) { + return sendRequestAsync(request, "/AdGroupCriterions", HttpDelete, DeleteAdGroupCriterionsResponse.class, (r, h) -> fallbackService.get().deleteAdGroupCriterionsAsync(r, h), null); + } + + public Future deleteAdGroupCriterionsAsync(DeleteAdGroupCriterionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AdGroupCriterions", HttpDelete, DeleteAdGroupCriterionsResponse.class, (r, h) -> fallbackService.get().deleteAdGroupCriterionsAsync(r, h), asyncHandler); + } + + + public ApplyProductPartitionActionsResponse applyProductPartitionActions(ApplyProductPartitionActionsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + ApplyProductPartitionActionsResponse response = sendRequest(request, "/ProductPartitionActions/Apply", HttpPost, ApplyProductPartitionActionsResponse.class); + + if (response == null) { + response = fallbackService.get().applyProductPartitionActions(request); + } + + return response; + } + + public Response applyProductPartitionActionsAsync(ApplyProductPartitionActionsRequest request) { + return sendRequestAsync(request, "/ProductPartitionActions/Apply", HttpPost, ApplyProductPartitionActionsResponse.class, (r, h) -> fallbackService.get().applyProductPartitionActionsAsync(r, h), null); + } + + public Future applyProductPartitionActionsAsync(ApplyProductPartitionActionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ProductPartitionActions/Apply", HttpPost, ApplyProductPartitionActionsResponse.class, (r, h) -> fallbackService.get().applyProductPartitionActionsAsync(r, h), asyncHandler); + } + + + public ApplyHotelGroupActionsResponse applyHotelGroupActions(ApplyHotelGroupActionsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + ApplyHotelGroupActionsResponse response = sendRequest(request, "/HotelGroupActions/Apply", HttpPost, ApplyHotelGroupActionsResponse.class); + + if (response == null) { + response = fallbackService.get().applyHotelGroupActions(request); + } + + return response; + } + + public Response applyHotelGroupActionsAsync(ApplyHotelGroupActionsRequest request) { + return sendRequestAsync(request, "/HotelGroupActions/Apply", HttpPost, ApplyHotelGroupActionsResponse.class, (r, h) -> fallbackService.get().applyHotelGroupActionsAsync(r, h), null); + } + + public Future applyHotelGroupActionsAsync(ApplyHotelGroupActionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/HotelGroupActions/Apply", HttpPost, ApplyHotelGroupActionsResponse.class, (r, h) -> fallbackService.get().applyHotelGroupActionsAsync(r, h), asyncHandler); + } + + + public ApplyAssetGroupListingGroupActionsResponse applyAssetGroupListingGroupActions(ApplyAssetGroupListingGroupActionsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + ApplyAssetGroupListingGroupActionsResponse response = sendRequest(request, "/AssetGroupListingGroupActions/Apply", HttpPost, ApplyAssetGroupListingGroupActionsResponse.class); + + if (response == null) { + response = fallbackService.get().applyAssetGroupListingGroupActions(request); + } + + return response; + } + + public Response applyAssetGroupListingGroupActionsAsync(ApplyAssetGroupListingGroupActionsRequest request) { + return sendRequestAsync(request, "/AssetGroupListingGroupActions/Apply", HttpPost, ApplyAssetGroupListingGroupActionsResponse.class, (r, h) -> fallbackService.get().applyAssetGroupListingGroupActionsAsync(r, h), null); + } + + public Future applyAssetGroupListingGroupActionsAsync(ApplyAssetGroupListingGroupActionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AssetGroupListingGroupActions/Apply", HttpPost, ApplyAssetGroupListingGroupActionsResponse.class, (r, h) -> fallbackService.get().applyAssetGroupListingGroupActionsAsync(r, h), asyncHandler); + } + + + public GetAssetGroupListingGroupsByIdsResponse getAssetGroupListingGroupsByIds(GetAssetGroupListingGroupsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAssetGroupListingGroupsByIdsResponse response = sendRequest(request, "/AssetGroupListingGroups/QueryByIds", HttpPost, GetAssetGroupListingGroupsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getAssetGroupListingGroupsByIds(request); + } + + return response; + } + + public Response getAssetGroupListingGroupsByIdsAsync(GetAssetGroupListingGroupsByIdsRequest request) { + return sendRequestAsync(request, "/AssetGroupListingGroups/QueryByIds", HttpPost, GetAssetGroupListingGroupsByIdsResponse.class, (r, h) -> fallbackService.get().getAssetGroupListingGroupsByIdsAsync(r, h), null); + } + + public Future getAssetGroupListingGroupsByIdsAsync(GetAssetGroupListingGroupsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AssetGroupListingGroups/QueryByIds", HttpPost, GetAssetGroupListingGroupsByIdsResponse.class, (r, h) -> fallbackService.get().getAssetGroupListingGroupsByIdsAsync(r, h), asyncHandler); + } + + + public GetBMCStoresByCustomerIdResponse getBMCStoresByCustomerId(GetBMCStoresByCustomerIdRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetBMCStoresByCustomerIdResponse response = sendRequest(request, "/BMCStores/QueryByCustomerId", HttpPost, GetBMCStoresByCustomerIdResponse.class); + + if (response == null) { + response = fallbackService.get().getBMCStoresByCustomerId(request); + } + + return response; + } + + public Response getBMCStoresByCustomerIdAsync(GetBMCStoresByCustomerIdRequest request) { + return sendRequestAsync(request, "/BMCStores/QueryByCustomerId", HttpPost, GetBMCStoresByCustomerIdResponse.class, (r, h) -> fallbackService.get().getBMCStoresByCustomerIdAsync(r, h), null); + } + + public Future getBMCStoresByCustomerIdAsync(GetBMCStoresByCustomerIdRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/BMCStores/QueryByCustomerId", HttpPost, GetBMCStoresByCustomerIdResponse.class, (r, h) -> fallbackService.get().getBMCStoresByCustomerIdAsync(r, h), asyncHandler); + } + + + public AddNegativeKeywordsToEntitiesResponse addNegativeKeywordsToEntities(AddNegativeKeywordsToEntitiesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddNegativeKeywordsToEntitiesResponse response = sendRequest(request, "/EntityNegativeKeywords", HttpPost, AddNegativeKeywordsToEntitiesResponse.class); + + if (response == null) { + response = fallbackService.get().addNegativeKeywordsToEntities(request); + } + + return response; + } + + public Response addNegativeKeywordsToEntitiesAsync(AddNegativeKeywordsToEntitiesRequest request) { + return sendRequestAsync(request, "/EntityNegativeKeywords", HttpPost, AddNegativeKeywordsToEntitiesResponse.class, (r, h) -> fallbackService.get().addNegativeKeywordsToEntitiesAsync(r, h), null); + } + + public Future addNegativeKeywordsToEntitiesAsync(AddNegativeKeywordsToEntitiesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/EntityNegativeKeywords", HttpPost, AddNegativeKeywordsToEntitiesResponse.class, (r, h) -> fallbackService.get().addNegativeKeywordsToEntitiesAsync(r, h), asyncHandler); + } + + + public GetNegativeKeywordsByEntityIdsResponse getNegativeKeywordsByEntityIds(GetNegativeKeywordsByEntityIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetNegativeKeywordsByEntityIdsResponse response = sendRequest(request, "/NegativeKeywords/QueryByEntityIds", HttpPost, GetNegativeKeywordsByEntityIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getNegativeKeywordsByEntityIds(request); + } + + return response; + } + + public Response getNegativeKeywordsByEntityIdsAsync(GetNegativeKeywordsByEntityIdsRequest request) { + return sendRequestAsync(request, "/NegativeKeywords/QueryByEntityIds", HttpPost, GetNegativeKeywordsByEntityIdsResponse.class, (r, h) -> fallbackService.get().getNegativeKeywordsByEntityIdsAsync(r, h), null); + } + + public Future getNegativeKeywordsByEntityIdsAsync(GetNegativeKeywordsByEntityIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/NegativeKeywords/QueryByEntityIds", HttpPost, GetNegativeKeywordsByEntityIdsResponse.class, (r, h) -> fallbackService.get().getNegativeKeywordsByEntityIdsAsync(r, h), asyncHandler); + } + + + public DeleteNegativeKeywordsFromEntitiesResponse deleteNegativeKeywordsFromEntities(DeleteNegativeKeywordsFromEntitiesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteNegativeKeywordsFromEntitiesResponse response = sendRequest(request, "/EntityNegativeKeywords", HttpDelete, DeleteNegativeKeywordsFromEntitiesResponse.class); + + if (response == null) { + response = fallbackService.get().deleteNegativeKeywordsFromEntities(request); + } + + return response; + } + + public Response deleteNegativeKeywordsFromEntitiesAsync(DeleteNegativeKeywordsFromEntitiesRequest request) { + return sendRequestAsync(request, "/EntityNegativeKeywords", HttpDelete, DeleteNegativeKeywordsFromEntitiesResponse.class, (r, h) -> fallbackService.get().deleteNegativeKeywordsFromEntitiesAsync(r, h), null); + } + + public Future deleteNegativeKeywordsFromEntitiesAsync(DeleteNegativeKeywordsFromEntitiesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/EntityNegativeKeywords", HttpDelete, DeleteNegativeKeywordsFromEntitiesResponse.class, (r, h) -> fallbackService.get().deleteNegativeKeywordsFromEntitiesAsync(r, h), asyncHandler); + } + + + public GetSharedEntitiesByAccountIdResponse getSharedEntitiesByAccountId(GetSharedEntitiesByAccountIdRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetSharedEntitiesByAccountIdResponse response = sendRequest(request, "/SharedEntities/QueryByAccountId", HttpPost, GetSharedEntitiesByAccountIdResponse.class); + + if (response == null) { + response = fallbackService.get().getSharedEntitiesByAccountId(request); + } + + return response; + } + + public Response getSharedEntitiesByAccountIdAsync(GetSharedEntitiesByAccountIdRequest request) { + return sendRequestAsync(request, "/SharedEntities/QueryByAccountId", HttpPost, GetSharedEntitiesByAccountIdResponse.class, (r, h) -> fallbackService.get().getSharedEntitiesByAccountIdAsync(r, h), null); + } + + public Future getSharedEntitiesByAccountIdAsync(GetSharedEntitiesByAccountIdRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/SharedEntities/QueryByAccountId", HttpPost, GetSharedEntitiesByAccountIdResponse.class, (r, h) -> fallbackService.get().getSharedEntitiesByAccountIdAsync(r, h), asyncHandler); + } + + + public GetSharedEntitiesResponse getSharedEntities(GetSharedEntitiesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetSharedEntitiesResponse response = sendRequest(request, "/SharedEntities/Query", HttpPost, GetSharedEntitiesResponse.class); + + if (response == null) { + response = fallbackService.get().getSharedEntities(request); + } + + return response; + } + + public Response getSharedEntitiesAsync(GetSharedEntitiesRequest request) { + return sendRequestAsync(request, "/SharedEntities/Query", HttpPost, GetSharedEntitiesResponse.class, (r, h) -> fallbackService.get().getSharedEntitiesAsync(r, h), null); + } + + public Future getSharedEntitiesAsync(GetSharedEntitiesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/SharedEntities/Query", HttpPost, GetSharedEntitiesResponse.class, (r, h) -> fallbackService.get().getSharedEntitiesAsync(r, h), asyncHandler); + } + + + public AddSharedEntityResponse addSharedEntity(AddSharedEntityRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddSharedEntityResponse response = sendRequest(request, "/SharedEntity", HttpPost, AddSharedEntityResponse.class); + + if (response == null) { + response = fallbackService.get().addSharedEntity(request); + } + + return response; + } + + public Response addSharedEntityAsync(AddSharedEntityRequest request) { + return sendRequestAsync(request, "/SharedEntity", HttpPost, AddSharedEntityResponse.class, (r, h) -> fallbackService.get().addSharedEntityAsync(r, h), null); + } + + public Future addSharedEntityAsync(AddSharedEntityRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/SharedEntity", HttpPost, AddSharedEntityResponse.class, (r, h) -> fallbackService.get().addSharedEntityAsync(r, h), asyncHandler); + } + + + public GetListItemsBySharedListResponse getListItemsBySharedList(GetListItemsBySharedListRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetListItemsBySharedListResponse response = sendRequest(request, "/ListItems/QueryBySharedList", HttpPost, GetListItemsBySharedListResponse.class); + + if (response == null) { + response = fallbackService.get().getListItemsBySharedList(request); + } + + return response; + } + + public Response getListItemsBySharedListAsync(GetListItemsBySharedListRequest request) { + return sendRequestAsync(request, "/ListItems/QueryBySharedList", HttpPost, GetListItemsBySharedListResponse.class, (r, h) -> fallbackService.get().getListItemsBySharedListAsync(r, h), null); + } + + public Future getListItemsBySharedListAsync(GetListItemsBySharedListRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ListItems/QueryBySharedList", HttpPost, GetListItemsBySharedListResponse.class, (r, h) -> fallbackService.get().getListItemsBySharedListAsync(r, h), asyncHandler); + } + + + public AddListItemsToSharedListResponse addListItemsToSharedList(AddListItemsToSharedListRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddListItemsToSharedListResponse response = sendRequest(request, "/ListItems", HttpPost, AddListItemsToSharedListResponse.class); + + if (response == null) { + response = fallbackService.get().addListItemsToSharedList(request); + } + + return response; + } + + public Response addListItemsToSharedListAsync(AddListItemsToSharedListRequest request) { + return sendRequestAsync(request, "/ListItems", HttpPost, AddListItemsToSharedListResponse.class, (r, h) -> fallbackService.get().addListItemsToSharedListAsync(r, h), null); + } + + public Future addListItemsToSharedListAsync(AddListItemsToSharedListRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ListItems", HttpPost, AddListItemsToSharedListResponse.class, (r, h) -> fallbackService.get().addListItemsToSharedListAsync(r, h), asyncHandler); + } + + + public UpdateSharedEntitiesResponse updateSharedEntities(UpdateSharedEntitiesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateSharedEntitiesResponse response = sendRequest(request, "/SharedEntities", HttpPut, UpdateSharedEntitiesResponse.class); + + if (response == null) { + response = fallbackService.get().updateSharedEntities(request); + } + + return response; + } + + public Response updateSharedEntitiesAsync(UpdateSharedEntitiesRequest request) { + return sendRequestAsync(request, "/SharedEntities", HttpPut, UpdateSharedEntitiesResponse.class, (r, h) -> fallbackService.get().updateSharedEntitiesAsync(r, h), null); + } + + public Future updateSharedEntitiesAsync(UpdateSharedEntitiesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/SharedEntities", HttpPut, UpdateSharedEntitiesResponse.class, (r, h) -> fallbackService.get().updateSharedEntitiesAsync(r, h), asyncHandler); + } + + + public DeleteListItemsFromSharedListResponse deleteListItemsFromSharedList(DeleteListItemsFromSharedListRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteListItemsFromSharedListResponse response = sendRequest(request, "/ListItems", HttpDelete, DeleteListItemsFromSharedListResponse.class); + + if (response == null) { + response = fallbackService.get().deleteListItemsFromSharedList(request); + } + + return response; + } + + public Response deleteListItemsFromSharedListAsync(DeleteListItemsFromSharedListRequest request) { + return sendRequestAsync(request, "/ListItems", HttpDelete, DeleteListItemsFromSharedListResponse.class, (r, h) -> fallbackService.get().deleteListItemsFromSharedListAsync(r, h), null); + } + + public Future deleteListItemsFromSharedListAsync(DeleteListItemsFromSharedListRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ListItems", HttpDelete, DeleteListItemsFromSharedListResponse.class, (r, h) -> fallbackService.get().deleteListItemsFromSharedListAsync(r, h), asyncHandler); + } + + + public SetSharedEntityAssociationsResponse setSharedEntityAssociations(SetSharedEntityAssociationsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + SetSharedEntityAssociationsResponse response = sendRequest(request, "/SharedEntityAssociations/Set", HttpPost, SetSharedEntityAssociationsResponse.class); + + if (response == null) { + response = fallbackService.get().setSharedEntityAssociations(request); + } + + return response; + } + + public Response setSharedEntityAssociationsAsync(SetSharedEntityAssociationsRequest request) { + return sendRequestAsync(request, "/SharedEntityAssociations/Set", HttpPost, SetSharedEntityAssociationsResponse.class, (r, h) -> fallbackService.get().setSharedEntityAssociationsAsync(r, h), null); + } + + public Future setSharedEntityAssociationsAsync(SetSharedEntityAssociationsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/SharedEntityAssociations/Set", HttpPost, SetSharedEntityAssociationsResponse.class, (r, h) -> fallbackService.get().setSharedEntityAssociationsAsync(r, h), asyncHandler); + } + + + public DeleteSharedEntityAssociationsResponse deleteSharedEntityAssociations(DeleteSharedEntityAssociationsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteSharedEntityAssociationsResponse response = sendRequest(request, "/SharedEntityAssociations", HttpDelete, DeleteSharedEntityAssociationsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteSharedEntityAssociations(request); + } + + return response; + } + + public Response deleteSharedEntityAssociationsAsync(DeleteSharedEntityAssociationsRequest request) { + return sendRequestAsync(request, "/SharedEntityAssociations", HttpDelete, DeleteSharedEntityAssociationsResponse.class, (r, h) -> fallbackService.get().deleteSharedEntityAssociationsAsync(r, h), null); + } + + public Future deleteSharedEntityAssociationsAsync(DeleteSharedEntityAssociationsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/SharedEntityAssociations", HttpDelete, DeleteSharedEntityAssociationsResponse.class, (r, h) -> fallbackService.get().deleteSharedEntityAssociationsAsync(r, h), asyncHandler); + } + + + public GetSharedEntityAssociationsBySharedEntityIdsResponse getSharedEntityAssociationsBySharedEntityIds(GetSharedEntityAssociationsBySharedEntityIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetSharedEntityAssociationsBySharedEntityIdsResponse response = sendRequest(request, "/SharedEntityAssociations/QueryBySharedEntityIds", HttpPost, GetSharedEntityAssociationsBySharedEntityIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getSharedEntityAssociationsBySharedEntityIds(request); + } + + return response; + } + + public Response getSharedEntityAssociationsBySharedEntityIdsAsync(GetSharedEntityAssociationsBySharedEntityIdsRequest request) { + return sendRequestAsync(request, "/SharedEntityAssociations/QueryBySharedEntityIds", HttpPost, GetSharedEntityAssociationsBySharedEntityIdsResponse.class, (r, h) -> fallbackService.get().getSharedEntityAssociationsBySharedEntityIdsAsync(r, h), null); + } + + public Future getSharedEntityAssociationsBySharedEntityIdsAsync(GetSharedEntityAssociationsBySharedEntityIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/SharedEntityAssociations/QueryBySharedEntityIds", HttpPost, GetSharedEntityAssociationsBySharedEntityIdsResponse.class, (r, h) -> fallbackService.get().getSharedEntityAssociationsBySharedEntityIdsAsync(r, h), asyncHandler); + } + + + public GetSharedEntityAssociationsByEntityIdsResponse getSharedEntityAssociationsByEntityIds(GetSharedEntityAssociationsByEntityIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetSharedEntityAssociationsByEntityIdsResponse response = sendRequest(request, "/SharedEntityAssociations/QueryByEntityIds", HttpPost, GetSharedEntityAssociationsByEntityIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getSharedEntityAssociationsByEntityIds(request); + } + + return response; + } + + public Response getSharedEntityAssociationsByEntityIdsAsync(GetSharedEntityAssociationsByEntityIdsRequest request) { + return sendRequestAsync(request, "/SharedEntityAssociations/QueryByEntityIds", HttpPost, GetSharedEntityAssociationsByEntityIdsResponse.class, (r, h) -> fallbackService.get().getSharedEntityAssociationsByEntityIdsAsync(r, h), null); + } + + public Future getSharedEntityAssociationsByEntityIdsAsync(GetSharedEntityAssociationsByEntityIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/SharedEntityAssociations/QueryByEntityIds", HttpPost, GetSharedEntityAssociationsByEntityIdsResponse.class, (r, h) -> fallbackService.get().getSharedEntityAssociationsByEntityIdsAsync(r, h), asyncHandler); + } + + + public DeleteSharedEntitiesResponse deleteSharedEntities(DeleteSharedEntitiesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteSharedEntitiesResponse response = sendRequest(request, "/SharedEntities", HttpDelete, DeleteSharedEntitiesResponse.class); + + if (response == null) { + response = fallbackService.get().deleteSharedEntities(request); + } + + return response; + } + + public Response deleteSharedEntitiesAsync(DeleteSharedEntitiesRequest request) { + return sendRequestAsync(request, "/SharedEntities", HttpDelete, DeleteSharedEntitiesResponse.class, (r, h) -> fallbackService.get().deleteSharedEntitiesAsync(r, h), null); + } + + public Future deleteSharedEntitiesAsync(DeleteSharedEntitiesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/SharedEntities", HttpDelete, DeleteSharedEntitiesResponse.class, (r, h) -> fallbackService.get().deleteSharedEntitiesAsync(r, h), asyncHandler); + } + + + public GetCampaignSizesByAccountIdResponse getCampaignSizesByAccountId(GetCampaignSizesByAccountIdRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetCampaignSizesByAccountIdResponse response = sendRequest(request, "/CampaignSizes/QueryByAccountId", HttpPost, GetCampaignSizesByAccountIdResponse.class); + + if (response == null) { + response = fallbackService.get().getCampaignSizesByAccountId(request); + } + + return response; + } + + public Response getCampaignSizesByAccountIdAsync(GetCampaignSizesByAccountIdRequest request) { + return sendRequestAsync(request, "/CampaignSizes/QueryByAccountId", HttpPost, GetCampaignSizesByAccountIdResponse.class, (r, h) -> fallbackService.get().getCampaignSizesByAccountIdAsync(r, h), null); + } + + public Future getCampaignSizesByAccountIdAsync(GetCampaignSizesByAccountIdRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/CampaignSizes/QueryByAccountId", HttpPost, GetCampaignSizesByAccountIdResponse.class, (r, h) -> fallbackService.get().getCampaignSizesByAccountIdAsync(r, h), asyncHandler); + } + + + public AddCampaignCriterionsResponse addCampaignCriterions(AddCampaignCriterionsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddCampaignCriterionsResponse response = sendRequest(request, "/CampaignCriterions", HttpPost, AddCampaignCriterionsResponse.class); + + if (response == null) { + response = fallbackService.get().addCampaignCriterions(request); + } + + return response; + } + + public Response addCampaignCriterionsAsync(AddCampaignCriterionsRequest request) { + return sendRequestAsync(request, "/CampaignCriterions", HttpPost, AddCampaignCriterionsResponse.class, (r, h) -> fallbackService.get().addCampaignCriterionsAsync(r, h), null); + } + + public Future addCampaignCriterionsAsync(AddCampaignCriterionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/CampaignCriterions", HttpPost, AddCampaignCriterionsResponse.class, (r, h) -> fallbackService.get().addCampaignCriterionsAsync(r, h), asyncHandler); + } + + + public UpdateCampaignCriterionsResponse updateCampaignCriterions(UpdateCampaignCriterionsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateCampaignCriterionsResponse response = sendRequest(request, "/CampaignCriterions", HttpPut, UpdateCampaignCriterionsResponse.class); + + if (response == null) { + response = fallbackService.get().updateCampaignCriterions(request); + } + + return response; + } + + public Response updateCampaignCriterionsAsync(UpdateCampaignCriterionsRequest request) { + return sendRequestAsync(request, "/CampaignCriterions", HttpPut, UpdateCampaignCriterionsResponse.class, (r, h) -> fallbackService.get().updateCampaignCriterionsAsync(r, h), null); + } + + public Future updateCampaignCriterionsAsync(UpdateCampaignCriterionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/CampaignCriterions", HttpPut, UpdateCampaignCriterionsResponse.class, (r, h) -> fallbackService.get().updateCampaignCriterionsAsync(r, h), asyncHandler); + } + + + public DeleteCampaignCriterionsResponse deleteCampaignCriterions(DeleteCampaignCriterionsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteCampaignCriterionsResponse response = sendRequest(request, "/CampaignCriterions", HttpDelete, DeleteCampaignCriterionsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteCampaignCriterions(request); + } + + return response; + } + + public Response deleteCampaignCriterionsAsync(DeleteCampaignCriterionsRequest request) { + return sendRequestAsync(request, "/CampaignCriterions", HttpDelete, DeleteCampaignCriterionsResponse.class, (r, h) -> fallbackService.get().deleteCampaignCriterionsAsync(r, h), null); + } + + public Future deleteCampaignCriterionsAsync(DeleteCampaignCriterionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/CampaignCriterions", HttpDelete, DeleteCampaignCriterionsResponse.class, (r, h) -> fallbackService.get().deleteCampaignCriterionsAsync(r, h), asyncHandler); + } + + + public GetCampaignCriterionsByIdsResponse getCampaignCriterionsByIds(GetCampaignCriterionsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetCampaignCriterionsByIdsResponse response = sendRequest(request, "/CampaignCriterions/QueryByIds", HttpPost, GetCampaignCriterionsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getCampaignCriterionsByIds(request); + } + + return response; + } + + public Response getCampaignCriterionsByIdsAsync(GetCampaignCriterionsByIdsRequest request) { + return sendRequestAsync(request, "/CampaignCriterions/QueryByIds", HttpPost, GetCampaignCriterionsByIdsResponse.class, (r, h) -> fallbackService.get().getCampaignCriterionsByIdsAsync(r, h), null); + } + + public Future getCampaignCriterionsByIdsAsync(GetCampaignCriterionsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/CampaignCriterions/QueryByIds", HttpPost, GetCampaignCriterionsByIdsResponse.class, (r, h) -> fallbackService.get().getCampaignCriterionsByIdsAsync(r, h), asyncHandler); + } + + + public AddBudgetsResponse addBudgets(AddBudgetsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddBudgetsResponse response = sendRequest(request, "/Budgets", HttpPost, AddBudgetsResponse.class); + + if (response == null) { + response = fallbackService.get().addBudgets(request); + } + + return response; + } + + public Response addBudgetsAsync(AddBudgetsRequest request) { + return sendRequestAsync(request, "/Budgets", HttpPost, AddBudgetsResponse.class, (r, h) -> fallbackService.get().addBudgetsAsync(r, h), null); + } + + public Future addBudgetsAsync(AddBudgetsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Budgets", HttpPost, AddBudgetsResponse.class, (r, h) -> fallbackService.get().addBudgetsAsync(r, h), asyncHandler); + } + + + public UpdateBudgetsResponse updateBudgets(UpdateBudgetsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateBudgetsResponse response = sendRequest(request, "/Budgets", HttpPut, UpdateBudgetsResponse.class); + + if (response == null) { + response = fallbackService.get().updateBudgets(request); + } + + return response; + } + + public Response updateBudgetsAsync(UpdateBudgetsRequest request) { + return sendRequestAsync(request, "/Budgets", HttpPut, UpdateBudgetsResponse.class, (r, h) -> fallbackService.get().updateBudgetsAsync(r, h), null); + } + + public Future updateBudgetsAsync(UpdateBudgetsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Budgets", HttpPut, UpdateBudgetsResponse.class, (r, h) -> fallbackService.get().updateBudgetsAsync(r, h), asyncHandler); + } + + + public DeleteBudgetsResponse deleteBudgets(DeleteBudgetsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteBudgetsResponse response = sendRequest(request, "/Budgets", HttpDelete, DeleteBudgetsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteBudgets(request); + } + + return response; + } + + public Response deleteBudgetsAsync(DeleteBudgetsRequest request) { + return sendRequestAsync(request, "/Budgets", HttpDelete, DeleteBudgetsResponse.class, (r, h) -> fallbackService.get().deleteBudgetsAsync(r, h), null); + } + + public Future deleteBudgetsAsync(DeleteBudgetsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Budgets", HttpDelete, DeleteBudgetsResponse.class, (r, h) -> fallbackService.get().deleteBudgetsAsync(r, h), asyncHandler); + } + + + public GetBudgetsByIdsResponse getBudgetsByIds(GetBudgetsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetBudgetsByIdsResponse response = sendRequest(request, "/Budgets/QueryByIds", HttpPost, GetBudgetsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getBudgetsByIds(request); + } + + return response; + } + + public Response getBudgetsByIdsAsync(GetBudgetsByIdsRequest request) { + return sendRequestAsync(request, "/Budgets/QueryByIds", HttpPost, GetBudgetsByIdsResponse.class, (r, h) -> fallbackService.get().getBudgetsByIdsAsync(r, h), null); + } + + public Future getBudgetsByIdsAsync(GetBudgetsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Budgets/QueryByIds", HttpPost, GetBudgetsByIdsResponse.class, (r, h) -> fallbackService.get().getBudgetsByIdsAsync(r, h), asyncHandler); + } + + + public GetCampaignIdsByBudgetIdsResponse getCampaignIdsByBudgetIds(GetCampaignIdsByBudgetIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetCampaignIdsByBudgetIdsResponse response = sendRequest(request, "/CampaignIds/QueryByBudgetIds", HttpPost, GetCampaignIdsByBudgetIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getCampaignIdsByBudgetIds(request); + } + + return response; + } + + public Response getCampaignIdsByBudgetIdsAsync(GetCampaignIdsByBudgetIdsRequest request) { + return sendRequestAsync(request, "/CampaignIds/QueryByBudgetIds", HttpPost, GetCampaignIdsByBudgetIdsResponse.class, (r, h) -> fallbackService.get().getCampaignIdsByBudgetIdsAsync(r, h), null); + } + + public Future getCampaignIdsByBudgetIdsAsync(GetCampaignIdsByBudgetIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/CampaignIds/QueryByBudgetIds", HttpPost, GetCampaignIdsByBudgetIdsResponse.class, (r, h) -> fallbackService.get().getCampaignIdsByBudgetIdsAsync(r, h), asyncHandler); + } + + + public AddBidStrategiesResponse addBidStrategies(AddBidStrategiesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddBidStrategiesResponse response = sendRequest(request, "/BidStrategies", HttpPost, AddBidStrategiesResponse.class); + + if (response == null) { + response = fallbackService.get().addBidStrategies(request); + } + + return response; + } + + public Response addBidStrategiesAsync(AddBidStrategiesRequest request) { + return sendRequestAsync(request, "/BidStrategies", HttpPost, AddBidStrategiesResponse.class, (r, h) -> fallbackService.get().addBidStrategiesAsync(r, h), null); + } + + public Future addBidStrategiesAsync(AddBidStrategiesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/BidStrategies", HttpPost, AddBidStrategiesResponse.class, (r, h) -> fallbackService.get().addBidStrategiesAsync(r, h), asyncHandler); + } + + + public UpdateBidStrategiesResponse updateBidStrategies(UpdateBidStrategiesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateBidStrategiesResponse response = sendRequest(request, "/BidStrategies", HttpPut, UpdateBidStrategiesResponse.class); + + if (response == null) { + response = fallbackService.get().updateBidStrategies(request); + } + + return response; + } + + public Response updateBidStrategiesAsync(UpdateBidStrategiesRequest request) { + return sendRequestAsync(request, "/BidStrategies", HttpPut, UpdateBidStrategiesResponse.class, (r, h) -> fallbackService.get().updateBidStrategiesAsync(r, h), null); + } + + public Future updateBidStrategiesAsync(UpdateBidStrategiesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/BidStrategies", HttpPut, UpdateBidStrategiesResponse.class, (r, h) -> fallbackService.get().updateBidStrategiesAsync(r, h), asyncHandler); + } + + + public DeleteBidStrategiesResponse deleteBidStrategies(DeleteBidStrategiesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteBidStrategiesResponse response = sendRequest(request, "/BidStrategies", HttpDelete, DeleteBidStrategiesResponse.class); + + if (response == null) { + response = fallbackService.get().deleteBidStrategies(request); + } + + return response; + } + + public Response deleteBidStrategiesAsync(DeleteBidStrategiesRequest request) { + return sendRequestAsync(request, "/BidStrategies", HttpDelete, DeleteBidStrategiesResponse.class, (r, h) -> fallbackService.get().deleteBidStrategiesAsync(r, h), null); + } + + public Future deleteBidStrategiesAsync(DeleteBidStrategiesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/BidStrategies", HttpDelete, DeleteBidStrategiesResponse.class, (r, h) -> fallbackService.get().deleteBidStrategiesAsync(r, h), asyncHandler); + } + + + public GetBidStrategiesByIdsResponse getBidStrategiesByIds(GetBidStrategiesByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetBidStrategiesByIdsResponse response = sendRequest(request, "/BidStrategies/QueryByIds", HttpPost, GetBidStrategiesByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getBidStrategiesByIds(request); + } + + return response; + } + + public Response getBidStrategiesByIdsAsync(GetBidStrategiesByIdsRequest request) { + return sendRequestAsync(request, "/BidStrategies/QueryByIds", HttpPost, GetBidStrategiesByIdsResponse.class, (r, h) -> fallbackService.get().getBidStrategiesByIdsAsync(r, h), null); + } + + public Future getBidStrategiesByIdsAsync(GetBidStrategiesByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/BidStrategies/QueryByIds", HttpPost, GetBidStrategiesByIdsResponse.class, (r, h) -> fallbackService.get().getBidStrategiesByIdsAsync(r, h), asyncHandler); + } + + + public GetCampaignIdsByBidStrategyIdsResponse getCampaignIdsByBidStrategyIds(GetCampaignIdsByBidStrategyIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetCampaignIdsByBidStrategyIdsResponse response = sendRequest(request, "/CampaignIds/QueryByBidStrategyIds", HttpPost, GetCampaignIdsByBidStrategyIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getCampaignIdsByBidStrategyIds(request); + } + + return response; + } + + public Response getCampaignIdsByBidStrategyIdsAsync(GetCampaignIdsByBidStrategyIdsRequest request) { + return sendRequestAsync(request, "/CampaignIds/QueryByBidStrategyIds", HttpPost, GetCampaignIdsByBidStrategyIdsResponse.class, (r, h) -> fallbackService.get().getCampaignIdsByBidStrategyIdsAsync(r, h), null); + } + + public Future getCampaignIdsByBidStrategyIdsAsync(GetCampaignIdsByBidStrategyIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/CampaignIds/QueryByBidStrategyIds", HttpPost, GetCampaignIdsByBidStrategyIdsResponse.class, (r, h) -> fallbackService.get().getCampaignIdsByBidStrategyIdsAsync(r, h), asyncHandler); + } + + + public AddAudienceGroupsResponse addAudienceGroups(AddAudienceGroupsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddAudienceGroupsResponse response = sendRequest(request, "/AudienceGroups", HttpPost, AddAudienceGroupsResponse.class); + + if (response == null) { + response = fallbackService.get().addAudienceGroups(request); + } + + return response; + } + + public Response addAudienceGroupsAsync(AddAudienceGroupsRequest request) { + return sendRequestAsync(request, "/AudienceGroups", HttpPost, AddAudienceGroupsResponse.class, (r, h) -> fallbackService.get().addAudienceGroupsAsync(r, h), null); + } + + public Future addAudienceGroupsAsync(AddAudienceGroupsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AudienceGroups", HttpPost, AddAudienceGroupsResponse.class, (r, h) -> fallbackService.get().addAudienceGroupsAsync(r, h), asyncHandler); + } + + + public UpdateAudienceGroupsResponse updateAudienceGroups(UpdateAudienceGroupsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateAudienceGroupsResponse response = sendRequest(request, "/AudienceGroups", HttpPut, UpdateAudienceGroupsResponse.class); + + if (response == null) { + response = fallbackService.get().updateAudienceGroups(request); + } + + return response; + } + + public Response updateAudienceGroupsAsync(UpdateAudienceGroupsRequest request) { + return sendRequestAsync(request, "/AudienceGroups", HttpPut, UpdateAudienceGroupsResponse.class, (r, h) -> fallbackService.get().updateAudienceGroupsAsync(r, h), null); + } + + public Future updateAudienceGroupsAsync(UpdateAudienceGroupsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AudienceGroups", HttpPut, UpdateAudienceGroupsResponse.class, (r, h) -> fallbackService.get().updateAudienceGroupsAsync(r, h), asyncHandler); + } + + + public DeleteAudienceGroupsResponse deleteAudienceGroups(DeleteAudienceGroupsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteAudienceGroupsResponse response = sendRequest(request, "/AudienceGroups", HttpDelete, DeleteAudienceGroupsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteAudienceGroups(request); + } + + return response; + } + + public Response deleteAudienceGroupsAsync(DeleteAudienceGroupsRequest request) { + return sendRequestAsync(request, "/AudienceGroups", HttpDelete, DeleteAudienceGroupsResponse.class, (r, h) -> fallbackService.get().deleteAudienceGroupsAsync(r, h), null); + } + + public Future deleteAudienceGroupsAsync(DeleteAudienceGroupsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AudienceGroups", HttpDelete, DeleteAudienceGroupsResponse.class, (r, h) -> fallbackService.get().deleteAudienceGroupsAsync(r, h), asyncHandler); + } + + + public GetAudienceGroupsByIdsResponse getAudienceGroupsByIds(GetAudienceGroupsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAudienceGroupsByIdsResponse response = sendRequest(request, "/AudienceGroups/QueryByIds", HttpPost, GetAudienceGroupsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getAudienceGroupsByIds(request); + } + + return response; + } + + public Response getAudienceGroupsByIdsAsync(GetAudienceGroupsByIdsRequest request) { + return sendRequestAsync(request, "/AudienceGroups/QueryByIds", HttpPost, GetAudienceGroupsByIdsResponse.class, (r, h) -> fallbackService.get().getAudienceGroupsByIdsAsync(r, h), null); + } + + public Future getAudienceGroupsByIdsAsync(GetAudienceGroupsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AudienceGroups/QueryByIds", HttpPost, GetAudienceGroupsByIdsResponse.class, (r, h) -> fallbackService.get().getAudienceGroupsByIdsAsync(r, h), asyncHandler); + } + + + public AddAssetGroupsResponse addAssetGroups(AddAssetGroupsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddAssetGroupsResponse response = sendRequest(request, "/AssetGroups", HttpPost, AddAssetGroupsResponse.class); + + if (response == null) { + response = fallbackService.get().addAssetGroups(request); + } + + return response; + } + + public Response addAssetGroupsAsync(AddAssetGroupsRequest request) { + return sendRequestAsync(request, "/AssetGroups", HttpPost, AddAssetGroupsResponse.class, (r, h) -> fallbackService.get().addAssetGroupsAsync(r, h), null); + } + + public Future addAssetGroupsAsync(AddAssetGroupsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AssetGroups", HttpPost, AddAssetGroupsResponse.class, (r, h) -> fallbackService.get().addAssetGroupsAsync(r, h), asyncHandler); + } + + + public UpdateAssetGroupsResponse updateAssetGroups(UpdateAssetGroupsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateAssetGroupsResponse response = sendRequest(request, "/AssetGroups", HttpPut, UpdateAssetGroupsResponse.class); + + if (response == null) { + response = fallbackService.get().updateAssetGroups(request); + } + + return response; + } + + public Response updateAssetGroupsAsync(UpdateAssetGroupsRequest request) { + return sendRequestAsync(request, "/AssetGroups", HttpPut, UpdateAssetGroupsResponse.class, (r, h) -> fallbackService.get().updateAssetGroupsAsync(r, h), null); + } + + public Future updateAssetGroupsAsync(UpdateAssetGroupsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AssetGroups", HttpPut, UpdateAssetGroupsResponse.class, (r, h) -> fallbackService.get().updateAssetGroupsAsync(r, h), asyncHandler); + } + + + public DeleteAssetGroupsResponse deleteAssetGroups(DeleteAssetGroupsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteAssetGroupsResponse response = sendRequest(request, "/AssetGroups", HttpDelete, DeleteAssetGroupsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteAssetGroups(request); + } + + return response; + } + + public Response deleteAssetGroupsAsync(DeleteAssetGroupsRequest request) { + return sendRequestAsync(request, "/AssetGroups", HttpDelete, DeleteAssetGroupsResponse.class, (r, h) -> fallbackService.get().deleteAssetGroupsAsync(r, h), null); + } + + public Future deleteAssetGroupsAsync(DeleteAssetGroupsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AssetGroups", HttpDelete, DeleteAssetGroupsResponse.class, (r, h) -> fallbackService.get().deleteAssetGroupsAsync(r, h), asyncHandler); + } + + + public GetAssetGroupsByIdsResponse getAssetGroupsByIds(GetAssetGroupsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAssetGroupsByIdsResponse response = sendRequest(request, "/AssetGroups/QueryByIds", HttpPost, GetAssetGroupsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getAssetGroupsByIds(request); + } + + return response; + } + + public Response getAssetGroupsByIdsAsync(GetAssetGroupsByIdsRequest request) { + return sendRequestAsync(request, "/AssetGroups/QueryByIds", HttpPost, GetAssetGroupsByIdsResponse.class, (r, h) -> fallbackService.get().getAssetGroupsByIdsAsync(r, h), null); + } + + public Future getAssetGroupsByIdsAsync(GetAssetGroupsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AssetGroups/QueryByIds", HttpPost, GetAssetGroupsByIdsResponse.class, (r, h) -> fallbackService.get().getAssetGroupsByIdsAsync(r, h), asyncHandler); + } + + + public GetAssetGroupsByCampaignIdResponse getAssetGroupsByCampaignId(GetAssetGroupsByCampaignIdRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAssetGroupsByCampaignIdResponse response = sendRequest(request, "/AssetGroups/QueryByCampaignId", HttpPost, GetAssetGroupsByCampaignIdResponse.class); + + if (response == null) { + response = fallbackService.get().getAssetGroupsByCampaignId(request); + } + + return response; + } + + public Response getAssetGroupsByCampaignIdAsync(GetAssetGroupsByCampaignIdRequest request) { + return sendRequestAsync(request, "/AssetGroups/QueryByCampaignId", HttpPost, GetAssetGroupsByCampaignIdResponse.class, (r, h) -> fallbackService.get().getAssetGroupsByCampaignIdAsync(r, h), null); + } + + public Future getAssetGroupsByCampaignIdAsync(GetAssetGroupsByCampaignIdRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AssetGroups/QueryByCampaignId", HttpPost, GetAssetGroupsByCampaignIdResponse.class, (r, h) -> fallbackService.get().getAssetGroupsByCampaignIdAsync(r, h), asyncHandler); + } + + + public GetAssetGroupsEditorialReasonsResponse getAssetGroupsEditorialReasons(GetAssetGroupsEditorialReasonsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAssetGroupsEditorialReasonsResponse response = sendRequest(request, "/AssetGroupsEditorialReasons/Query", HttpPost, GetAssetGroupsEditorialReasonsResponse.class); + + if (response == null) { + response = fallbackService.get().getAssetGroupsEditorialReasons(request); + } + + return response; + } + + public Response getAssetGroupsEditorialReasonsAsync(GetAssetGroupsEditorialReasonsRequest request) { + return sendRequestAsync(request, "/AssetGroupsEditorialReasons/Query", HttpPost, GetAssetGroupsEditorialReasonsResponse.class, (r, h) -> fallbackService.get().getAssetGroupsEditorialReasonsAsync(r, h), null); + } + + public Future getAssetGroupsEditorialReasonsAsync(GetAssetGroupsEditorialReasonsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AssetGroupsEditorialReasons/Query", HttpPost, GetAssetGroupsEditorialReasonsResponse.class, (r, h) -> fallbackService.get().getAssetGroupsEditorialReasonsAsync(r, h), asyncHandler); + } + + + public SetAudienceGroupAssetGroupAssociationsResponse setAudienceGroupAssetGroupAssociations(SetAudienceGroupAssetGroupAssociationsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + SetAudienceGroupAssetGroupAssociationsResponse response = sendRequest(request, "/AudienceGroupAssetGroupAssociations/Set", HttpPost, SetAudienceGroupAssetGroupAssociationsResponse.class); + + if (response == null) { + response = fallbackService.get().setAudienceGroupAssetGroupAssociations(request); + } + + return response; + } + + public Response setAudienceGroupAssetGroupAssociationsAsync(SetAudienceGroupAssetGroupAssociationsRequest request) { + return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations/Set", HttpPost, SetAudienceGroupAssetGroupAssociationsResponse.class, (r, h) -> fallbackService.get().setAudienceGroupAssetGroupAssociationsAsync(r, h), null); + } + + public Future setAudienceGroupAssetGroupAssociationsAsync(SetAudienceGroupAssetGroupAssociationsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations/Set", HttpPost, SetAudienceGroupAssetGroupAssociationsResponse.class, (r, h) -> fallbackService.get().setAudienceGroupAssetGroupAssociationsAsync(r, h), asyncHandler); + } + + + public DeleteAudienceGroupAssetGroupAssociationsResponse deleteAudienceGroupAssetGroupAssociations(DeleteAudienceGroupAssetGroupAssociationsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteAudienceGroupAssetGroupAssociationsResponse response = sendRequest(request, "/AudienceGroupAssetGroupAssociations", HttpDelete, DeleteAudienceGroupAssetGroupAssociationsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteAudienceGroupAssetGroupAssociations(request); + } + + return response; + } + + public Response deleteAudienceGroupAssetGroupAssociationsAsync(DeleteAudienceGroupAssetGroupAssociationsRequest request) { + return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations", HttpDelete, DeleteAudienceGroupAssetGroupAssociationsResponse.class, (r, h) -> fallbackService.get().deleteAudienceGroupAssetGroupAssociationsAsync(r, h), null); + } + + public Future deleteAudienceGroupAssetGroupAssociationsAsync(DeleteAudienceGroupAssetGroupAssociationsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations", HttpDelete, DeleteAudienceGroupAssetGroupAssociationsResponse.class, (r, h) -> fallbackService.get().deleteAudienceGroupAssetGroupAssociationsAsync(r, h), asyncHandler); + } + + + public GetAudienceGroupAssetGroupAssociationsByAssetGroupIdsResponse getAudienceGroupAssetGroupAssociationsByAssetGroupIds(GetAudienceGroupAssetGroupAssociationsByAssetGroupIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAudienceGroupAssetGroupAssociationsByAssetGroupIdsResponse response = sendRequest(request, "/AudienceGroupAssetGroupAssociations/QueryByAssetGroupIds", HttpPost, GetAudienceGroupAssetGroupAssociationsByAssetGroupIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getAudienceGroupAssetGroupAssociationsByAssetGroupIds(request); + } + + return response; + } + + public Response getAudienceGroupAssetGroupAssociationsByAssetGroupIdsAsync(GetAudienceGroupAssetGroupAssociationsByAssetGroupIdsRequest request) { + return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations/QueryByAssetGroupIds", HttpPost, GetAudienceGroupAssetGroupAssociationsByAssetGroupIdsResponse.class, (r, h) -> fallbackService.get().getAudienceGroupAssetGroupAssociationsByAssetGroupIdsAsync(r, h), null); + } + + public Future getAudienceGroupAssetGroupAssociationsByAssetGroupIdsAsync(GetAudienceGroupAssetGroupAssociationsByAssetGroupIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations/QueryByAssetGroupIds", HttpPost, GetAudienceGroupAssetGroupAssociationsByAssetGroupIdsResponse.class, (r, h) -> fallbackService.get().getAudienceGroupAssetGroupAssociationsByAssetGroupIdsAsync(r, h), asyncHandler); + } + + + public GetAudienceGroupAssetGroupAssociationsByAudienceGroupIdsResponse getAudienceGroupAssetGroupAssociationsByAudienceGroupIds(GetAudienceGroupAssetGroupAssociationsByAudienceGroupIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAudienceGroupAssetGroupAssociationsByAudienceGroupIdsResponse response = sendRequest(request, "/AudienceGroupAssetGroupAssociations/QueryByAudienceGroupIds", HttpPost, GetAudienceGroupAssetGroupAssociationsByAudienceGroupIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getAudienceGroupAssetGroupAssociationsByAudienceGroupIds(request); + } + + return response; + } + + public Response getAudienceGroupAssetGroupAssociationsByAudienceGroupIdsAsync(GetAudienceGroupAssetGroupAssociationsByAudienceGroupIdsRequest request) { + return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations/QueryByAudienceGroupIds", HttpPost, GetAudienceGroupAssetGroupAssociationsByAudienceGroupIdsResponse.class, (r, h) -> fallbackService.get().getAudienceGroupAssetGroupAssociationsByAudienceGroupIdsAsync(r, h), null); + } + + public Future getAudienceGroupAssetGroupAssociationsByAudienceGroupIdsAsync(GetAudienceGroupAssetGroupAssociationsByAudienceGroupIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/AudienceGroupAssetGroupAssociations/QueryByAudienceGroupIds", HttpPost, GetAudienceGroupAssetGroupAssociationsByAudienceGroupIdsResponse.class, (r, h) -> fallbackService.get().getAudienceGroupAssetGroupAssociationsByAudienceGroupIdsAsync(r, h), asyncHandler); + } + + + public AddAudiencesResponse addAudiences(AddAudiencesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddAudiencesResponse response = sendRequest(request, "/Audiences", HttpPost, AddAudiencesResponse.class); + + if (response == null) { + response = fallbackService.get().addAudiences(request); + } + + return response; + } + + public Response addAudiencesAsync(AddAudiencesRequest request) { + return sendRequestAsync(request, "/Audiences", HttpPost, AddAudiencesResponse.class, (r, h) -> fallbackService.get().addAudiencesAsync(r, h), null); + } + + public Future addAudiencesAsync(AddAudiencesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Audiences", HttpPost, AddAudiencesResponse.class, (r, h) -> fallbackService.get().addAudiencesAsync(r, h), asyncHandler); + } + + + public UpdateAudiencesResponse updateAudiences(UpdateAudiencesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateAudiencesResponse response = sendRequest(request, "/Audiences", HttpPut, UpdateAudiencesResponse.class); + + if (response == null) { + response = fallbackService.get().updateAudiences(request); + } + + return response; + } + + public Response updateAudiencesAsync(UpdateAudiencesRequest request) { + return sendRequestAsync(request, "/Audiences", HttpPut, UpdateAudiencesResponse.class, (r, h) -> fallbackService.get().updateAudiencesAsync(r, h), null); + } + + public Future updateAudiencesAsync(UpdateAudiencesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Audiences", HttpPut, UpdateAudiencesResponse.class, (r, h) -> fallbackService.get().updateAudiencesAsync(r, h), asyncHandler); + } + + + public DeleteAudiencesResponse deleteAudiences(DeleteAudiencesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteAudiencesResponse response = sendRequest(request, "/Audiences", HttpDelete, DeleteAudiencesResponse.class); + + if (response == null) { + response = fallbackService.get().deleteAudiences(request); + } + + return response; + } + + public Response deleteAudiencesAsync(DeleteAudiencesRequest request) { + return sendRequestAsync(request, "/Audiences", HttpDelete, DeleteAudiencesResponse.class, (r, h) -> fallbackService.get().deleteAudiencesAsync(r, h), null); + } + + public Future deleteAudiencesAsync(DeleteAudiencesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Audiences", HttpDelete, DeleteAudiencesResponse.class, (r, h) -> fallbackService.get().deleteAudiencesAsync(r, h), asyncHandler); + } + + + public GetAudiencesByIdsResponse getAudiencesByIds(GetAudiencesByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetAudiencesByIdsResponse response = sendRequest(request, "/Audiences/QueryByIds", HttpPost, GetAudiencesByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getAudiencesByIds(request); + } + + return response; + } + + public Response getAudiencesByIdsAsync(GetAudiencesByIdsRequest request) { + return sendRequestAsync(request, "/Audiences/QueryByIds", HttpPost, GetAudiencesByIdsResponse.class, (r, h) -> fallbackService.get().getAudiencesByIdsAsync(r, h), null); + } + + public Future getAudiencesByIdsAsync(GetAudiencesByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Audiences/QueryByIds", HttpPost, GetAudiencesByIdsResponse.class, (r, h) -> fallbackService.get().getAudiencesByIdsAsync(r, h), asyncHandler); + } + + + public ApplyCustomerListItemsResponse applyCustomerListItems(ApplyCustomerListItemsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + ApplyCustomerListItemsResponse response = sendRequest(request, "/CustomerListItems/Apply", HttpPost, ApplyCustomerListItemsResponse.class); + + if (response == null) { + response = fallbackService.get().applyCustomerListItems(request); + } + + return response; + } + + public Response applyCustomerListItemsAsync(ApplyCustomerListItemsRequest request) { + return sendRequestAsync(request, "/CustomerListItems/Apply", HttpPost, ApplyCustomerListItemsResponse.class, (r, h) -> fallbackService.get().applyCustomerListItemsAsync(r, h), null); + } + + public Future applyCustomerListItemsAsync(ApplyCustomerListItemsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/CustomerListItems/Apply", HttpPost, ApplyCustomerListItemsResponse.class, (r, h) -> fallbackService.get().applyCustomerListItemsAsync(r, h), asyncHandler); + } + + + public ApplyCustomerListUserDataResponse applyCustomerListUserData(ApplyCustomerListUserDataRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + ApplyCustomerListUserDataResponse response = sendRequest(request, "/CustomerListUserData/Apply", HttpPost, ApplyCustomerListUserDataResponse.class); + + if (response == null) { + response = fallbackService.get().applyCustomerListUserData(request); + } + + return response; + } + + public Response applyCustomerListUserDataAsync(ApplyCustomerListUserDataRequest request) { + return sendRequestAsync(request, "/CustomerListUserData/Apply", HttpPost, ApplyCustomerListUserDataResponse.class, (r, h) -> fallbackService.get().applyCustomerListUserDataAsync(r, h), null); + } + + public Future applyCustomerListUserDataAsync(ApplyCustomerListUserDataRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/CustomerListUserData/Apply", HttpPost, ApplyCustomerListUserDataResponse.class, (r, h) -> fallbackService.get().applyCustomerListUserDataAsync(r, h), asyncHandler); + } + + + public GetUetTagsByIdsResponse getUetTagsByIds(GetUetTagsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetUetTagsByIdsResponse response = sendRequest(request, "/UetTags/QueryByIds", HttpPost, GetUetTagsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getUetTagsByIds(request); + } + + return response; + } + + public Response getUetTagsByIdsAsync(GetUetTagsByIdsRequest request) { + return sendRequestAsync(request, "/UetTags/QueryByIds", HttpPost, GetUetTagsByIdsResponse.class, (r, h) -> fallbackService.get().getUetTagsByIdsAsync(r, h), null); + } + + public Future getUetTagsByIdsAsync(GetUetTagsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/UetTags/QueryByIds", HttpPost, GetUetTagsByIdsResponse.class, (r, h) -> fallbackService.get().getUetTagsByIdsAsync(r, h), asyncHandler); + } + + + public AddUetTagsResponse addUetTags(AddUetTagsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddUetTagsResponse response = sendRequest(request, "/UetTags", HttpPost, AddUetTagsResponse.class); + + if (response == null) { + response = fallbackService.get().addUetTags(request); + } + + return response; + } + + public Response addUetTagsAsync(AddUetTagsRequest request) { + return sendRequestAsync(request, "/UetTags", HttpPost, AddUetTagsResponse.class, (r, h) -> fallbackService.get().addUetTagsAsync(r, h), null); + } + + public Future addUetTagsAsync(AddUetTagsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/UetTags", HttpPost, AddUetTagsResponse.class, (r, h) -> fallbackService.get().addUetTagsAsync(r, h), asyncHandler); + } + + + public UpdateUetTagsResponse updateUetTags(UpdateUetTagsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateUetTagsResponse response = sendRequest(request, "/UetTags", HttpPut, UpdateUetTagsResponse.class); + + if (response == null) { + response = fallbackService.get().updateUetTags(request); + } + + return response; + } + + public Response updateUetTagsAsync(UpdateUetTagsRequest request) { + return sendRequestAsync(request, "/UetTags", HttpPut, UpdateUetTagsResponse.class, (r, h) -> fallbackService.get().updateUetTagsAsync(r, h), null); + } + + public Future updateUetTagsAsync(UpdateUetTagsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/UetTags", HttpPut, UpdateUetTagsResponse.class, (r, h) -> fallbackService.get().updateUetTagsAsync(r, h), asyncHandler); + } + + + public GetConversionGoalsByIdsResponse getConversionGoalsByIds(GetConversionGoalsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetConversionGoalsByIdsResponse response = sendRequest(request, "/ConversionGoals/QueryByIds", HttpPost, GetConversionGoalsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getConversionGoalsByIds(request); + } + + return response; + } + + public Response getConversionGoalsByIdsAsync(GetConversionGoalsByIdsRequest request) { + return sendRequestAsync(request, "/ConversionGoals/QueryByIds", HttpPost, GetConversionGoalsByIdsResponse.class, (r, h) -> fallbackService.get().getConversionGoalsByIdsAsync(r, h), null); + } + + public Future getConversionGoalsByIdsAsync(GetConversionGoalsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ConversionGoals/QueryByIds", HttpPost, GetConversionGoalsByIdsResponse.class, (r, h) -> fallbackService.get().getConversionGoalsByIdsAsync(r, h), asyncHandler); + } + + + public GetConversionGoalsByTagIdsResponse getConversionGoalsByTagIds(GetConversionGoalsByTagIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetConversionGoalsByTagIdsResponse response = sendRequest(request, "/ConversionGoals/QueryByTagIds", HttpPost, GetConversionGoalsByTagIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getConversionGoalsByTagIds(request); + } + + return response; + } + + public Response getConversionGoalsByTagIdsAsync(GetConversionGoalsByTagIdsRequest request) { + return sendRequestAsync(request, "/ConversionGoals/QueryByTagIds", HttpPost, GetConversionGoalsByTagIdsResponse.class, (r, h) -> fallbackService.get().getConversionGoalsByTagIdsAsync(r, h), null); + } + + public Future getConversionGoalsByTagIdsAsync(GetConversionGoalsByTagIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ConversionGoals/QueryByTagIds", HttpPost, GetConversionGoalsByTagIdsResponse.class, (r, h) -> fallbackService.get().getConversionGoalsByTagIdsAsync(r, h), asyncHandler); + } + + + public AddConversionGoalsResponse addConversionGoals(AddConversionGoalsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddConversionGoalsResponse response = sendRequest(request, "/ConversionGoals", HttpPost, AddConversionGoalsResponse.class); + + if (response == null) { + response = fallbackService.get().addConversionGoals(request); + } + + return response; + } + + public Response addConversionGoalsAsync(AddConversionGoalsRequest request) { + return sendRequestAsync(request, "/ConversionGoals", HttpPost, AddConversionGoalsResponse.class, (r, h) -> fallbackService.get().addConversionGoalsAsync(r, h), null); + } + + public Future addConversionGoalsAsync(AddConversionGoalsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ConversionGoals", HttpPost, AddConversionGoalsResponse.class, (r, h) -> fallbackService.get().addConversionGoalsAsync(r, h), asyncHandler); + } + + + public UpdateConversionGoalsResponse updateConversionGoals(UpdateConversionGoalsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateConversionGoalsResponse response = sendRequest(request, "/ConversionGoals", HttpPut, UpdateConversionGoalsResponse.class); + + if (response == null) { + response = fallbackService.get().updateConversionGoals(request); + } + + return response; + } + + public Response updateConversionGoalsAsync(UpdateConversionGoalsRequest request) { + return sendRequestAsync(request, "/ConversionGoals", HttpPut, UpdateConversionGoalsResponse.class, (r, h) -> fallbackService.get().updateConversionGoalsAsync(r, h), null); + } + + public Future updateConversionGoalsAsync(UpdateConversionGoalsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ConversionGoals", HttpPut, UpdateConversionGoalsResponse.class, (r, h) -> fallbackService.get().updateConversionGoalsAsync(r, h), asyncHandler); + } + + + public ApplyOfflineConversionsResponse applyOfflineConversions(ApplyOfflineConversionsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + ApplyOfflineConversionsResponse response = sendRequest(request, "/OfflineConversions/Apply", HttpPost, ApplyOfflineConversionsResponse.class); + + if (response == null) { + response = fallbackService.get().applyOfflineConversions(request); + } + + return response; + } + + public Response applyOfflineConversionsAsync(ApplyOfflineConversionsRequest request) { + return sendRequestAsync(request, "/OfflineConversions/Apply", HttpPost, ApplyOfflineConversionsResponse.class, (r, h) -> fallbackService.get().applyOfflineConversionsAsync(r, h), null); + } + + public Future applyOfflineConversionsAsync(ApplyOfflineConversionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/OfflineConversions/Apply", HttpPost, ApplyOfflineConversionsResponse.class, (r, h) -> fallbackService.get().applyOfflineConversionsAsync(r, h), asyncHandler); + } + + + public ApplyOfflineConversionAdjustmentsResponse applyOfflineConversionAdjustments(ApplyOfflineConversionAdjustmentsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + ApplyOfflineConversionAdjustmentsResponse response = sendRequest(request, "/OfflineConversionAdjustments/Apply", HttpPost, ApplyOfflineConversionAdjustmentsResponse.class); + + if (response == null) { + response = fallbackService.get().applyOfflineConversionAdjustments(request); + } + + return response; + } + + public Response applyOfflineConversionAdjustmentsAsync(ApplyOfflineConversionAdjustmentsRequest request) { + return sendRequestAsync(request, "/OfflineConversionAdjustments/Apply", HttpPost, ApplyOfflineConversionAdjustmentsResponse.class, (r, h) -> fallbackService.get().applyOfflineConversionAdjustmentsAsync(r, h), null); + } + + public Future applyOfflineConversionAdjustmentsAsync(ApplyOfflineConversionAdjustmentsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/OfflineConversionAdjustments/Apply", HttpPost, ApplyOfflineConversionAdjustmentsResponse.class, (r, h) -> fallbackService.get().applyOfflineConversionAdjustmentsAsync(r, h), asyncHandler); + } + + + public ApplyOnlineConversionAdjustmentsResponse applyOnlineConversionAdjustments(ApplyOnlineConversionAdjustmentsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + ApplyOnlineConversionAdjustmentsResponse response = sendRequest(request, "/OnlineConversionAdjustments/Apply", HttpPost, ApplyOnlineConversionAdjustmentsResponse.class); + + if (response == null) { + response = fallbackService.get().applyOnlineConversionAdjustments(request); + } + + return response; + } + + public Response applyOnlineConversionAdjustmentsAsync(ApplyOnlineConversionAdjustmentsRequest request) { + return sendRequestAsync(request, "/OnlineConversionAdjustments/Apply", HttpPost, ApplyOnlineConversionAdjustmentsResponse.class, (r, h) -> fallbackService.get().applyOnlineConversionAdjustmentsAsync(r, h), null); + } + + public Future applyOnlineConversionAdjustmentsAsync(ApplyOnlineConversionAdjustmentsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/OnlineConversionAdjustments/Apply", HttpPost, ApplyOnlineConversionAdjustmentsResponse.class, (r, h) -> fallbackService.get().applyOnlineConversionAdjustmentsAsync(r, h), asyncHandler); + } + + + public AddLabelsResponse addLabels(AddLabelsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddLabelsResponse response = sendRequest(request, "/Labels", HttpPost, AddLabelsResponse.class); + + if (response == null) { + response = fallbackService.get().addLabels(request); + } + + return response; + } + + public Response addLabelsAsync(AddLabelsRequest request) { + return sendRequestAsync(request, "/Labels", HttpPost, AddLabelsResponse.class, (r, h) -> fallbackService.get().addLabelsAsync(r, h), null); + } + + public Future addLabelsAsync(AddLabelsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Labels", HttpPost, AddLabelsResponse.class, (r, h) -> fallbackService.get().addLabelsAsync(r, h), asyncHandler); + } + + + public DeleteLabelsResponse deleteLabels(DeleteLabelsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteLabelsResponse response = sendRequest(request, "/Labels", HttpDelete, DeleteLabelsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteLabels(request); + } + + return response; + } + + public Response deleteLabelsAsync(DeleteLabelsRequest request) { + return sendRequestAsync(request, "/Labels", HttpDelete, DeleteLabelsResponse.class, (r, h) -> fallbackService.get().deleteLabelsAsync(r, h), null); + } + + public Future deleteLabelsAsync(DeleteLabelsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Labels", HttpDelete, DeleteLabelsResponse.class, (r, h) -> fallbackService.get().deleteLabelsAsync(r, h), asyncHandler); + } + + + public UpdateLabelsResponse updateLabels(UpdateLabelsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateLabelsResponse response = sendRequest(request, "/Labels", HttpPut, UpdateLabelsResponse.class); + + if (response == null) { + response = fallbackService.get().updateLabels(request); + } + + return response; + } + + public Response updateLabelsAsync(UpdateLabelsRequest request) { + return sendRequestAsync(request, "/Labels", HttpPut, UpdateLabelsResponse.class, (r, h) -> fallbackService.get().updateLabelsAsync(r, h), null); + } + + public Future updateLabelsAsync(UpdateLabelsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Labels", HttpPut, UpdateLabelsResponse.class, (r, h) -> fallbackService.get().updateLabelsAsync(r, h), asyncHandler); + } + + + public GetLabelsByIdsResponse getLabelsByIds(GetLabelsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetLabelsByIdsResponse response = sendRequest(request, "/Labels/QueryByIds", HttpPost, GetLabelsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getLabelsByIds(request); + } + + return response; + } + + public Response getLabelsByIdsAsync(GetLabelsByIdsRequest request) { + return sendRequestAsync(request, "/Labels/QueryByIds", HttpPost, GetLabelsByIdsResponse.class, (r, h) -> fallbackService.get().getLabelsByIdsAsync(r, h), null); + } + + public Future getLabelsByIdsAsync(GetLabelsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Labels/QueryByIds", HttpPost, GetLabelsByIdsResponse.class, (r, h) -> fallbackService.get().getLabelsByIdsAsync(r, h), asyncHandler); + } + + + public SetLabelAssociationsResponse setLabelAssociations(SetLabelAssociationsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + SetLabelAssociationsResponse response = sendRequest(request, "/LabelAssociations/Set", HttpPost, SetLabelAssociationsResponse.class); + + if (response == null) { + response = fallbackService.get().setLabelAssociations(request); + } + + return response; + } + + public Response setLabelAssociationsAsync(SetLabelAssociationsRequest request) { + return sendRequestAsync(request, "/LabelAssociations/Set", HttpPost, SetLabelAssociationsResponse.class, (r, h) -> fallbackService.get().setLabelAssociationsAsync(r, h), null); + } + + public Future setLabelAssociationsAsync(SetLabelAssociationsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/LabelAssociations/Set", HttpPost, SetLabelAssociationsResponse.class, (r, h) -> fallbackService.get().setLabelAssociationsAsync(r, h), asyncHandler); + } + + + public DeleteLabelAssociationsResponse deleteLabelAssociations(DeleteLabelAssociationsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteLabelAssociationsResponse response = sendRequest(request, "/LabelAssociations", HttpDelete, DeleteLabelAssociationsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteLabelAssociations(request); + } + + return response; + } + + public Response deleteLabelAssociationsAsync(DeleteLabelAssociationsRequest request) { + return sendRequestAsync(request, "/LabelAssociations", HttpDelete, DeleteLabelAssociationsResponse.class, (r, h) -> fallbackService.get().deleteLabelAssociationsAsync(r, h), null); + } + + public Future deleteLabelAssociationsAsync(DeleteLabelAssociationsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/LabelAssociations", HttpDelete, DeleteLabelAssociationsResponse.class, (r, h) -> fallbackService.get().deleteLabelAssociationsAsync(r, h), asyncHandler); + } + + + public GetLabelAssociationsByEntityIdsResponse getLabelAssociationsByEntityIds(GetLabelAssociationsByEntityIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetLabelAssociationsByEntityIdsResponse response = sendRequest(request, "/LabelAssociations/QueryByEntityIds", HttpPost, GetLabelAssociationsByEntityIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getLabelAssociationsByEntityIds(request); + } + + return response; + } + + public Response getLabelAssociationsByEntityIdsAsync(GetLabelAssociationsByEntityIdsRequest request) { + return sendRequestAsync(request, "/LabelAssociations/QueryByEntityIds", HttpPost, GetLabelAssociationsByEntityIdsResponse.class, (r, h) -> fallbackService.get().getLabelAssociationsByEntityIdsAsync(r, h), null); + } + + public Future getLabelAssociationsByEntityIdsAsync(GetLabelAssociationsByEntityIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/LabelAssociations/QueryByEntityIds", HttpPost, GetLabelAssociationsByEntityIdsResponse.class, (r, h) -> fallbackService.get().getLabelAssociationsByEntityIdsAsync(r, h), asyncHandler); + } + + + public GetLabelAssociationsByLabelIdsResponse getLabelAssociationsByLabelIds(GetLabelAssociationsByLabelIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetLabelAssociationsByLabelIdsResponse response = sendRequest(request, "/LabelAssociations/QueryByLabelIds", HttpPost, GetLabelAssociationsByLabelIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getLabelAssociationsByLabelIds(request); + } + + return response; + } + + public Response getLabelAssociationsByLabelIdsAsync(GetLabelAssociationsByLabelIdsRequest request) { + return sendRequestAsync(request, "/LabelAssociations/QueryByLabelIds", HttpPost, GetLabelAssociationsByLabelIdsResponse.class, (r, h) -> fallbackService.get().getLabelAssociationsByLabelIdsAsync(r, h), null); + } + + public Future getLabelAssociationsByLabelIdsAsync(GetLabelAssociationsByLabelIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/LabelAssociations/QueryByLabelIds", HttpPost, GetLabelAssociationsByLabelIdsResponse.class, (r, h) -> fallbackService.get().getLabelAssociationsByLabelIdsAsync(r, h), asyncHandler); + } + + + public AddExperimentsResponse addExperiments(AddExperimentsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddExperimentsResponse response = sendRequest(request, "/Experiments", HttpPost, AddExperimentsResponse.class); + + if (response == null) { + response = fallbackService.get().addExperiments(request); + } + + return response; + } + + public Response addExperimentsAsync(AddExperimentsRequest request) { + return sendRequestAsync(request, "/Experiments", HttpPost, AddExperimentsResponse.class, (r, h) -> fallbackService.get().addExperimentsAsync(r, h), null); + } + + public Future addExperimentsAsync(AddExperimentsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Experiments", HttpPost, AddExperimentsResponse.class, (r, h) -> fallbackService.get().addExperimentsAsync(r, h), asyncHandler); + } + + + public DeleteExperimentsResponse deleteExperiments(DeleteExperimentsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteExperimentsResponse response = sendRequest(request, "/Experiments", HttpDelete, DeleteExperimentsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteExperiments(request); + } + + return response; + } + + public Response deleteExperimentsAsync(DeleteExperimentsRequest request) { + return sendRequestAsync(request, "/Experiments", HttpDelete, DeleteExperimentsResponse.class, (r, h) -> fallbackService.get().deleteExperimentsAsync(r, h), null); + } + + public Future deleteExperimentsAsync(DeleteExperimentsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Experiments", HttpDelete, DeleteExperimentsResponse.class, (r, h) -> fallbackService.get().deleteExperimentsAsync(r, h), asyncHandler); + } + + + public UpdateExperimentsResponse updateExperiments(UpdateExperimentsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateExperimentsResponse response = sendRequest(request, "/Experiments", HttpPut, UpdateExperimentsResponse.class); + + if (response == null) { + response = fallbackService.get().updateExperiments(request); + } + + return response; + } + + public Response updateExperimentsAsync(UpdateExperimentsRequest request) { + return sendRequestAsync(request, "/Experiments", HttpPut, UpdateExperimentsResponse.class, (r, h) -> fallbackService.get().updateExperimentsAsync(r, h), null); + } + + public Future updateExperimentsAsync(UpdateExperimentsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Experiments", HttpPut, UpdateExperimentsResponse.class, (r, h) -> fallbackService.get().updateExperimentsAsync(r, h), asyncHandler); + } + + + public GetExperimentsByIdsResponse getExperimentsByIds(GetExperimentsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetExperimentsByIdsResponse response = sendRequest(request, "/Experiments/QueryByIds", HttpPost, GetExperimentsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getExperimentsByIds(request); + } + + return response; + } + + public Response getExperimentsByIdsAsync(GetExperimentsByIdsRequest request) { + return sendRequestAsync(request, "/Experiments/QueryByIds", HttpPost, GetExperimentsByIdsResponse.class, (r, h) -> fallbackService.get().getExperimentsByIdsAsync(r, h), null); + } + + public Future getExperimentsByIdsAsync(GetExperimentsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Experiments/QueryByIds", HttpPost, GetExperimentsByIdsResponse.class, (r, h) -> fallbackService.get().getExperimentsByIdsAsync(r, h), asyncHandler); + } + + + public GetProfileDataFileUrlResponse getProfileDataFileUrl(GetProfileDataFileUrlRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetProfileDataFileUrlResponse response = sendRequest(request, "/ProfileDataFileUrl/Query", HttpPost, GetProfileDataFileUrlResponse.class); + + if (response == null) { + response = fallbackService.get().getProfileDataFileUrl(request); + } + + return response; + } + + public Response getProfileDataFileUrlAsync(GetProfileDataFileUrlRequest request) { + return sendRequestAsync(request, "/ProfileDataFileUrl/Query", HttpPost, GetProfileDataFileUrlResponse.class, (r, h) -> fallbackService.get().getProfileDataFileUrlAsync(r, h), null); + } + + public Future getProfileDataFileUrlAsync(GetProfileDataFileUrlRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ProfileDataFileUrl/Query", HttpPost, GetProfileDataFileUrlResponse.class, (r, h) -> fallbackService.get().getProfileDataFileUrlAsync(r, h), asyncHandler); + } + + + public SearchCompaniesResponse searchCompanies(SearchCompaniesRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + SearchCompaniesResponse response = sendRequest(request, "/Companies/Search", HttpPost, SearchCompaniesResponse.class); + + if (response == null) { + response = fallbackService.get().searchCompanies(request); + } + + return response; + } + + public Response searchCompaniesAsync(SearchCompaniesRequest request) { + return sendRequestAsync(request, "/Companies/Search", HttpPost, SearchCompaniesResponse.class, (r, h) -> fallbackService.get().searchCompaniesAsync(r, h), null); + } + + public Future searchCompaniesAsync(SearchCompaniesRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Companies/Search", HttpPost, SearchCompaniesResponse.class, (r, h) -> fallbackService.get().searchCompaniesAsync(r, h), asyncHandler); + } + + + public GetFileImportUploadUrlResponse getFileImportUploadUrl(GetFileImportUploadUrlRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetFileImportUploadUrlResponse response = sendRequest(request, "/FileImportUploadUrl/Query", HttpPost, GetFileImportUploadUrlResponse.class); + + if (response == null) { + response = fallbackService.get().getFileImportUploadUrl(request); + } + + return response; + } + + public Response getFileImportUploadUrlAsync(GetFileImportUploadUrlRequest request) { + return sendRequestAsync(request, "/FileImportUploadUrl/Query", HttpPost, GetFileImportUploadUrlResponse.class, (r, h) -> fallbackService.get().getFileImportUploadUrlAsync(r, h), null); + } + + public Future getFileImportUploadUrlAsync(GetFileImportUploadUrlRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/FileImportUploadUrl/Query", HttpPost, GetFileImportUploadUrlResponse.class, (r, h) -> fallbackService.get().getFileImportUploadUrlAsync(r, h), asyncHandler); + } + + + public AddImportJobsResponse addImportJobs(AddImportJobsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddImportJobsResponse response = sendRequest(request, "/ImportJobs", HttpPost, AddImportJobsResponse.class); + + if (response == null) { + response = fallbackService.get().addImportJobs(request); + } + + return response; + } + + public Response addImportJobsAsync(AddImportJobsRequest request) { + return sendRequestAsync(request, "/ImportJobs", HttpPost, AddImportJobsResponse.class, (r, h) -> fallbackService.get().addImportJobsAsync(r, h), null); + } + + public Future addImportJobsAsync(AddImportJobsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ImportJobs", HttpPost, AddImportJobsResponse.class, (r, h) -> fallbackService.get().addImportJobsAsync(r, h), asyncHandler); + } + + + public GetImportResultsResponse getImportResults(GetImportResultsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetImportResultsResponse response = sendRequest(request, "/ImportResults/Query", HttpPost, GetImportResultsResponse.class); + + if (response == null) { + response = fallbackService.get().getImportResults(request); + } + + return response; + } + + public Response getImportResultsAsync(GetImportResultsRequest request) { + return sendRequestAsync(request, "/ImportResults/Query", HttpPost, GetImportResultsResponse.class, (r, h) -> fallbackService.get().getImportResultsAsync(r, h), null); + } + + public Future getImportResultsAsync(GetImportResultsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ImportResults/Query", HttpPost, GetImportResultsResponse.class, (r, h) -> fallbackService.get().getImportResultsAsync(r, h), asyncHandler); + } + + + public GetImportJobsByIdsResponse getImportJobsByIds(GetImportJobsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetImportJobsByIdsResponse response = sendRequest(request, "/ImportJobs/QueryByIds", HttpPost, GetImportJobsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getImportJobsByIds(request); + } + + return response; + } + + public Response getImportJobsByIdsAsync(GetImportJobsByIdsRequest request) { + return sendRequestAsync(request, "/ImportJobs/QueryByIds", HttpPost, GetImportJobsByIdsResponse.class, (r, h) -> fallbackService.get().getImportJobsByIdsAsync(r, h), null); + } + + public Future getImportJobsByIdsAsync(GetImportJobsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ImportJobs/QueryByIds", HttpPost, GetImportJobsByIdsResponse.class, (r, h) -> fallbackService.get().getImportJobsByIdsAsync(r, h), asyncHandler); + } + + + public DeleteImportJobsResponse deleteImportJobs(DeleteImportJobsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteImportJobsResponse response = sendRequest(request, "/ImportJobs", HttpDelete, DeleteImportJobsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteImportJobs(request); + } + + return response; + } + + public Response deleteImportJobsAsync(DeleteImportJobsRequest request) { + return sendRequestAsync(request, "/ImportJobs", HttpDelete, DeleteImportJobsResponse.class, (r, h) -> fallbackService.get().deleteImportJobsAsync(r, h), null); + } + + public Future deleteImportJobsAsync(DeleteImportJobsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ImportJobs", HttpDelete, DeleteImportJobsResponse.class, (r, h) -> fallbackService.get().deleteImportJobsAsync(r, h), asyncHandler); + } + + + public GetImportEntityIdsMappingResponse getImportEntityIdsMapping(GetImportEntityIdsMappingRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetImportEntityIdsMappingResponse response = sendRequest(request, "/ImportEntityIdsMapping/Query", HttpPost, GetImportEntityIdsMappingResponse.class); + + if (response == null) { + response = fallbackService.get().getImportEntityIdsMapping(request); + } + + return response; + } + + public Response getImportEntityIdsMappingAsync(GetImportEntityIdsMappingRequest request) { + return sendRequestAsync(request, "/ImportEntityIdsMapping/Query", HttpPost, GetImportEntityIdsMappingResponse.class, (r, h) -> fallbackService.get().getImportEntityIdsMappingAsync(r, h), null); + } + + public Future getImportEntityIdsMappingAsync(GetImportEntityIdsMappingRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ImportEntityIdsMapping/Query", HttpPost, GetImportEntityIdsMappingResponse.class, (r, h) -> fallbackService.get().getImportEntityIdsMappingAsync(r, h), asyncHandler); + } + + + public UpdateImportJobsResponse updateImportJobs(UpdateImportJobsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateImportJobsResponse response = sendRequest(request, "/ImportJobs", HttpPut, UpdateImportJobsResponse.class); + + if (response == null) { + response = fallbackService.get().updateImportJobs(request); + } + + return response; + } + + public Response updateImportJobsAsync(UpdateImportJobsRequest request) { + return sendRequestAsync(request, "/ImportJobs", HttpPut, UpdateImportJobsResponse.class, (r, h) -> fallbackService.get().updateImportJobsAsync(r, h), null); + } + + public Future updateImportJobsAsync(UpdateImportJobsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/ImportJobs", HttpPut, UpdateImportJobsResponse.class, (r, h) -> fallbackService.get().updateImportJobsAsync(r, h), asyncHandler); + } + + + public AddVideosResponse addVideos(AddVideosRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddVideosResponse response = sendRequest(request, "/Videos", HttpPost, AddVideosResponse.class); + + if (response == null) { + response = fallbackService.get().addVideos(request); + } + + return response; + } + + public Response addVideosAsync(AddVideosRequest request) { + return sendRequestAsync(request, "/Videos", HttpPost, AddVideosResponse.class, (r, h) -> fallbackService.get().addVideosAsync(r, h), null); + } + + public Future addVideosAsync(AddVideosRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Videos", HttpPost, AddVideosResponse.class, (r, h) -> fallbackService.get().addVideosAsync(r, h), asyncHandler); + } + + + public DeleteVideosResponse deleteVideos(DeleteVideosRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteVideosResponse response = sendRequest(request, "/Videos", HttpDelete, DeleteVideosResponse.class); + + if (response == null) { + response = fallbackService.get().deleteVideos(request); + } + + return response; + } + + public Response deleteVideosAsync(DeleteVideosRequest request) { + return sendRequestAsync(request, "/Videos", HttpDelete, DeleteVideosResponse.class, (r, h) -> fallbackService.get().deleteVideosAsync(r, h), null); + } + + public Future deleteVideosAsync(DeleteVideosRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Videos", HttpDelete, DeleteVideosResponse.class, (r, h) -> fallbackService.get().deleteVideosAsync(r, h), asyncHandler); + } + + + public GetVideosByIdsResponse getVideosByIds(GetVideosByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetVideosByIdsResponse response = sendRequest(request, "/Videos/QueryByIds", HttpPost, GetVideosByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getVideosByIds(request); + } + + return response; + } + + public Response getVideosByIdsAsync(GetVideosByIdsRequest request) { + return sendRequestAsync(request, "/Videos/QueryByIds", HttpPost, GetVideosByIdsResponse.class, (r, h) -> fallbackService.get().getVideosByIdsAsync(r, h), null); + } + + public Future getVideosByIdsAsync(GetVideosByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Videos/QueryByIds", HttpPost, GetVideosByIdsResponse.class, (r, h) -> fallbackService.get().getVideosByIdsAsync(r, h), asyncHandler); + } + + + public UpdateVideosResponse updateVideos(UpdateVideosRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateVideosResponse response = sendRequest(request, "/Videos", HttpPut, UpdateVideosResponse.class); + + if (response == null) { + response = fallbackService.get().updateVideos(request); + } + + return response; + } + + public Response updateVideosAsync(UpdateVideosRequest request) { + return sendRequestAsync(request, "/Videos", HttpPut, UpdateVideosResponse.class, (r, h) -> fallbackService.get().updateVideosAsync(r, h), null); + } + + public Future updateVideosAsync(UpdateVideosRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/Videos", HttpPut, UpdateVideosResponse.class, (r, h) -> fallbackService.get().updateVideosAsync(r, h), asyncHandler); + } + + + public AddCampaignConversionGoalsResponse addCampaignConversionGoals(AddCampaignConversionGoalsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddCampaignConversionGoalsResponse response = sendRequest(request, "/CampaignConversionGoals", HttpPost, AddCampaignConversionGoalsResponse.class); + + if (response == null) { + response = fallbackService.get().addCampaignConversionGoals(request); + } + + return response; + } + + public Response addCampaignConversionGoalsAsync(AddCampaignConversionGoalsRequest request) { + return sendRequestAsync(request, "/CampaignConversionGoals", HttpPost, AddCampaignConversionGoalsResponse.class, (r, h) -> fallbackService.get().addCampaignConversionGoalsAsync(r, h), null); + } + + public Future addCampaignConversionGoalsAsync(AddCampaignConversionGoalsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/CampaignConversionGoals", HttpPost, AddCampaignConversionGoalsResponse.class, (r, h) -> fallbackService.get().addCampaignConversionGoalsAsync(r, h), asyncHandler); + } + + + public DeleteCampaignConversionGoalsResponse deleteCampaignConversionGoals(DeleteCampaignConversionGoalsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteCampaignConversionGoalsResponse response = sendRequest(request, "/CampaignConversionGoals", HttpDelete, DeleteCampaignConversionGoalsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteCampaignConversionGoals(request); + } + + return response; + } + + public Response deleteCampaignConversionGoalsAsync(DeleteCampaignConversionGoalsRequest request) { + return sendRequestAsync(request, "/CampaignConversionGoals", HttpDelete, DeleteCampaignConversionGoalsResponse.class, (r, h) -> fallbackService.get().deleteCampaignConversionGoalsAsync(r, h), null); + } + + public Future deleteCampaignConversionGoalsAsync(DeleteCampaignConversionGoalsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/CampaignConversionGoals", HttpDelete, DeleteCampaignConversionGoalsResponse.class, (r, h) -> fallbackService.get().deleteCampaignConversionGoalsAsync(r, h), asyncHandler); + } + + + public AddDataExclusionsResponse addDataExclusions(AddDataExclusionsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddDataExclusionsResponse response = sendRequest(request, "/DataExclusions", HttpPost, AddDataExclusionsResponse.class); + + if (response == null) { + response = fallbackService.get().addDataExclusions(request); + } + + return response; + } + + public Response addDataExclusionsAsync(AddDataExclusionsRequest request) { + return sendRequestAsync(request, "/DataExclusions", HttpPost, AddDataExclusionsResponse.class, (r, h) -> fallbackService.get().addDataExclusionsAsync(r, h), null); + } + + public Future addDataExclusionsAsync(AddDataExclusionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/DataExclusions", HttpPost, AddDataExclusionsResponse.class, (r, h) -> fallbackService.get().addDataExclusionsAsync(r, h), asyncHandler); + } + + + public UpdateDataExclusionsResponse updateDataExclusions(UpdateDataExclusionsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateDataExclusionsResponse response = sendRequest(request, "/DataExclusions", HttpPut, UpdateDataExclusionsResponse.class); + + if (response == null) { + response = fallbackService.get().updateDataExclusions(request); + } + + return response; + } + + public Response updateDataExclusionsAsync(UpdateDataExclusionsRequest request) { + return sendRequestAsync(request, "/DataExclusions", HttpPut, UpdateDataExclusionsResponse.class, (r, h) -> fallbackService.get().updateDataExclusionsAsync(r, h), null); + } + + public Future updateDataExclusionsAsync(UpdateDataExclusionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/DataExclusions", HttpPut, UpdateDataExclusionsResponse.class, (r, h) -> fallbackService.get().updateDataExclusionsAsync(r, h), asyncHandler); + } + + + public DeleteDataExclusionsResponse deleteDataExclusions(DeleteDataExclusionsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteDataExclusionsResponse response = sendRequest(request, "/DataExclusions", HttpDelete, DeleteDataExclusionsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteDataExclusions(request); + } + + return response; + } + + public Response deleteDataExclusionsAsync(DeleteDataExclusionsRequest request) { + return sendRequestAsync(request, "/DataExclusions", HttpDelete, DeleteDataExclusionsResponse.class, (r, h) -> fallbackService.get().deleteDataExclusionsAsync(r, h), null); + } + + public Future deleteDataExclusionsAsync(DeleteDataExclusionsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/DataExclusions", HttpDelete, DeleteDataExclusionsResponse.class, (r, h) -> fallbackService.get().deleteDataExclusionsAsync(r, h), asyncHandler); + } + + + public GetDataExclusionsByIdsResponse getDataExclusionsByIds(GetDataExclusionsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetDataExclusionsByIdsResponse response = sendRequest(request, "/DataExclusions/QueryByIds", HttpPost, GetDataExclusionsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getDataExclusionsByIds(request); + } + + return response; + } + + public Response getDataExclusionsByIdsAsync(GetDataExclusionsByIdsRequest request) { + return sendRequestAsync(request, "/DataExclusions/QueryByIds", HttpPost, GetDataExclusionsByIdsResponse.class, (r, h) -> fallbackService.get().getDataExclusionsByIdsAsync(r, h), null); + } + + public Future getDataExclusionsByIdsAsync(GetDataExclusionsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/DataExclusions/QueryByIds", HttpPost, GetDataExclusionsByIdsResponse.class, (r, h) -> fallbackService.get().getDataExclusionsByIdsAsync(r, h), asyncHandler); + } + + + public GetDataExclusionsByAccountIdResponse getDataExclusionsByAccountId(GetDataExclusionsByAccountIdRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetDataExclusionsByAccountIdResponse response = sendRequest(request, "/DataExclusions/QueryByAccountId", HttpPost, GetDataExclusionsByAccountIdResponse.class); + + if (response == null) { + response = fallbackService.get().getDataExclusionsByAccountId(request); + } + + return response; + } + + public Response getDataExclusionsByAccountIdAsync(GetDataExclusionsByAccountIdRequest request) { + return sendRequestAsync(request, "/DataExclusions/QueryByAccountId", HttpPost, GetDataExclusionsByAccountIdResponse.class, (r, h) -> fallbackService.get().getDataExclusionsByAccountIdAsync(r, h), null); + } + + public Future getDataExclusionsByAccountIdAsync(GetDataExclusionsByAccountIdRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/DataExclusions/QueryByAccountId", HttpPost, GetDataExclusionsByAccountIdResponse.class, (r, h) -> fallbackService.get().getDataExclusionsByAccountIdAsync(r, h), asyncHandler); + } + + + public AddSeasonalityAdjustmentsResponse addSeasonalityAdjustments(AddSeasonalityAdjustmentsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + AddSeasonalityAdjustmentsResponse response = sendRequest(request, "/SeasonalityAdjustments", HttpPost, AddSeasonalityAdjustmentsResponse.class); + + if (response == null) { + response = fallbackService.get().addSeasonalityAdjustments(request); + } + + return response; + } + + public Response addSeasonalityAdjustmentsAsync(AddSeasonalityAdjustmentsRequest request) { + return sendRequestAsync(request, "/SeasonalityAdjustments", HttpPost, AddSeasonalityAdjustmentsResponse.class, (r, h) -> fallbackService.get().addSeasonalityAdjustmentsAsync(r, h), null); + } + + public Future addSeasonalityAdjustmentsAsync(AddSeasonalityAdjustmentsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/SeasonalityAdjustments", HttpPost, AddSeasonalityAdjustmentsResponse.class, (r, h) -> fallbackService.get().addSeasonalityAdjustmentsAsync(r, h), asyncHandler); + } + + + public UpdateSeasonalityAdjustmentsResponse updateSeasonalityAdjustments(UpdateSeasonalityAdjustmentsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + UpdateSeasonalityAdjustmentsResponse response = sendRequest(request, "/SeasonalityAdjustments", HttpPut, UpdateSeasonalityAdjustmentsResponse.class); + + if (response == null) { + response = fallbackService.get().updateSeasonalityAdjustments(request); + } + + return response; + } + + public Response updateSeasonalityAdjustmentsAsync(UpdateSeasonalityAdjustmentsRequest request) { + return sendRequestAsync(request, "/SeasonalityAdjustments", HttpPut, UpdateSeasonalityAdjustmentsResponse.class, (r, h) -> fallbackService.get().updateSeasonalityAdjustmentsAsync(r, h), null); + } + + public Future updateSeasonalityAdjustmentsAsync(UpdateSeasonalityAdjustmentsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/SeasonalityAdjustments", HttpPut, UpdateSeasonalityAdjustmentsResponse.class, (r, h) -> fallbackService.get().updateSeasonalityAdjustmentsAsync(r, h), asyncHandler); + } + + + public DeleteSeasonalityAdjustmentsResponse deleteSeasonalityAdjustments(DeleteSeasonalityAdjustmentsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + DeleteSeasonalityAdjustmentsResponse response = sendRequest(request, "/SeasonalityAdjustments", HttpDelete, DeleteSeasonalityAdjustmentsResponse.class); + + if (response == null) { + response = fallbackService.get().deleteSeasonalityAdjustments(request); + } + + return response; + } + + public Response deleteSeasonalityAdjustmentsAsync(DeleteSeasonalityAdjustmentsRequest request) { + return sendRequestAsync(request, "/SeasonalityAdjustments", HttpDelete, DeleteSeasonalityAdjustmentsResponse.class, (r, h) -> fallbackService.get().deleteSeasonalityAdjustmentsAsync(r, h), null); + } + + public Future deleteSeasonalityAdjustmentsAsync(DeleteSeasonalityAdjustmentsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/SeasonalityAdjustments", HttpDelete, DeleteSeasonalityAdjustmentsResponse.class, (r, h) -> fallbackService.get().deleteSeasonalityAdjustmentsAsync(r, h), asyncHandler); + } + + + public GetSeasonalityAdjustmentsByIdsResponse getSeasonalityAdjustmentsByIds(GetSeasonalityAdjustmentsByIdsRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetSeasonalityAdjustmentsByIdsResponse response = sendRequest(request, "/SeasonalityAdjustments/QueryByIds", HttpPost, GetSeasonalityAdjustmentsByIdsResponse.class); + + if (response == null) { + response = fallbackService.get().getSeasonalityAdjustmentsByIds(request); + } + + return response; + } + + public Response getSeasonalityAdjustmentsByIdsAsync(GetSeasonalityAdjustmentsByIdsRequest request) { + return sendRequestAsync(request, "/SeasonalityAdjustments/QueryByIds", HttpPost, GetSeasonalityAdjustmentsByIdsResponse.class, (r, h) -> fallbackService.get().getSeasonalityAdjustmentsByIdsAsync(r, h), null); + } + + public Future getSeasonalityAdjustmentsByIdsAsync(GetSeasonalityAdjustmentsByIdsRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/SeasonalityAdjustments/QueryByIds", HttpPost, GetSeasonalityAdjustmentsByIdsResponse.class, (r, h) -> fallbackService.get().getSeasonalityAdjustmentsByIdsAsync(r, h), asyncHandler); + } + + + public GetSeasonalityAdjustmentsByAccountIdResponse getSeasonalityAdjustmentsByAccountId(GetSeasonalityAdjustmentsByAccountIdRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + GetSeasonalityAdjustmentsByAccountIdResponse response = sendRequest(request, "/SeasonalityAdjustments/QueryByAccountId", HttpPost, GetSeasonalityAdjustmentsByAccountIdResponse.class); + + if (response == null) { + response = fallbackService.get().getSeasonalityAdjustmentsByAccountId(request); + } + + return response; + } + + public Response getSeasonalityAdjustmentsByAccountIdAsync(GetSeasonalityAdjustmentsByAccountIdRequest request) { + return sendRequestAsync(request, "/SeasonalityAdjustments/QueryByAccountId", HttpPost, GetSeasonalityAdjustmentsByAccountIdResponse.class, (r, h) -> fallbackService.get().getSeasonalityAdjustmentsByAccountIdAsync(r, h), null); + } + + public Future getSeasonalityAdjustmentsByAccountIdAsync(GetSeasonalityAdjustmentsByAccountIdRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/SeasonalityAdjustments/QueryByAccountId", HttpPost, GetSeasonalityAdjustmentsByAccountIdResponse.class, (r, h) -> fallbackService.get().getSeasonalityAdjustmentsByAccountIdAsync(r, h), asyncHandler); + } + + } \ No newline at end of file diff --git a/src/main/java/com/microsoft/bingads/internal/restful/HttpClientFactory.java b/src/main/java/com/microsoft/bingads/internal/restful/HttpClientFactory.java new file mode 100644 index 0000000000..5b2a301501 --- /dev/null +++ b/src/main/java/com/microsoft/bingads/internal/restful/HttpClientFactory.java @@ -0,0 +1,107 @@ +package com.microsoft.bingads.internal.restful; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +import org.apache.cxf.transport.common.gzip.GZIPFeature; +import com.microsoft.bingads.ApiEnvironment; +import com.microsoft.bingads.InternalException; +import com.microsoft.bingads.internal.CxfUtils; +import com.microsoft.bingads.internal.ServiceFactoryImpl; +import com.microsoft.bingads.internal.ServiceInfo; +import com.microsoft.bingads.internal.ServiceUtils; + +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.WebTarget; + +class HttpClientFactory { + private static final Map WebTargetByService = initialize(); + + public static WebTarget get(Class serviceInterface, ApiEnvironment environment) { + String key = getKey(serviceInterface, environment); + + return WebTargetByService.get(key); + } + + private static Map initialize() { + Client client = ClientBuilder.newBuilder() + .connectTimeout(1, TimeUnit.MINUTES) + .readTimeout(10, TimeUnit.MINUTES) + .executorService(Executors.newCachedThreadPool( + (Runnable r) -> { + Thread t = new Thread(r); + t.setDaemon(true); + return t; + } + )) + .property("jersey.config.client.suppressHttpComplianceValidation", true) // allow DELETE requests with body + .build(); + + boolean isCxf = client.getClass().getName().contains("org.apache.cxf"); + + if (isCxf) { + client.register(new GZIPFeature()); + + return CxfUtils.runOnNewBus( + () -> initializeWebTargets(client), + (logging) -> { + Set headerNames = new HashSet<>(); + + headerNames.add("AuthenticationToken"); + headerNames.add("Password"); + + logging.setSensitiveProtocolHeaderNames(headerNames); + } + ); + } + + return initializeWebTargets(client); + } + + private static String getKey(Class serviceInterface, ApiEnvironment environment) { + return serviceInterface.getName() + "_" + environment.toString(); + } + + private static Map initializeWebTargets(Client client) { + Map webTargets = new HashMap<>(); + + for (ApiEnvironment environment : Arrays.asList(ApiEnvironment.PRODUCTION, ApiEnvironment.SANDBOX)) { + for (Map.Entry, ServiceInfo> endpoint : ServiceFactoryImpl.endpoints.entrySet()) { + Class serviceInterface = endpoint.getKey(); + + ServiceInfo serviceInfo = endpoint.getValue(); + + String serviceUrl = ServiceUtils.getServiceUrlFromConfig(serviceInterface); + + if (serviceUrl == null) { + serviceUrl = serviceInfo.GetUrl(environment); + } + + URL soapUrl; + try { + soapUrl = new URL(serviceUrl); + } catch (MalformedURLException e) { + throw new InternalException(e); + } + + String restUrl = soapUrl.getProtocol() + "://" + soapUrl.getAuthority() + "/" + serviceInfo.getServiceNameAndVersion() + "/"; + + String key = getKey(serviceInterface, environment); + + WebTarget webTarget = client.target(restUrl); + + webTargets.put(key, webTarget); + } + } + + return webTargets; + } +} \ No newline at end of file diff --git a/src/main/java/com/microsoft/bingads/internal/restful/ReportingRestfulServiceClient.java b/src/main/java/com/microsoft/bingads/internal/restful/ReportingRestfulServiceClient.java deleted file mode 100644 index 551cff366a..0000000000 --- a/src/main/java/com/microsoft/bingads/internal/restful/ReportingRestfulServiceClient.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.microsoft.bingads.internal.restful; - -import java.io.IOException; -import java.net.URISyntaxException; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; - -import jakarta.xml.ws.AsyncHandler; -import jakarta.xml.ws.Response; - -import com.microsoft.bingads.ApiEnvironment; -import com.microsoft.bingads.AuthorizationData; -import com.microsoft.bingads.v13.reporting.*; - -public class ReportingRestfulServiceClient extends RestfulServiceClient { - - public ReportingRestfulServiceClient(AuthorizationData authData, ApiEnvironment env, Class serviceInterface) { - super(authData, env, serviceInterface); - } - - - public SubmitGenerateReportResponse submitGenerateReport(SubmitGenerateReportRequest request) - throws Exception { - return sendRequest(request, "/GenerateReport/Submit", HttpPost, SubmitGenerateReportResponse.class); - } - - public Response submitGenerateReportAsync(SubmitGenerateReportRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/GenerateReport/Submit", HttpPost, SubmitGenerateReportResponse.class); - } - - public Future submitGenerateReportAsync(SubmitGenerateReportRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/GenerateReport/Submit", HttpPost, SubmitGenerateReportResponse.class, asyncHandler); - } - - - public PollGenerateReportResponse pollGenerateReport(PollGenerateReportRequest request) - throws Exception { - return sendRequest(request, "/GenerateReport/Poll", HttpPost, PollGenerateReportResponse.class); - } - - public Response pollGenerateReportAsync(PollGenerateReportRequest request) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/GenerateReport/Poll", HttpPost, PollGenerateReportResponse.class); - } - - public Future pollGenerateReportAsync(PollGenerateReportRequest request, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException, ExecutionException { - return sendRequestAsync(request, "/GenerateReport/Poll", HttpPost, PollGenerateReportResponse.class, asyncHandler); - } - - } \ No newline at end of file diff --git a/src/main/java/com/microsoft/bingads/internal/restful/ReportingService.java b/src/main/java/com/microsoft/bingads/internal/restful/ReportingService.java new file mode 100644 index 0000000000..d240cfb5ae --- /dev/null +++ b/src/main/java/com/microsoft/bingads/internal/restful/ReportingService.java @@ -0,0 +1,126 @@ +package com.microsoft.bingads.internal.restful; + +import java.util.Map; +import java.util.concurrent.Future; +import java.util.function.BiFunction; +import java.util.function.Supplier; + +import jakarta.xml.ws.AsyncHandler; +import jakarta.xml.ws.Response; + +import com.microsoft.bingads.ApiEnvironment; +import com.microsoft.bingads.InternalException; +import com.microsoft.bingads.v13.reporting.*; + +public class ReportingService extends RestfulServiceClient implements IReportingService { + + private Supplier fallbackService; + + public ReportingService(Map headers, ApiEnvironment env, Supplier fallbackService) { + super(headers, env, IReportingService.class); + + this.fallbackService = fallbackService; + } + + Exception processFaultDetail(ApplicationFault faultDetail, boolean shouldThrow) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + String message = getFaultMessage(faultDetail.getTrackingId()); + + if (faultDetail instanceof AdApiFaultDetail) { + AdApiFaultDetail_Exception ex = new AdApiFaultDetail_Exception(message, (AdApiFaultDetail)faultDetail); + + if (shouldThrow) { + throw ex; + } + + return ex; + } + + if (faultDetail instanceof ApiFaultDetail) { + ApiFaultDetail_Exception ex = new ApiFaultDetail_Exception(message, (ApiFaultDetail)faultDetail); + + if (shouldThrow) { + throw ex; + } + + return ex; + } + + if (shouldThrow) { + throw new RuntimeException("Unknown fault type: " + faultDetail.getClass()); + } + + return null; + } + + protected Resp sendRequest(Req request, String entityEndpoint, String verb, Class respClass) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + ResponseInfo responseInfo = getResponseInfo(request, entityEndpoint, verb, respClass, ApplicationFault.class); + + if (responseInfo == null) { + return null; + } + + ApplicationFault faultDetail = responseInfo.getFaultDetail(); + + if (faultDetail != null) { + processFaultDetail(faultDetail, true); + } + + return responseInfo.getResponse(); + } + + private Exception getFaultException(ApplicationFault faultDetail) { + try { + Exception ex = processFaultDetail(faultDetail, false); + + return ex; + } catch (Exception ex) { + throw new InternalException(ex); + } + } + + protected Response sendRequestAsync(Req request, String entityEndpoint, String verb, Class respClass, BiFunction, Future> soapMethod, AsyncHandler handler) { + return processRequestAsync(request, entityEndpoint, verb, respClass, ApplicationFault.class, x -> getFaultException(x), soapMethod, handler); + } + + public SubmitGenerateReportResponse submitGenerateReport(SubmitGenerateReportRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + SubmitGenerateReportResponse response = sendRequest(request, "/GenerateReport/Submit", HttpPost, SubmitGenerateReportResponse.class); + + if (response == null) { + response = fallbackService.get().submitGenerateReport(request); + } + + return response; + } + + public Response submitGenerateReportAsync(SubmitGenerateReportRequest request) { + return sendRequestAsync(request, "/GenerateReport/Submit", HttpPost, SubmitGenerateReportResponse.class, (r, h) -> fallbackService.get().submitGenerateReportAsync(r, h), null); + } + + public Future submitGenerateReportAsync(SubmitGenerateReportRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/GenerateReport/Submit", HttpPost, SubmitGenerateReportResponse.class, (r, h) -> fallbackService.get().submitGenerateReportAsync(r, h), asyncHandler); + } + + + public PollGenerateReportResponse pollGenerateReport(PollGenerateReportRequest request) + throws AdApiFaultDetail_Exception, ApiFaultDetail_Exception { + PollGenerateReportResponse response = sendRequest(request, "/GenerateReport/Poll", HttpPost, PollGenerateReportResponse.class); + + if (response == null) { + response = fallbackService.get().pollGenerateReport(request); + } + + return response; + } + + public Response pollGenerateReportAsync(PollGenerateReportRequest request) { + return sendRequestAsync(request, "/GenerateReport/Poll", HttpPost, PollGenerateReportResponse.class, (r, h) -> fallbackService.get().pollGenerateReportAsync(r, h), null); + } + + public Future pollGenerateReportAsync(PollGenerateReportRequest request, AsyncHandler asyncHandler) { + return sendRequestAsync(request, "/GenerateReport/Poll", HttpPost, PollGenerateReportResponse.class, (r, h) -> fallbackService.get().pollGenerateReportAsync(r, h), asyncHandler); + } + + } \ No newline at end of file diff --git a/src/main/java/com/microsoft/bingads/internal/restful/RestfulServiceClient.java b/src/main/java/com/microsoft/bingads/internal/restful/RestfulServiceClient.java index 37da00e64d..1a27ce47ac 100644 --- a/src/main/java/com/microsoft/bingads/internal/restful/RestfulServiceClient.java +++ b/src/main/java/com/microsoft/bingads/internal/restful/RestfulServiceClient.java @@ -1,235 +1,140 @@ package com.microsoft.bingads.internal.restful; import java.io.IOException; -import java.lang.reflect.Method; -import java.net.URI; -import java.net.URISyntaxException; +import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; - -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpPut; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.StringEntity; -import org.apache.http.Header; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; -import org.apache.http.impl.nio.client.CloseableHttpAsyncClient; -import org.apache.http.impl.nio.client.HttpAsyncClients; - +import java.util.function.BiFunction; +import java.util.function.Function; + +import jakarta.ws.rs.client.AsyncInvoker; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.client.Invocation; +import jakarta.ws.rs.client.InvocationCallback; +import jakarta.ws.rs.client.WebTarget; import jakarta.xml.ws.AsyncHandler; import jakarta.xml.ws.Response; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; import com.microsoft.bingads.ApiEnvironment; -import com.microsoft.bingads.AuthorizationData; -import com.microsoft.bingads.HeadersImpl; -import com.microsoft.bingads.internal.ServiceInfo; +import com.microsoft.bingads.AsyncCallback; +import com.microsoft.bingads.InternalException; +import com.microsoft.bingads.internal.ResultFuture; +import com.microsoft.bingads.internal.ServiceFactoryImpl; import com.microsoft.bingads.internal.ServiceUtils; import com.microsoft.bingads.internal.restful.adaptor.AdaptorUtil; -public class RestfulServiceClient extends RestfulServiceClientExtension{ +class ResponseInfo { + private TResponse response; + + public TResponse getResponse() { + return response; + } + + public void setResponse(TResponse response) { + this.response = response; + } + + private TFaultDetail faultDetail; + + public TFaultDetail getFaultDetail() { + return faultDetail; + } + + public void setFaultDetail(TFaultDetail faultDetail) { + this.faultDetail = faultDetail; + } +} + +class RestfulServiceClient { protected static final String HttpPost = "POST"; protected static final String HttpPut = "PUT"; protected static final String HttpDelete = "DELETE"; - protected AuthorizationData authorizationData; + protected Map headers; protected ApiEnvironment environment; - - protected Object soapService; - private Class serviceInterface; - - private ConcurrentHashMap retryAfter = new ConcurrentHashMap(); + private Class serviceInterface; - private ArrayList statusCodesForApplicationFault = new ArrayList(Arrays.asList(400, 401, 403, 429, 500)); + private static final ConcurrentHashMap, Calendar> retryAfter = new ConcurrentHashMap, Calendar>(); - private ArrayList statusCodesForSwitchToSoap = new ArrayList(Arrays.asList(404, 501)); + private static final ArrayList statusCodesForApplicationFault = new ArrayList(Arrays.asList(400, 401, 403, 429, 500)); - private CloseableHttpAsyncClient asyncClient = HttpAsyncClients.createDefault(); + private static final ArrayList statusCodesForSwitchToSoap = new ArrayList(Arrays.asList(404, 501)); + + private static final String userAgent = getUserAgent(); - private CloseableHttpClient httpClient = HttpClients.custom() - .setConnectionManager(new PoolingHttpClientConnectionManager()) - .setConnectionManagerShared(true) - .build(); + private boolean enableFallbackToSoap; + + static { + com.microsoft.bingads.internal.restful.adaptor.generated.campaignmanagement.arrayOfTypes.AddMixInForArrayOfTypes.AddMixInForArrayOfTypes(); + com.microsoft.bingads.internal.restful.adaptor.generated.campaignmanagement.enums.AddMixInForEnumTypes.AddMixInForEnumTypes(); + com.microsoft.bingads.internal.restful.adaptor.generated.campaignmanagement.enums.AddMixInForComplexTypesWithEnumList.AddMixInForComplexTypesWithEnumList(); + com.microsoft.bingads.internal.restful.adaptor.generated.campaignmanagement.polymorphicTypes.AddMixInForPolymorphicTypes.AddMixInForPolymorphicTypes(); - private String userAgent; + com.microsoft.bingads.internal.restful.adaptor.generated.bulk.arrayOfTypes.AddMixInForArrayOfTypes.AddMixInForArrayOfTypes(); + com.microsoft.bingads.internal.restful.adaptor.generated.bulk.enums.AddMixInForEnumTypes.AddMixInForEnumTypes(); + com.microsoft.bingads.internal.restful.adaptor.generated.bulk.enums.AddMixInForComplexTypesWithEnumList.AddMixInForComplexTypesWithEnumList(); + com.microsoft.bingads.internal.restful.adaptor.generated.bulk.polymorphicTypes.AddMixInForPolymorphicTypes.AddMixInForPolymorphicTypes(); - private boolean enableFallbackToSoap; + com.microsoft.bingads.internal.restful.adaptor.generated.reporting.arrayOfTypes.AddMixInForArrayOfTypes.AddMixInForArrayOfTypes(); + com.microsoft.bingads.internal.restful.adaptor.generated.reporting.enums.AddMixInForEnumTypes.AddMixInForEnumTypes(); + com.microsoft.bingads.internal.restful.adaptor.generated.reporting.enums.AddMixInForComplexTypesWithEnumList.AddMixInForComplexTypesWithEnumList(); + com.microsoft.bingads.internal.restful.adaptor.generated.reporting.polymorphicTypes.AddMixInForPolymorphicTypes.AddMixInForPolymorphicTypes(); + } - protected RestfulServiceClient(AuthorizationData authData, ApiEnvironment env, Class serviceInterface) { - this.authorizationData = authData; + protected RestfulServiceClient(Map headers, ApiEnvironment env, Class serviceInterface) { + this.headers = headers; this.environment = env; this.serviceInterface = serviceInterface; this.enableFallbackToSoap = ServiceUtils.getFallbackFlag(); - this.userAgent = ServiceUtils.getUserAgent(); - switch (serviceInterface.getSimpleName()) { - case "ICampaignManagementService": - com.microsoft.bingads.internal.restful.adaptor.generated.campaignmanagement.arrayOfTypes.AddMixInForArrayOfTypes.AddMixInForArrayOfTypes(); - com.microsoft.bingads.internal.restful.adaptor.generated.campaignmanagement.enums.AddMixInForEnumTypes.AddMixInForEnumTypes(); - com.microsoft.bingads.internal.restful.adaptor.generated.campaignmanagement.enums.AddMixInForComplexTypesWithEnumList.AddMixInForComplexTypesWithEnumList(); - com.microsoft.bingads.internal.restful.adaptor.generated.campaignmanagement.polymorphicTypes.AddMixInForPolymorphicTypes.AddMixInForPolymorphicTypes(); - case "IBulkService": - com.microsoft.bingads.internal.restful.adaptor.generated.bulk.arrayOfTypes.AddMixInForArrayOfTypes.AddMixInForArrayOfTypes(); - com.microsoft.bingads.internal.restful.adaptor.generated.bulk.enums.AddMixInForEnumTypes.AddMixInForEnumTypes(); - com.microsoft.bingads.internal.restful.adaptor.generated.bulk.enums.AddMixInForComplexTypesWithEnumList.AddMixInForComplexTypesWithEnumList(); - com.microsoft.bingads.internal.restful.adaptor.generated.bulk.polymorphicTypes.AddMixInForPolymorphicTypes.AddMixInForPolymorphicTypes(); - case "IReportingService": - com.microsoft.bingads.internal.restful.adaptor.generated.reporting.arrayOfTypes.AddMixInForArrayOfTypes.AddMixInForArrayOfTypes(); - com.microsoft.bingads.internal.restful.adaptor.generated.reporting.enums.AddMixInForEnumTypes.AddMixInForEnumTypes(); - com.microsoft.bingads.internal.restful.adaptor.generated.reporting.enums.AddMixInForComplexTypesWithEnumList.AddMixInForComplexTypesWithEnumList(); - com.microsoft.bingads.internal.restful.adaptor.generated.reporting.polymorphicTypes.AddMixInForPolymorphicTypes.AddMixInForPolymorphicTypes(); - } - } - - public void setSoapService(Object soapService) - { - this.soapService = soapService; } - private String getServiceUrl(String entityEndpoint) { - String serviceUrl = ServiceUtils.getServiceUrlFromConfig(serviceInterface); + private static String getUserAgent() { + String actualUserAgent = "BingAdsSDKJava.RestApi"; - if (serviceUrl == null) { - ServiceInfo serviceInfo = endpoints.get(serviceInterface); + String clientName = ServiceUtils.getClientName(); - serviceUrl = serviceInfo.GetUrl(environment); + if (clientName != null) { + actualUserAgent += "." + clientName; } - else { - URI uri = URI.create(serviceUrl); - serviceUrl = "https://" + uri.getAuthority() + serviceNameAndVersion.get(serviceInterface); - } - - return serviceUrl + entityEndpoint; - } - - private List buildHeaders() { - List headers = new ArrayList(); - - //headers.add("Content-Type"); - //headers.add("application/json"); - headers.add("ApplicationToken"); - headers.add(authorizationData.getDeveloperToken()); - - headers.add("CustomerId"); - headers.add(Long.toString(authorizationData.getCustomerId())); - - headers.add("CustomerAccountId"); - headers.add(Long.toString(authorizationData.getAccountId())); - - headers.add("DeveloperToken"); - headers.add(authorizationData.getDeveloperToken()); - - this.authorizationData.getAuthentication().addHeaders(new HeadersImpl() { - @Override - public void addHeader(String name, String value) { - headers.add(name); - headers.add(value); - } - }); + actualUserAgent += "/" + ServiceFactoryImpl.VERSION; + + String javaVersion = System.getProperty("java.version"); - addUserAgent(headers); + if (javaVersion.matches("\\d+[\\d|\\.|\\_]*\\d+")) { + actualUserAgent += "_" + javaVersion; + } - return headers; + return actualUserAgent; } - private void addUserAgent(List headers) { - String actualUserAgent = "BingAdsSDKJava.RestApi"; - if (userAgent != null) { - actualUserAgent += "." + userAgent; - } + private Invocation.Builder asRequest(String entityEndpointPath) { + WebTarget targetForService = HttpClientFactory.get(serviceInterface, environment); + + Invocation.Builder builder = targetForService.path(entityEndpointPath).request(); - String javaVersion = System.getProperty("java.version"); - if (javaVersion.matches("\\d+[\\d|\\.|\\_]*\\d+")) { - actualUserAgent += "/" + javaVersion; + for (Map.Entry entry : headers.entrySet()) { + builder.header(entry.getKey(), entry.getValue()); } - headers.add("User-Agent"); - headers.add(actualUserAgent); - } - - private Resp callSoapMethod(Req request) throws Exception { - Method method; - Object response = null; - String[] strs = request.getClass().getName().split("\\."); - String methodName = strs[strs.length - 1]; - methodName = methodName.substring(0, 1).toLowerCase() + methodName.substring(1, methodName.length() - 7); - try { - method = soapService.getClass().getMethod(methodName, request.getClass()); - response = method.invoke(soapService, request); - } catch (Exception e) { - throw (Exception)e.getCause(); - } - return (Resp)response; - } - - private Response callSoapMethodAsync(Req request) - { - Method method; - Response response = null; - String[] strs = request.getClass().getName().split("\\."); - String methodName = strs[strs.length - 1]; - methodName = methodName.substring(0, 1).toLowerCase() + methodName.substring(1, methodName.length() - 7) + "Async"; - try { - method = soapService.getClass().getMethod(methodName, request.getClass()); - response = (Response) method.invoke(soapService, request); - } catch (Exception e) { - e.printStackTrace(); - } - - return response; - } - - private HttpEntityEnclosingRequestBase asRequest(String request, String verb, String entityEndpoint) - throws Exception { - HttpEntityEnclosingRequestBase req = null; - URI uri = new URI(getServiceUrl(entityEndpoint)); - StringEntity entity = new StringEntity(request, ContentType.APPLICATION_JSON); - List headers = buildHeaders(); - - switch (verb) { - case HttpPost: - req = new HttpPost(uri); - req.setEntity(entity); - break; - case HttpPut: - req = new HttpPut(uri); - req.setEntity(entity); - break; - case HttpDelete: - req = new HttpDeleteWithBody(uri); - req.setEntity(entity); - break; - } + builder.header("User-Agent", userAgent); - if (req != null) { - for (int i = 0; i < headers.size(); i += 2) { - req.setHeader(headers.get(i), headers.get(i + 1)); - } - } - - return req; + return builder; } - - private void SetRetryAfterTime(Header header) - { - String value = header != null ? header.getValue() : null; + + private void SetRetryAfterTime(String value) + { int delta; try { delta = Integer.parseInt(value); @@ -241,226 +146,258 @@ private void SetRetryAfterTime(Header header) retryAfter.put(serviceInterface, cal); } - protected Resp sendRequest(Req request, String entityEndpoint, String verb, Class respClass) - throws Exception { - if (retryAfter.get(serviceInterface) != null && enableFallbackToSoap - && Calendar.getInstance().before(retryAfter.get(serviceInterface))) { - return callSoapMethod(request); - } + protected ResponseInfo getResponseInfo(TRequest request, String entityEndpoint, String verb, Class responseClass, Class faultDetailClass) { + if (retryAfter.get(serviceInterface) != null && enableFallbackToSoap + && Calendar.getInstance().before(retryAfter.get(serviceInterface))) { + return null; + } - String jsonRequest = AdaptorUtil.mapper.writeValueAsString(request); - - String[] headers = buildHeaders().toArray(new String[0]); + String jsonRequest; + try { + jsonRequest = AdaptorUtil.mapper.writeValueAsString(request); + } catch (JsonProcessingException e) { + throw new InternalException(e); + } - HttpEntityEnclosingRequestBase req = asRequest(jsonRequest, verb, entityEndpoint); - CloseableHttpResponse response = httpClient.execute(req); - - int statusCode = response.getStatusLine().getStatusCode(); - Header header = response.getFirstHeader("Retry-After"); - if (statusCodesForSwitchToSoap.contains(statusCode)) { - SetRetryAfterTime(header); + Invocation.Builder builder = asRequest(entityEndpoint); + + jakarta.ws.rs.core.Response httpResponse; + + switch (verb) { + case HttpPost: + httpResponse = builder.post(Entity.json(jsonRequest)); + break; + case HttpPut: + httpResponse = builder.put(Entity.json(jsonRequest)); + break; + case HttpDelete: + httpResponse = builder.method("DELETE", Entity.json(jsonRequest)); + break; + default: + throw new InternalException("Unknown HTTP verb: " + verb); + } + + int statusCode = httpResponse.getStatus(); + + if (statusCodesForSwitchToSoap.contains(statusCode) && enableFallbackToSoap) { + SetRetryAfterTime(httpResponse.getHeaderString("RetryAfter")); + + httpResponse.close(); + + return null; } - + ResponseInfo responseInfo = new ResponseInfo<>(); + if (statusCodesForApplicationFault.contains(statusCode)) { - throwException(serviceInterface.getName().replace(serviceInterface.getSimpleName(), ""), response); + TFaultDetail faultDetail = parseStream((InputStream)httpResponse.getEntity(), faultDetailClass); + + responseInfo.setFaultDetail(faultDetail); + + return responseInfo; } - - if (statusCodesForSwitchToSoap.contains(statusCode) && enableFallbackToSoap) { - return callSoapMethod(request); + + if (statusCode >= 200 && statusCode <= 299) { + TResponse response = parseStream((InputStream)httpResponse.getEntity(), responseClass); + + responseInfo.setResponse(response); + + return responseInfo; } - - Resp resp = (Resp)AdaptorUtil.mapper.readValue(AdaptorUtil.mapper.getFactory().createParser(response.getEntity().getContent()), respClass); - response.close(); - httpClient.close(); - return resp; - } - - protected Future sendRequestAsync(Req request, String entityEndpoint, String verb, Class respClass, AsyncHandler asyncHandler) - throws URISyntaxException, IOException, InterruptedException { - Response resp = sendRequestAsync(request, entityEndpoint, verb, respClass); - asyncHandler.handleResponse(resp); - return resp; + + throw new InternalException("Got unexpected status code " + statusCode + " with response content: " + httpResponse.readEntity(String.class)); } - protected Response sendRequestAsync(Req request, String entityEndpoint, String verb, Class respClass) - throws URISyntaxException, IOException, InterruptedException { - if (retryAfter.get(serviceInterface) != null && enableFallbackToSoap - && Calendar.getInstance().before(retryAfter.get(serviceInterface))) { - return callSoapMethodAsync(request); - } + protected String getFaultMessage(String trackingId) { + return "An error occurred while executing the request. Please check the exception Detail property for more information. TrackingId: " + trackingId; + } + + protected T parseStream(InputStream stream, Class resultClass) { + try { + return AdaptorUtil.mapper.readValue(AdaptorUtil.mapper.getFactory().createParser(stream), resultClass); + } catch (IOException e) { + throw new InternalException(e); + } finally { + try { + stream.close(); + } catch (IOException e) { + throw new InternalException(e); + } + } + } - String jsonRequest = AdaptorUtil.mapper.writeValueAsString(request); - - HttpEntityEnclosingRequestBase req = null; - try { - req = asRequest(jsonRequest, verb, entityEndpoint); - } catch (Exception e) { - e.printStackTrace(); - } - - asyncClient.start(); - Future future = asyncClient.execute(req, null); - - return new Response() { + protected Response processRequestAsync(TRequest request, String entityEndpoint, String verb, Class respClass, Class faultDetailClass, Function getException, BiFunction, Future> soapMethod, AsyncHandler handler) { + ResponseFuture responseFuture = new ResponseFuture(); - @Override - public boolean cancel(boolean mayInterruptIfRunning) { - // TODO Auto-generated method stub - return future.cancel(mayInterruptIfRunning); - } + if (handler != null) { + responseFuture.setHandler(handler); + } - @Override - public boolean isCancelled() { - // TODO Auto-generated method stub - return future.isCancelled(); - } + Calendar retryAfterTime = retryAfter.get(serviceInterface); - @Override - public boolean isDone() { - // TODO Auto-generated method stub - return future.isDone(); - } + if (retryAfterTime != null && Calendar.getInstance().before(retryAfterTime)) { + soapMethod.apply(request, new AsyncHandler() { + @Override + public void handleResponse(Response soapResponse) { + try { + responseFuture.setContext(soapResponse.getContext()); - @Override - public Resp get() throws InterruptedException, ExecutionException { - HttpResponse resp = null; - try { - resp = future.get(); - } catch (InterruptedException e) { - System.out.println(e.getCause()); - } - - int statusCode = resp.getStatusLine().getStatusCode(); - Header header = resp.getFirstHeader("RetryAfter"); - if (statusCodesForSwitchToSoap.contains(statusCode)) { - SetRetryAfterTime(header); + responseFuture.setResult(soapResponse.get()); + } catch (Throwable e) { + responseFuture.setException(e); + } } + }); - Header trackingIdHeader = resp.getFirstHeader(ServiceUtils.TRACKING_HEADER_NAME); - - context.put(ServiceUtils.TRACKING_KEY, trackingIdHeader.getValue()); - - if (statusCodesForSwitchToSoap.contains(statusCode) && enableFallbackToSoap) { - try { - Response response = callSoapMethodAsync(request); - return response.get(); - } catch (Exception e) { - e.printStackTrace(); - } - } - else if (statusCodesForApplicationFault.contains(statusCode)) { - throwExecutionException(serviceInterface.getName().replace(serviceInterface.getSimpleName(), ""), resp); - } - - try { - return (Resp)AdaptorUtil.mapper.readValue(AdaptorUtil.mapper.getFactory().createParser(resp.getEntity().getContent()), respClass); - } catch (Exception e) { - e.printStackTrace(); - } - - return null; - } + return responseFuture; + } + String jsonRequest; + try { + jsonRequest = AdaptorUtil.mapper.writeValueAsString(request); + } catch (JsonProcessingException e) { + throw new InternalException(e); + } + + InvocationCallback invocationCallback = new InvocationCallback() { @Override - public Resp get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { - HttpResponse resp = future.get(timeout, unit); - int statusCode = resp.getStatusLine().getStatusCode(); - Header header = resp.getFirstHeader("RetryAfter"); - if (statusCodesForSwitchToSoap.contains(statusCode)) { - SetRetryAfterTime(header); + public void completed(jakarta.ws.rs.core.Response httpResponse) { + try { + int statusCode = httpResponse.getStatus(); + + if (statusCodesForSwitchToSoap.contains(statusCode) && enableFallbackToSoap) { + httpResponse.close(); + + SetRetryAfterTime(httpResponse.getHeaderString("RetryAfter")); + + soapMethod.apply(request, new AsyncHandler() { + @Override + public void handleResponse(Response soapResponse) { + try { + responseFuture.setContext(soapResponse.getContext()); + + responseFuture.setResult(soapResponse.get()); + } catch (Throwable e) { + responseFuture.setException(e); + } + } + }); + + return; + } + + String trackingIdHeader = httpResponse.getHeaderString(ServiceUtils.TRACKING_HEADER_NAME); + + if (statusCodesForApplicationFault.contains(statusCode)) { + TFaultDetail faultDetail = parseStream(httpResponse.readEntity(InputStream.class), faultDetailClass); + + Exception exception = getException.apply(faultDetail); + + responseFuture.setException(exception); + + return; + } + + Map context = new HashMap<>(); + + context.put(ServiceUtils.TRACKING_KEY, trackingIdHeader); + + responseFuture.setContext(context); + + if (statusCode >= 200 && statusCode <= 299) { + TResponse responseObj = parseStream(httpResponse.readEntity(InputStream.class), respClass); + + responseFuture.setResult(responseObj); + + return; + } + + throw new InternalException("Got unexpected status code " + statusCode + " with response content: " + httpResponse.readEntity(String.class)); + } catch (Throwable e) { + responseFuture.setException(e); } - - if (statusCodesForSwitchToSoap.contains(statusCode) && enableFallbackToSoap) { - try { - Response response = callSoapMethodAsync(request); - return response.get(); - } catch (Exception e) { - e.printStackTrace(); - } - } - else if (statusCodesForApplicationFault.contains(statusCode)) { - throwExecutionException(serviceInterface.getName().replace(serviceInterface.getSimpleName(), ""), resp); - } - - try { - return (Resp)AdaptorUtil.mapper.readValue(AdaptorUtil.mapper.getFactory().createParser(resp.getEntity().getContent()), respClass); - } catch (Exception e) { - e.printStackTrace(); - } - - return null; } - private final Map context = new HashMap<>(); - @Override - public Map getContext() { - return context; + public void failed(Throwable throwable) { + responseFuture.setException(throwable); } - }; + + AsyncInvoker asyncInvoker = asRequest(entityEndpoint).async(); + + switch (verb) { + case HttpPost: + asyncInvoker.post(Entity.json(jsonRequest), invocationCallback); + break; + case HttpPut: + asyncInvoker.put(Entity.json(jsonRequest), invocationCallback); + break; + case HttpDelete: + asyncInvoker.method("DELETE", Entity.json(jsonRequest), invocationCallback); + break; + default: + throw new InternalException("Unknown HTTP verb: " + verb); + } + + return responseFuture; } - - private static final Map serviceNameAndVersion = new HashMap() { - { - put(com.microsoft.bingads.v13.customerbilling.ICustomerBillingService.class, "/Billing/v13"); - - put(com.microsoft.bingads.v13.customermanagement.ICustomerManagementService.class, "/CustomerManagement/v13"); - - put(com.microsoft.bingads.v13.reporting.IReportingService.class, "/Reporting/v13"); - - put(com.microsoft.bingads.v13.campaignmanagement.ICampaignManagementService.class, "/CampaignManagement/v13"); - - put(com.microsoft.bingads.v13.adinsight.IAdInsightService.class, "/AdInsight/v13"); - - put(com.microsoft.bingads.v13.bulk.IBulkService.class, "/Bulk/v13"); - } - }; - private static final Map endpoints = new HashMap() { - { + static class ResponseFuture extends ResultFuture implements Response { + private Map context = null; - put(com.microsoft.bingads.v13.customerbilling.ICustomerBillingService.class, new ServiceInfo() { - { - setProductionUrl("https://clientcenter.api.bingads.microsoft.com/Billing/v13"); - setSandboxUrl("https://clientcenter.api.sandbox.bingads.microsoft.com/Billing/v13"); - } - }); + public ResponseFuture() { + super(null); + } - put(com.microsoft.bingads.v13.customermanagement.ICustomerManagementService.class, new ServiceInfo() { - { - setProductionUrl("https://clientcenter.api.bingads.microsoft.com/CustomerManagement/v13"); - setSandboxUrl("https://clientcenter.api.sandbox.bingads.microsoft.com/CustomerManagement/v13"); + public void setHandler(AsyncHandler handler) { + super.handler = new AsyncCallback() { + @Override + public void onCompleted(Future result) { + handler.handleResponse(new Response() { + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + return result.cancel(mayInterruptIfRunning); + } + + @Override + public boolean isCancelled() { + return result.isCancelled(); + } + + @Override + public boolean isDone() { + return result.isDone(); + } + + @Override + public T get() throws InterruptedException, ExecutionException { + return result.get(); + } + + @Override + public T get(long timeout, TimeUnit unit) + throws InterruptedException, ExecutionException, TimeoutException { + return result.get(timeout, unit); + } + + @Override + public Map getContext() { + return context; + } + }); } - }); - put(com.microsoft.bingads.v13.reporting.IReportingService.class, new ServiceInfo() { - { - setProductionUrl("https://reporting.api.bingads.microsoft.com/Reporting/v13"); - setSandboxUrl("https://reporting.api.sandbox.bingads.microsoft.com/Reporting/v13"); - } - }); - put(com.microsoft.bingads.v13.campaignmanagement.ICampaignManagementService.class, new ServiceInfo() { - { - setProductionUrl("https://campaign.api.bingads.microsoft.com/CampaignManagement/v13"); - setSandboxUrl("https://campaign.api.sandbox.bingads.microsoft.com/CampaignManagement/v13"); - } - }); - put(com.microsoft.bingads.v13.adinsight.IAdInsightService.class, new ServiceInfo() { - { - setProductionUrl("https://adinsight.api.bingads.microsoft.com/AdInsight/v13"); - setSandboxUrl("https://adinsight.api.sandbox.bingads.microsoft.com/AdInsight/v13"); - } - }); - put(com.microsoft.bingads.v13.bulk.IBulkService.class, new ServiceInfo() { - { - setProductionUrl("https://bulk.api.bingads.microsoft.com/Bulk/v13"); - setSandboxUrl("https://bulk.api.sandbox.bingads.microsoft.com/Bulk/v13"); - } - }); - // End of v13 + }; } - }; + @Override + public Map getContext() { + return context; + } + + void setContext(Map context) { + this.context = context; + } + } } diff --git a/src/main/java/com/microsoft/bingads/internal/restful/RestfulServiceClientExtension.java b/src/main/java/com/microsoft/bingads/internal/restful/RestfulServiceClientExtension.java deleted file mode 100644 index 216e68df9e..0000000000 --- a/src/main/java/com/microsoft/bingads/internal/restful/RestfulServiceClientExtension.java +++ /dev/null @@ -1,147 +0,0 @@ -package com.microsoft.bingads.internal.restful; - -import java.lang.reflect.InvocationTargetException; -import java.util.concurrent.ExecutionException; - -import org.apache.http.HttpResponse; - -import com.microsoft.bingads.internal.restful.adaptor.AdaptorUtil; - -public class RestfulServiceClientExtension { - - protected void throwException(String ns, HttpResponse response) - throws Exception { - Object errorRes = null; - Class clazz = null; - String message = ""; - try { - clazz = Class.forName(ns + "ApplicationFault"); - errorRes = AdaptorUtil.mapper.readValue(AdaptorUtil.mapper.getFactory().createParser(response.getEntity().getContent()), Class.forName(ns + "ApplicationFault")); - } catch (Exception e) { - e.printStackTrace(); - } - - if (ns.contains("campaignmanagement")) { - if (errorRes.toString().contains("AdApiFaultDetail")) { - throw new com.microsoft.bingads.v13.campaignmanagement.AdApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.campaignmanagement.AdApiFaultDetail)errorRes); - } - else if (errorRes.toString().contains("EditorialApiFaultDetail")) { - throw new com.microsoft.bingads.v13.campaignmanagement.EditorialApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.campaignmanagement.EditorialApiFaultDetail)errorRes); - } - else if (errorRes.toString().contains("ApiFaultDetail")) { - throw new com.microsoft.bingads.v13.campaignmanagement.ApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.campaignmanagement.ApiFaultDetail)errorRes); - } - } - else if (ns.contains("bulk")) { - if (errorRes.toString().contains("AdApiFaultDetail")) { - throw new com.microsoft.bingads.v13.bulk.AdApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.bulk.AdApiFaultDetail)errorRes); - } - else if (errorRes.toString().contains("ApiFaultDetail")) { - throw new com.microsoft.bingads.v13.bulk.ApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.bulk.ApiFaultDetail)errorRes); - } - } - else if (ns.contains("adinsight")) { - if (errorRes.toString().contains("AdApiFaultDetail")) { - throw new com.microsoft.bingads.v13.adinsight.AdApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.adinsight.AdApiFaultDetail)errorRes); - } - else if (errorRes.toString().contains("ApiFaultDetail")) { - throw new com.microsoft.bingads.v13.adinsight.ApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.adinsight.ApiFaultDetail)errorRes); - } - } - else if (ns.contains("customerbilling")) { - if (errorRes.toString().contains("AdApiFaultDetail")) { - throw new com.microsoft.bingads.v13.customerbilling.AdApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.customerbilling.AdApiFaultDetail)errorRes); - } - else if (errorRes.toString().contains("ApiFault")) { - throw new com.microsoft.bingads.v13.customerbilling.ApiFault_Exception(message, (com.microsoft.bingads.v13.customerbilling.ApiFault)errorRes); - } - } - else if (ns.contains("customermanagement")) { - if (errorRes.toString().contains("AdApiFaultDetail")) { - throw new com.microsoft.bingads.v13.customermanagement.AdApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.customermanagement.AdApiFaultDetail)errorRes); - } - else if (errorRes.toString().contains("ApiFault")) { - throw new com.microsoft.bingads.v13.customermanagement.ApiFault_Exception(message, (com.microsoft.bingads.v13.customermanagement.ApiFault)errorRes); - } - } - else if (ns.contains("reporting")) { - if (errorRes.toString().contains("AdApiFaultDetail")) { - throw new com.microsoft.bingads.v13.reporting.AdApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.reporting.AdApiFaultDetail)errorRes); - } - else if (errorRes.toString().contains("ApiFaultDetail")) { - throw new com.microsoft.bingads.v13.reporting.ApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.reporting.ApiFaultDetail)errorRes); - } - } - } - - protected void throwExecutionException(String ns, HttpResponse response) throws ExecutionException - { - Object errorRes = null; - Class clazz = null; - String message = ""; - try { - clazz = Class.forName(ns + "ApplicationFault"); - errorRes = AdaptorUtil.mapper.readValue(AdaptorUtil.mapper.getFactory().createParser(response.getEntity().getContent()), Class.forName(ns + "ApplicationFault")); - } catch (Exception e) { - e.printStackTrace(); - } - - try { - message = "Invalid client data. Check the SOAP fault details for more information. TrackingId: " + clazz.getMethod("getTrackingId").invoke(errorRes).toString(); - } catch (Exception e) { - e.printStackTrace(); - } - - if (ns.contains("campaignmanagement")) { - if (errorRes.toString().contains("AdApiFaultDetail")) { - throw new ExecutionException(message, new com.microsoft.bingads.v13.campaignmanagement.AdApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.campaignmanagement.AdApiFaultDetail)errorRes)); - } - else if (errorRes.toString().contains("EditorialApiFaultDetail")) { - throw new ExecutionException(message, new com.microsoft.bingads.v13.campaignmanagement.EditorialApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.campaignmanagement.EditorialApiFaultDetail)errorRes)); - } - else if (errorRes.toString().contains("ApiFaultDetail")) { - throw new ExecutionException(message, new com.microsoft.bingads.v13.campaignmanagement.ApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.campaignmanagement.ApiFaultDetail)errorRes)); - } - } - else if (ns.contains("bulk")) { - if (errorRes.toString().contains("AdApiFaultDetail")) { - throw new ExecutionException(message, new com.microsoft.bingads.v13.bulk.AdApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.bulk.AdApiFaultDetail)errorRes)); - } - else if (errorRes.toString().contains("ApiFaultDetail")) { - throw new ExecutionException(message, new com.microsoft.bingads.v13.bulk.ApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.bulk.ApiFaultDetail)errorRes)); - } - } - else if (ns.contains("adinsight")) { - if (errorRes.toString().contains("AdApiFaultDetail")) { - throw new ExecutionException(message, new com.microsoft.bingads.v13.adinsight.AdApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.adinsight.AdApiFaultDetail)errorRes)); - } - else if (errorRes.toString().contains("ApiFaultDetail")) { - throw new ExecutionException(message, new com.microsoft.bingads.v13.adinsight.ApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.adinsight.ApiFaultDetail)errorRes)); - } - } - else if (ns.contains("customerbilling")) { - if (errorRes.toString().contains("AdApiFaultDetail")) { - throw new ExecutionException(message, new com.microsoft.bingads.v13.customerbilling.AdApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.customerbilling.AdApiFaultDetail)errorRes)); - } - else if (errorRes.toString().contains("ApiFault")) { - throw new ExecutionException(message, new com.microsoft.bingads.v13.customerbilling.ApiFault_Exception(message, (com.microsoft.bingads.v13.customerbilling.ApiFault)errorRes)); - } - } - else if (ns.contains("customermanagement")) { - if (errorRes.toString().contains("AdApiFaultDetail")) { - throw new ExecutionException(message, new com.microsoft.bingads.v13.customermanagement.AdApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.customermanagement.AdApiFaultDetail)errorRes)); - } - else if (errorRes.toString().contains("ApiFault")) { - throw new ExecutionException(message, new com.microsoft.bingads.v13.customermanagement.ApiFault_Exception(message, (com.microsoft.bingads.v13.customermanagement.ApiFault)errorRes)); - } - } - else if (ns.contains("reporting")) { - if (errorRes.toString().contains("AdApiFaultDetail")) { - throw new ExecutionException(message, new com.microsoft.bingads.v13.reporting.AdApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.reporting.AdApiFaultDetail)errorRes)); - } - else if (errorRes.toString().contains("ApiFaultDetail")) { - throw new ExecutionException(message, new com.microsoft.bingads.v13.reporting.ApiFaultDetail_Exception(message, (com.microsoft.bingads.v13.reporting.ApiFaultDetail)errorRes)); - } - } - } -} diff --git a/src/main/java/com/microsoft/bingads/internal/utilities/Lazy.java b/src/main/java/com/microsoft/bingads/internal/utilities/Lazy.java new file mode 100644 index 0000000000..a6c879802b --- /dev/null +++ b/src/main/java/com/microsoft/bingads/internal/utilities/Lazy.java @@ -0,0 +1,21 @@ +package com.microsoft.bingads.internal.utilities; + +import java.util.function.Supplier; + +public class Lazy { + private volatile T value; + + private final Supplier createValue; + + public Lazy(Supplier createValue) { + this.createValue = createValue; + } + + public synchronized T getValue() { + if (value == null) { + value = createValue.get(); + } + + return value; + } +} \ No newline at end of file diff --git a/src/main/java/com/microsoft/bingads/v13/bulk/BulkOperation.java b/src/main/java/com/microsoft/bingads/v13/bulk/BulkOperation.java index 77f1e2af28..6b8fd58d29 100644 --- a/src/main/java/com/microsoft/bingads/v13/bulk/BulkOperation.java +++ b/src/main/java/com/microsoft/bingads/v13/bulk/BulkOperation.java @@ -10,7 +10,6 @@ import com.microsoft.bingads.AsyncCallback; import com.microsoft.bingads.AuthorizationData; import com.microsoft.bingads.ServiceClient; -import com.microsoft.bingads.internal.MessageHandler; import com.microsoft.bingads.internal.ParentCallback; import com.microsoft.bingads.internal.ResultFuture; import com.microsoft.bingads.internal.utilities.HttpClientHttpFileService; @@ -332,8 +331,6 @@ private File downloadFileWithFinalStatus(File localResultDirectoryName, String l File extractedFile = zipExtractor.extractFirstEntryToFile(zipResultPath, fullPath, localResultFileName == null, overwrite); zipResultPath.delete(); - - MessageHandler.getInstance().handleDirectMessage("Bulk Download... RequestId: " + requestId + "; DownloadUrl: " + finalStatus.getResultFileUrl() + "; LocalPath: " + localResultDirectoryName.getPath()); return extractedFile; } diff --git a/src/main/java/com/microsoft/bingads/v13/bulk/BulkServiceManager.java b/src/main/java/com/microsoft/bingads/v13/bulk/BulkServiceManager.java index df4a1c70e2..cdaadf9331 100644 --- a/src/main/java/com/microsoft/bingads/v13/bulk/BulkServiceManager.java +++ b/src/main/java/com/microsoft/bingads/v13/bulk/BulkServiceManager.java @@ -28,7 +28,6 @@ import com.microsoft.bingads.InternalException; import com.microsoft.bingads.ServiceClient; import com.microsoft.bingads.internal.HttpHeaders; -import com.microsoft.bingads.internal.MessageHandler; import com.microsoft.bingads.internal.ParentCallback; import com.microsoft.bingads.internal.ResultFuture; import com.microsoft.bingads.internal.ServiceUtils; @@ -98,28 +97,20 @@ public class BulkServiceManager { public BulkServiceManager(AuthorizationData authorizationData) { this(authorizationData, null); } - - public BulkServiceManager(AuthorizationData authorizationData, boolean enableRestApi) { - this(authorizationData, null, enableRestApi); - } public BulkServiceManager(AuthorizationData authorizationData, ApiEnvironment apiEnvironment) { - this(authorizationData, new HttpClientHttpFileService(), new SimpleZipExtractor(), new CsvBulkEntityReaderFactory(), apiEnvironment, false); - } - - public BulkServiceManager(AuthorizationData authorizationData, ApiEnvironment apiEnvironment, boolean enableRestApi) { - this(authorizationData, new HttpClientHttpFileService(), new SimpleZipExtractor(), new CsvBulkEntityReaderFactory(), apiEnvironment, enableRestApi); + this(authorizationData, new HttpClientHttpFileService(), new SimpleZipExtractor(), new CsvBulkEntityReaderFactory(), apiEnvironment); } private BulkServiceManager(AuthorizationData authorizationData, HttpFileService httpFileService, ZipExtractor zipExtractor, - BulkEntityReaderFactory factory, ApiEnvironment apiEnvironment, boolean enableRestApi) { + BulkEntityReaderFactory factory, ApiEnvironment apiEnvironment) { this.authorizationData = authorizationData; this.httpFileService = httpFileService; this.zipExtractor = zipExtractor; this.bulkEntityReaderFactory = factory; this.apiEnvironment = apiEnvironment; - serviceClient = new ServiceClient(this.authorizationData, apiEnvironment, IBulkService.class, enableRestApi); + serviceClient = new ServiceClient(this.authorizationData, apiEnvironment, IBulkService.class); workingDirectory = new File(System.getProperty("java.io.tmpdir"), "BingAdsSDK"); @@ -689,9 +680,6 @@ public void addHeader(String name, String value) { } }; - MessageHandler.getInstance().handleDirectMessage("Bulk Upload... requestId: " + response.getRequestId() + "; UploadFilePath:" - + parameters.getUploadFilePath() + "; uploadUrl: " + uploadUrl); - httpFileService.uploadFile(new URI(uploadUrl), effectiveUploadPath, addHeaders, uploadHttpTimeoutInMilliseconds); if (shouldCompress) { diff --git a/src/main/java/com/microsoft/bingads/v13/reporting/ReportingDownloadOperation.java b/src/main/java/com/microsoft/bingads/v13/reporting/ReportingDownloadOperation.java index 31ed6b9226..591bda1bf9 100644 --- a/src/main/java/com/microsoft/bingads/v13/reporting/ReportingDownloadOperation.java +++ b/src/main/java/com/microsoft/bingads/v13/reporting/ReportingDownloadOperation.java @@ -9,7 +9,6 @@ import com.microsoft.bingads.AsyncCallback; import com.microsoft.bingads.AuthorizationData; import com.microsoft.bingads.ServiceClient; -import com.microsoft.bingads.internal.MessageHandler; import com.microsoft.bingads.internal.ParentCallback; import com.microsoft.bingads.internal.ResultFuture; import com.microsoft.bingads.internal.utilities.HttpClientHttpFileService; @@ -231,8 +230,6 @@ public void onSuccess(ReportingOperationStatus result) throws IOException, URISy File resultFile = downloadFileWithFinalStatus(localResultDirectoryName, localResultFileName, decompress, overwrite); - MessageHandler.getInstance().handleDirectMessage("Reporting Download... RequestId: " + requestId + "; DownloadUrl: " + finalStatus.getResultFileUrl() + "; LocalPath: " + localResultDirectoryName.getPath()); - resultFuture.setResult(resultFile); } }); diff --git a/src/test/java/com/microsoft/bingads/v13/api/test/operations/FakeApiTest.java b/src/test/java/com/microsoft/bingads/v13/api/test/operations/FakeApiTest.java index c303818f16..3a1e6c6629 100644 --- a/src/test/java/com/microsoft/bingads/v13/api/test/operations/FakeApiTest.java +++ b/src/test/java/com/microsoft/bingads/v13/api/test/operations/FakeApiTest.java @@ -23,6 +23,13 @@ public class FakeApiTest { @Before public void setUp() { + System.setProperty("com.microsoft.bingads.ICampaignManagementService.DisableRestApi", "true"); + System.setProperty("com.microsoft.bingads.IBulkService.DisableRestApi", "true"); + System.setProperty("com.microsoft.bingads.IReportingService.DisableRestApi", "true"); + System.setProperty("com.microsoft.bingads.ICustomerManagementService.DisableRestApi", "true"); + System.setProperty("com.microsoft.bingads.ICustomerBillingService.DisableRestApi", "true"); + System.setProperty("com.microsoft.bingads.IAdInsightService.DisableRestApi", "true"); + ServiceFactoryFactory.setCustomServiceFactorySupplier(new Supplier() { @Override public ServiceFactory get() { diff --git a/src/test/java/com/microsoft/bingads/v13/api/test/restfulapi/NumericNodeComparator.java b/src/test/java/com/microsoft/bingads/v13/api/test/restfulapi/NumericNodeComparator.java new file mode 100644 index 0000000000..8097736856 --- /dev/null +++ b/src/test/java/com/microsoft/bingads/v13/api/test/restfulapi/NumericNodeComparator.java @@ -0,0 +1,25 @@ +package com.microsoft.bingads.v13.api.test.restfulapi; + +import java.util.Comparator; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.NumericNode; + + +public class NumericNodeComparator implements Comparator +{ + @Override + public int compare(JsonNode o1, JsonNode o2) + { + if (o1.equals(o2)){ + return 0; + } + if ((o1 instanceof NumericNode) && (o2 instanceof NumericNode)){ + Double d1 = ((NumericNode) o1).asDouble(); + Double d2 = ((NumericNode) o2).asDouble(); + if (d1.compareTo(d2) == 0) { + return 0; + } + } + return 1; + } +} diff --git a/src/test/java/com/microsoft/bingads/v13/api/test/restfulapi/RestApiRequestTest.java b/src/test/java/com/microsoft/bingads/v13/api/test/restfulapi/RestApiRequestTest.java new file mode 100644 index 0000000000..854f371235 --- /dev/null +++ b/src/test/java/com/microsoft/bingads/v13/api/test/restfulapi/RestApiRequestTest.java @@ -0,0 +1,115 @@ +package com.microsoft.bingads.v13.api.test.restfulapi; + +import static org.junit.Assert.assertEquals; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; + +import com.fasterxml.jackson.databind.JsonNode; +import com.microsoft.bingads.internal.restful.adaptor.AdaptorUtil; + +@RunWith(Parameterized.class) +public class RestApiRequestTest extends RestApiTestBase { + private boolean testJson(String content) { + boolean res = false; + try + { + String payload = content.split("\\n")[0]; + String json = removeHeaders(payload); + String methodName = content.split("\\n")[1]; + boolean ifSkipType = false; + + if (methodName.contains("GetFileImportUploadUrlRequest") || json.contains("LogoAdExtension")) { + return true; + } + + String json1 = removeNullProperties(json); + json1 = modifyDate(json1); + String prefix = null; + for (int i = 0; i < namespacePrefixes.length; i++) { + if (!isClass(namespacePrefixes[i] + methodName)) { + continue; + } else { + prefix = namespacePrefixes[i]; + } + } + + Object obj = AdaptorUtil.mapper.readValue(json, Class.forName(prefix + methodName)); + String json2 = AdaptorUtil.mapper.writeValueAsString(obj); + json2 = removeNullProperties(json2); + + JsonNode node1 = mapper.readTree(json1); + JsonNode node2 = mapper.readTree(json2); + NumericNodeComparator cmp = new NumericNodeComparator(); + res = node1.equals(cmp, node2); + if (!res) { + System.out.println(json1); + System.out.println(json2); + } + } + catch (Exception e) { + if ((e.toString().contains("No enum constant") && e.toString().contains("0"))) + { + res = true; + } else { + System.out.println(e.toString()); + } + } + + return res; + } + + @Parameters + public static Collection data() throws IOException { + ArrayList content = new ArrayList(); + String path = "./TestPayload/request.zip"; + ZipInputStream zis = new ZipInputStream(new FileInputStream(path)); + ZipEntry entry; + while ((entry = zis.getNextEntry()) != null) { + if (entry.getName().contains("txt")) { + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(zis)); + String lines = ""; + String line; + while ((line = bufferedReader.readLine()) != null) { + lines += line + "\n"; + } + content.add(lines); + } + } + + Object[][] objects = new Object[content.size()][2]; + + for (int i = 0; i < content.size(); i++) + { + objects[i][0] = content.get(i); + objects[i][1] = true; + } + return Arrays.asList(objects); + } + + private String input; + private boolean expected; + + public RestApiRequestTest(String input, boolean expected) { + this.input = input; + this.expected = expected; + } + + @Test + public void testJsonRequest() throws IOException { + InitMapper(); + assertEquals(testJson(input), expected); + } +} diff --git a/src/test/java/com/microsoft/bingads/v13/api/test/restfulapi/RestApiResponseTest.java b/src/test/java/com/microsoft/bingads/v13/api/test/restfulapi/RestApiResponseTest.java new file mode 100644 index 0000000000..6797c06f5e --- /dev/null +++ b/src/test/java/com/microsoft/bingads/v13/api/test/restfulapi/RestApiResponseTest.java @@ -0,0 +1,143 @@ +package com.microsoft.bingads.v13.api.test.restfulapi; + +import static org.junit.Assert.assertEquals; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; + +import com.fasterxml.jackson.databind.JsonNode; +import com.microsoft.bingads.internal.restful.adaptor.AdaptorUtil; + +@RunWith(Parameterized.class) +public class RestApiResponseTest extends RestApiTestBase { + private boolean testJson(String content) { + boolean res = false; + boolean hasFault = false; + boolean hasError = false; + try + { + String payload = content.split("\\n")[0]; + String json = removeHeaders(payload); + String methodName = content.split("\\n")[1]; + + if (json.contains("$error-type") || json.contains("LogoAdExtension")) { + return true; + } + + String prefix = null; + for (int i = 0; i < namespacePrefixes.length; i++) { + if (!isClass(namespacePrefixes[i] + methodName)) { + continue; + } else { + prefix = namespacePrefixes[i]; + } + } + + for (int i = 0; i < faultTypes.length; i++) { + if (json.contains(faultTypes[i])) { + hasFault = true; + break; + } + } + + for (int i = 0; i < errorTypes.length; i++) { + if (json.contains(errorTypes[i])) { + hasError = true; + break; + } + } + + String json1 = removeNullProperties(json); + json1 = modifyDate(json1); + Object obj; + if (hasFault) + { + json1 = removeTypeProperty(json1, true); + obj = AdaptorUtil.mapper.readValue(json, Class.forName(prefix + "ApplicationFault")); + } + else + { + obj = AdaptorUtil.mapper.readValue(json, Class.forName(prefix + methodName)); + } + + if (hasError) + { + //json1 = removeTypeProperty(json1, false); + } + + String json2 = AdaptorUtil.mapper.writeValueAsString(obj); + json2 = removeNullProperties(json2); + + JsonNode node1 = mapper.readTree(json1); + JsonNode node2 = mapper.readTree(json2); + NumericNodeComparator cmp = new NumericNodeComparator(); + res = node1.equals(cmp, node2); + if (!res) { + System.out.println(json1); + System.out.println(methodName); + System.out.println(json2); + } + } + catch (Exception e) { + System.out.println(content); + System.out.println(e.toString()); + } + + return res; + } + + + @Parameters + public static Collection data() throws IOException { + ArrayList content = new ArrayList(); + String path = "./TestPayload/response.zip"; + ZipInputStream zis = new ZipInputStream(new FileInputStream(path)); + ZipEntry entry; + while ((entry = zis.getNextEntry()) != null) { + if (entry.getName().contains("txt")) { + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(zis)); + String lines = ""; + String line; + while ((line = bufferedReader.readLine()) != null) { + lines += line + "\n"; + } + content.add(lines); + } + } + + Object[][] objects = new Object[content.size()][2]; + + for (int i = 0; i < content.size(); i++) + { + objects[i][0] = content.get(i); + objects[i][1] = true; + } + return Arrays.asList(objects); + } + + private String input; + private boolean expected; + + public RestApiResponseTest(String input, boolean expected) { + this.input = input; + this.expected = expected; + } + + @Test + public void testJsonResponse() { + InitMapper(); + assertEquals(testJson(input), expected); + } +} diff --git a/src/test/java/com/microsoft/bingads/v13/api/test/restfulapi/RestApiTestBase.java b/src/test/java/com/microsoft/bingads/v13/api/test/restfulapi/RestApiTestBase.java new file mode 100644 index 0000000000..3867ccb0e9 --- /dev/null +++ b/src/test/java/com/microsoft/bingads/v13/api/test/restfulapi/RestApiTestBase.java @@ -0,0 +1,216 @@ +package com.microsoft.bingads.v13.api.test.restfulapi; + +import static org.junit.Assert.assertEquals; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.ParameterizedType; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Stream; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.microsoft.bingads.internal.restful.adaptor.AdaptorUtil; + + +@RunWith(Parameterized.class) +public class RestApiTestBase { + protected ObjectMapper mapper = AdaptorUtil.mapper; + + protected String[] faultTypes = {"ApplicationFault", "ApiFaultDetail", "EditorialApiFaultDetail", "AdApiFaultDetail"}; + + protected String[] errorTypes = {"BatchError", "BatchErrorCollection"}; + + protected String[] typesWithoutTypeField = {"ReportRequest"}; + + protected String[] namespacePrefixes = {"com.microsoft.bingads.v13.bulk.", + "com.microsoft.bingads.v13.campaignmanagement.", + "com.microsoft.bingads.v13.reporting."}; + + protected boolean isClass(String className) { + try { + Class.forName(className); + return true; + } catch (ClassNotFoundException e) { + return false; + } + } + + protected void InitMapper() { + com.microsoft.bingads.internal.restful.adaptor.generated.campaignmanagement.arrayOfTypes.AddMixInForArrayOfTypes.AddMixInForArrayOfTypes(); + com.microsoft.bingads.internal.restful.adaptor.generated.campaignmanagement.enums.AddMixInForEnumTypes.AddMixInForEnumTypes(); + com.microsoft.bingads.internal.restful.adaptor.generated.campaignmanagement.enums.AddMixInForComplexTypesWithEnumList.AddMixInForComplexTypesWithEnumList(); + com.microsoft.bingads.internal.restful.adaptor.generated.campaignmanagement.polymorphicTypes.AddMixInForPolymorphicTypes.AddMixInForPolymorphicTypes(); + + com.microsoft.bingads.internal.restful.adaptor.generated.bulk.arrayOfTypes.AddMixInForArrayOfTypes.AddMixInForArrayOfTypes(); + com.microsoft.bingads.internal.restful.adaptor.generated.bulk.enums.AddMixInForEnumTypes.AddMixInForEnumTypes(); + com.microsoft.bingads.internal.restful.adaptor.generated.bulk.enums.AddMixInForComplexTypesWithEnumList.AddMixInForComplexTypesWithEnumList(); + com.microsoft.bingads.internal.restful.adaptor.generated.bulk.polymorphicTypes.AddMixInForPolymorphicTypes.AddMixInForPolymorphicTypes(); + + com.microsoft.bingads.internal.restful.adaptor.generated.reporting.arrayOfTypes.AddMixInForArrayOfTypes.AddMixInForArrayOfTypes(); + com.microsoft.bingads.internal.restful.adaptor.generated.reporting.enums.AddMixInForEnumTypes.AddMixInForEnumTypes(); + com.microsoft.bingads.internal.restful.adaptor.generated.reporting.enums.AddMixInForComplexTypesWithEnumList.AddMixInForComplexTypesWithEnumList(); + com.microsoft.bingads.internal.restful.adaptor.generated.reporting.polymorphicTypes.AddMixInForPolymorphicTypes.AddMixInForPolymorphicTypes(); + } + + protected String removeHeaders(String request) throws JsonProcessingException { + String res = ""; + try { + JsonNode node = mapper.readTree(request); + ((ObjectNode) node).remove("ApplicationToken"); + ((ObjectNode) node).remove("AuthenticationToken"); + ((ObjectNode) node).remove("CustomerAccountId"); + ((ObjectNode) node).remove("CustomerId"); + ((ObjectNode) node).remove("DeveloperToken"); + ((ObjectNode) node).remove("Password"); + ((ObjectNode) node).remove("UserName"); + ((ObjectNode) node).remove("OverrideConfigValuesFromTest"); + ((ObjectNode) node).remove("TrackingId"); + + if (node.get("AdGroups") != null) { + JsonNode adGroups = node.get("AdGroups"); + int i = 0; + while (adGroups.get(i) != null) { + + if (adGroups.get(i).get("StartDate") != null && !adGroups.get(i).get("StartDate").isNull()) ((ObjectNode) adGroups.get(i).get("StartDate")).remove("DateTime"); + if (adGroups.get(i).get("EndDate") != null && !adGroups.get(i).get("EndDate").isNull()) ((ObjectNode) adGroups.get(i).get("EndDate")).remove("DateTime"); + if (adGroups.get(i).get("ExactMatchBid") != null && !adGroups.get(i).get("ExactMatchBid").isNull()) ((ObjectNode) adGroups.get(i)).remove("ExactMatchBid"); + if (adGroups.get(i).get("PhraseMatchBid") != null && !adGroups.get(i).get("PhraseMatchBid").isNull()) ((ObjectNode) adGroups.get(i)).remove("PhraseMatchBid"); + if (adGroups.get(i).get("BroadMatchBid") != null && !adGroups.get(i).get("BroadMatchBid").isNull()) ((ObjectNode) adGroups.get(i)).remove("BroadMatchBid"); + i++; + } + } + + if (node.get("AdExtensions") != null) { + JsonNode adExtensions = node.get("AdExtensions"); + int i = 0; + while (adExtensions.get(i) != null) { + if (adExtensions.get(i).get("Scheduling") != null) { + if (adExtensions.get(i).get("Scheduling").get("StartDate") != null && !adExtensions.get(i).get("Scheduling").get("StartDate").isNull()) + ((ObjectNode) adExtensions.get(i).get("Scheduling").get("StartDate")).remove("DateTime"); + if (adExtensions.get(i).get("Scheduling").get("EndDate") != null && !adExtensions.get(i).get("Scheduling").get("EndDate").isNull()) + ((ObjectNode) adExtensions.get(i).get("Scheduling").get("EndDate")).remove("DateTime"); + } + i++; + } + } + + if (node.get("AssetGroups") != null) { + JsonNode assetGroups = node.get("AssetGroups"); + int i = 0; + while (assetGroups.get(i) != null) { + if (assetGroups.get(i).get("StartDate") != null && !assetGroups.get(i).get("StartDate").isNull()) + ((ObjectNode) assetGroups.get(i).get("StartDate")).remove("DateTime"); + if (assetGroups.get(i).get("EndDate") != null && !assetGroups.get(i).get("EndDate").isNull()) + ((ObjectNode) assetGroups.get(i).get("EndDate")).remove("DateTime"); + i++; + } + } + + if (node.get("CampaignCriterions") != null) { + JsonNode campaignCriterions = node.get("CampaignCriterions"); + int i = 0; + while (campaignCriterions.get(i) != null) { + if (campaignCriterions.get(i).get("Criterion") != null && campaignCriterions.get(i).get("Criterion").get("Conditions") != null) { + JsonNode conditions = campaignCriterions.get(i).get("Criterion").get("Conditions"); + int j = 0; + while (conditions.get(j) != null) { + if (conditions.get(j).get("Operator") != null) + ((ObjectNode) conditions.get(j)).remove("Operator"); + j++; + } + } + i++; + } + } + + res = mapper.writeValueAsString(node); + } + catch (JsonProcessingException e) { + e.printStackTrace(); + } + return res; + } + + protected String removeNullProperties(String request) throws JsonProcessingException { + JsonNode node = mapper.readTree(request); + JsonNode cleaned = removeNullNodes(node); + return mapper.writeValueAsString(cleaned); + } + + protected String removeTypeProperty(String response, boolean isFault) throws JsonProcessingException { + JsonNode node = mapper.readTree(response); + JsonNode cleaned = removeTypeNodes(node, isFault); + return mapper.writeValueAsString(cleaned); + } + + protected String modifyDate(String str) { + String pattern = "(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})(\\.\\d+)?(Z)?"; + String pattern2 = "(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})(\\.\\d+)?([+-]\\d{2}:\\d{2}|Z)?"; + Pattern r = Pattern.compile(pattern); + if (r.matcher(str).find()) { + return str.replaceAll(pattern, "$1"); + } + return str; + } + + protected JsonNode removeNullNodes(JsonNode node) { + if (node.isArray()) { + for (int i = 0; i < node.size(); i++) { + removeNullNodes(node.get(i)); + } + } else if (node.isObject()) { + Iterator> iter = node.fields(); + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + if (entry.getValue().isNull() || entry.getValue().toString().equals("\"\"")) { + iter.remove(); + } else { + removeNullNodes(entry.getValue()); + } + } + } + return node; + } + + protected JsonNode removeTypeNodes(JsonNode node, boolean ifSkipType) { + String[] skipTypes = Stream.of(typesWithoutTypeField, faultTypes).flatMap(Stream::of).toArray(String[]::new); + String[] types = ifSkipType ? skipTypes : errorTypes; + if (node.isArray()) { + for (int i = 0; i < node.size(); i++) { + removeTypeNodes(node.get(i), ifSkipType); + } + } else if (node.isObject()) { + Iterator> iter = node.fields(); + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + for (int i = 0; i < types.length; i++) { + if (entry.getKey().toString().equals("Type") && entry.getValue().toString().contains(types[i])) { + iter.remove(); + break; + } else { + removeTypeNodes(entry.getValue(), ifSkipType); + } + } + } + } + return node; + } +}