Running AddAdGroupBidModifier.java returns Axisfault

55 views
Skip to first unread message

Dev Gupta

unread,
Jan 27, 2015, 5:10:54 PM1/27/15
to adwor...@googlegroups.com
Hello,

I am trying to the run the AddAdGroupBidModifier.java using my test account credentials as below; i have replaced the key credentials with xxxx

api.adwords.email=sxxx...@gmail.com
api.adwords.password=xxxxxxxxxxx
api.adwords.clientCustomerId=5xx-xxx-xx63
# Optional, for cached AuthTokens.
#api.adwords.clientLoginToken=INSERT_AUTH_TOKEN_HERE
api.adwords.userAgent=SXXXXXXX
api.adwords.developerToken=Hxxxxxxxxxxxxxxxxxxxxw
api.adwords.isPartialFailure=false
api.adwords.returnMoneyInMicros=true
api.adwords.clientId=447989528545.apps.googleusercontent.com
api.adwords.clientSecret=xxxxxxxxxxxxxx
api.adwords.refreshToken=xxxxxxxxxxxxxxxxxx

The code i am running is

public class AddAdGroupBidModifier {

  private static final double BID_MODIFIER = 2.5;

  public static void main(String[] args) throws Exception {
    // Generate a refreshable OAuth2 credential similar to a ClientLogin token
    // and can be used in place of a service account.
    Credential oAuth2Credential = new OfflineCredentials.Builder()
        .forApi(Api.ADWORDS)
        .fromFile("C:\\Users\\devrajg\\workspace\\MovieDB\\web\\properties\\ads.properties")
        .build()
        .generateCredential();

    // Construct an AdWordsSession.
    AdWordsSession session = new AdWordsSession.Builder()
        .fromFile("C:\\Users\\devrajg\\workspace\\MovieDB\\web\\properties\\ads.properties")
        .withOAuth2Credential(oAuth2Credential)
        .build();

    //Long adGroupId = Long.valueOf("INSERT_ADGROUP_ID_HERE");
    Long adGroupId = 17176964687L;

    AdWordsServices adWordsServices = new AdWordsServices();

    runExample(adWordsServices, session, adGroupId);
  }


This did run once and i was able to modify the Bid for a AdGroup successfully (as seen by the print in code).

But when trying to run again i keep getting the below error; stack pasted

log4j:WARN No appenders could be found for logger (org.apache.commons.configuration.PropertiesConfiguration).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server
 faultSubcode:
 faultString: [CriterionError.BID_MODIFIER_ALREADY_EXISTS @ operations[0].operand.criterion; trigger:'AdGroupId AdGroupId: 17176964687, CriterionId CriterionId{id=30001}']
 faultActor:
 faultNode:
 faultDetail:
    {https://adwords.google.com/api/adwords/cm/v201409}ApiExceptionFault:<message>[CriterionError.BID_MODIFIER_ALREADY_EXISTS @ operations[0].operand.criterion; trigger:'AdGroupId AdGroupId: 17176964687, CriterionId CriterionId{id=30001}']</message><ApplicationException.Type>ApiException</ApplicationException.Type><errors xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CriterionError"><fieldPath>operations[0].operand.criterion</fieldPath><trigger>AdGroupId AdGroupId: 17176964687, CriterionId CriterionId{id=30001}</trigger><errorString>CriterionError.BID_MODIFIER_ALREADY_EXISTS</errorString><ApiError.Type>CriterionError</ApiError.Type><reason>BID_MODIFIER_ALREADY_EXISTS</reason></errors>

[CriterionError.BID_MODIFIER_ALREADY_EXISTS @ operations[0].operand.criterion; trigger:'AdGroupId AdGroupId: 17176964687, CriterionId CriterionId{id=30001}']
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeserializer.java:104)
    at org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeserializer.java:90)
    at com.google.api.ads.adwords.axis.v201409.cm.ApiException.getDeserializer(ApiException.java:143)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.axis.encoding.ser.BaseDeserializerFactory.getSpecialized(BaseDeserializerFactory.java:154)
    at org.apache.axis.encoding.ser.BaseDeserializerFactory.getDeserializerAs(BaseDeserializerFactory.java:84)
    at org.apache.axis.encoding.DeserializationContext.getDeserializer(DeserializationContext.java:464)
    at org.apache.axis.encoding.DeserializationContext.getDeserializerForType(DeserializationContext.java:547)
    at org.apache.axis.message.SOAPFaultDetailsBuilder.onStartChild(SOAPFaultDetailsBuilder.java:157)
    at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(Unknown Source)
    at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
    at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
    at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
    at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:796)
    at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)
    at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
    at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
    at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
    at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
    at org.apache.axis.client.Call.invoke(Call.java:2767)
    at org.apache.axis.client.Call.invoke(Call.java:2443)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)
    at com.google.api.ads.adwords.axis.v201409.cm.AdGroupBidModifierServiceSoapBindingStub.mutate(AdGroupBidModifierServiceSoapBindingStub.java:739)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

Can some one please have a look at this?

Thanks,
-Devraj

Josh Radcliff (AdWords API Team)

unread,
Jan 27, 2015, 5:27:28 PM1/27/15
to adwor...@googlegroups.com
Hi Devraj,

The key here is to look at the error message:

CriterionError.BID_MODIFIER_ALREADY_EXISTS

That error means that you are trying to ADD a bid modifier that already exists for the ad group. As mentioned in the AddAdGroupBidModifier.java example:

    // Use 'ADD' to add a new modifier and 'SET' to update an existing one. A
    // modifier can be removed with the 'REMOVE' operator.
    operation.setOperator(Operator.ADD);

If you change the line above to use the SET operator when updating an existing bid modifier, the example should run successfully.

Thanks,
Josh, AdWords API Team

Dev Gupta

unread,
Jan 27, 2015, 8:29:44 PM1/27/15
to adwor...@googlegroups.com
Thanks Josh; you are right. This was fixed with SET.

Thanks for your prompt reply.

-Devraj
Reply all
Reply to author
Forward
0 new messages