Details
-
Type: Bug
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 1.3.0, Aquidneck
-
Fix Version/s: 1.5.0, 2.0.0, sprint 13: 11-28-2012, Jamestown 2.3.0
-
Component/s: Content Editor
-
Labels:None
-
Environment:
AML dev (tsa-aq-mysql1, tsa-aq-jboss1)
-
Story Points:3
-
Sprint:Sprint 12, Sprint 13, Sprint 6
Description
When adding keywords to Google fails, the error is not caught (exception thrown, see below/attached log) and because no errors are added to the database, the AdMaxListener thinks the deploy succeeded.
Expected result: on error adding keywords to google campaigns, the error should be saved to the database and the deploy would fail.
We should also verify that errors for Ads are caught as well. The code that handles editorial errors might be shared between ads and keywords. I believe editorial triggers for ads can be triggered by adding multiple exclamation points, or perhaps other invalid characters or a a display/destination URL that is not a valid URL.
To reproduce this, you can add a keyword with a comma in the biz_function_location.keywords table, or you can modify a location short description to have a keyword (mms_common.businessLocations).
A NullPointerException is happening, and preventing the error from being recorded to the database and therefore making it look like a successful deployment (because one of the conditions that determines success is if the gce_keywordError table is empty).
log file on server: /var/local/tsa/log/tsa-admax-jmslistener/tsa-admax-jmslistener.log.2012-11-06
one example keyword triggering error: audi dealership Hawaii, United States
select gce_keyword., e. from gce_adGroup join gce_keyword on (adGroupID=gce_adGroup.id) left join gce_keywordError e on (gce_keyword.id=keywordID) where campaignID in (8,9,10);
Google error: CriterionError.KEYWORD_HAS_INVALID_CHARS
tsa-admax-jmslistener.log.2012-11-06
query (NULL searchEngineIdentifier, no row in gce_keywordError table). keywordID = 319, 320, 321,322,323,324.
select gce_keyword., e. from gce_adGroup join gce_keyword on (adGroupID=gce_adGroup.id) left join gce_keywordError e on (gce_keyword.id=keywordID) where campaignID in (8,9,10);
stack trace
2012-11-02 12:10:34.999 (3) [pool-18-thread-2]: ApiError found during BaseChangeRequest.validate(): CriterionError.KEYWORD_HAS_INVALID_CHARS
2012-11-02 12:10:34.999 (3) [pool-18-thread-2]: ApiError found during BaseChangeRequest.validate(): CriterionError.KEYWORD_HAS_INVALID_CHARS
2012-11-02 12:10:34.999 (3) [pool-18-thread-2]: ApiError found during BaseChangeRequest.validate(): CriterionError.KEYWORD_HAS_INVALID_CHARS
2012-11-02 12:10:34.999 (3) [pool-18-thread-2]: ApiError found during BaseChangeRequest.validate(): CriterionError.KEYWORD_HAS_INVALID_CHARS
2012-11-02 12:10:34.999 (3) [pool-18-thread-2]: ApiError found during BaseChangeRequest.validate(): CriterionError.KEYWORD_HAS_INVALID_CHARS
2012-11-02 12:10:34.999 (3) [pool-18-thread-2]: ApiError found during BaseChangeRequest.validate(): CriterionError.KEYWORD_HAS_INVALID_CHARS
2012-11-02 12:10:35.009 (2) [pool-18-thread-2]: Exception [SEUser 7 KeywordChangeRequest add request: error processing 6 pending add(s)]:java.lang.NullPointerException
at com.thesearchagency.searchengines.google.GoogleAdWordsAPI.getReason(GoogleAdWordsAPI.java:6417)
at com.thesearchagency.searchengines.google.contenteditor.changerequest.ChangeRequestItemGroup.getErrorMap(ChangeRequestItemGroup.java:97)
at com.thesearchagency.searchengines.google.contenteditor.changerequest.ChangeRequestItemGroup.init(ChangeRequestItemGroup.java:60)
at com.thesearchagency.searchengines.google.contenteditor.changerequest.ChangeRequestItemGroup.<init>(ChangeRequestItemGroup.java:40)
at com.thesearchagency.searchengines.google.contenteditor.changerequest.BaseChangeRequest.associateAndGroupAPIErrors(BaseChangeRequest.java:471)
at com.thesearchagency.searchengines.google.contenteditor.changerequest.BaseChangeRequest.validate(BaseChangeRequest.java:506)
at com.thesearchagency.searchengines.google.contenteditor.changerequest.BaseChangeRequest.makeRequest(BaseChangeRequest.java:101)
at com.thesearchagency.searchengines.google.contenteditor.GoogleContentEditor$RequestWorker.call(GoogleContentEditor.java:1442)
at com.thesearchagency.searchengines.google.contenteditor.GoogleContentEditor$RequestWorker.call(GoogleContentEditor.java:1419)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
2012-11-02 12:10:35.009 (2) [pool-18-thread-2]: KeywordDAO: database is null