Error - Reflection is not allowed on private - App Engine

465 views
Skip to first unread message

Anders H

unread,
Dec 8, 2013, 12:09:10 PM12/8/13
to adwor...@googlegroups.com

I am running the GetAccountHierarchy.java example on App Engine with JAX-WS. The application is created using Apache Maven for dependencies and the imported jaxws classes are from adwords-appengine-1.22.0.jar.

When running the app on appspot I get an exception that doesn't tell me much about what could be the problem.

This is the piece of code that throws the exception:
    // Get the ServicedAccountService.
    ManagedCustomerServiceInterface managedCustomerService =
         adWordsServices.get(session, ManagedCustomerServiceInterface.class);

This is the exception:
2013-12-08 11:55:53.087
com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection <init>: Unable to make javax.xml.ws.wsaddressing.W3CEndpointReference.address accessible.
java.lang.SecurityException: java.lang.IllegalAccessException: Reflection is not allowed on private javax.xml.ws.wsaddressing.W3CEndpointReference$Address javax.xml.ws.wsaddressing.W3CEndpointReference.address
	at com.google.appengine.runtime.Request.process-44627206b54ccbe5(Request.java)
	at com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection.<init>(Accessor.java:243)
	at com.sun.xml.bind.AccessorFactoryImpl.createFieldAccessor(AccessorFactoryImpl.java:66)
	at com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl.createFieldSeed(RuntimeClassInfoImpl.java:252)
	at com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl.createFieldSeed(RuntimeClassInfoImpl.java:81)
	at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.findFieldProperties(ClassInfoImpl.java:405)
	at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.getProperties(ClassInfoImpl.java:308)
	at com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl.getProperties(RuntimeClassInfoImpl.java:176)
	at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:243)
	at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:100)
	at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:81)
	at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:209)
	at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:95)
	at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:81)
	at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:315)
	at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:330)
	at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:466)
	at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:302)
	at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1140)
	at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:154)
	at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:121)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:253)
	at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:240)
	at javax.xml.bind.ContextFinder.find(ContextFinder.java:453)
	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:637)
	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584)
	at com.sun.xml.ws.spi.ProviderImpl$2.run(ProviderImpl.java:220)
	at com.sun.xml.ws.spi.ProviderImpl$2.run(ProviderImpl.java:218)
	at java.security.AccessController.doPrivileged(AccessController.java:34)
	at com.sun.xml.ws.spi.ProviderImpl.getEPRJaxbContext(ProviderImpl.java:217)
	at com.sun.xml.ws.spi.ProviderImpl.<clinit>(ProviderImpl.java:88)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
	at java.lang.Class.newInstance(Class.java:370)
	at javax.xml.ws.spi.FactoryFinder.newInstance(FactoryFinder.java:49)
	at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:134)
	at javax.xml.ws.spi.Provider.provider(Provider.java:127)
	at javax.xml.ws.Service.<init>(Service.java:77)
	at com.google.api.ads.adwords.jaxws.v201309.mcm.ManagedCustomerService.<init>(ManagedCustomerService.java:42)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:33)
	at com.google.api.ads.common.lib.soap.jaxws.JaxWsHandler.createSoapClient(JaxWsHandler.java:185)
	at com.google.api.ads.common.lib.soap.jaxws.JaxWsHandler.createSoapClient(JaxWsHandler.java:1)
	at com.google.api.ads.common.lib.factory.helper.BaseAdsServiceClientFactoryHelper.createSoapClient(BaseAdsServiceClientFactoryHelper.java:106)
	at com.google.api.ads.common.lib.factory.helper.BaseAdsServiceClientFactoryHelper.createAdsServiceClient(BaseAdsServiceClientFactoryHelper.java:71)
	at com.google.api.ads.common.lib.factory.AdsServiceClientFactory.getServiceClient(AdsServiceClientFactory.java:73)
	at com.google.api.ads.common.lib.factory.BaseAdsServiceClientFactory.getServiceClientAsInterface(BaseAdsServiceClientFactory.java:79)
	at com.google.api.ads.common.lib.factory.BaseServices.get(BaseServices.java:60)
	at jaxwsdemo.GetAccountHierarchy.runExample(GetAccountHierarchy.java:84)
	at jaxwsdemo.GetAccountHierarchy.main(GetAccountHierarchy.java:78)
	at adwapi.RunExample.doGet(RunExample.java:39)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:326)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
	at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
	at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:435)
	at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:442)
	at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:186)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:306)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:298)
	at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:439)
	at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.IllegalAccessException: Reflection is not allowed on private javax.xml.ws.wsaddressing.W3CEndpointReference$Address javax.xml.ws.wsaddressing.W3CEndpointReference.address
	... 83 more

I have really been struggling to get AdWords API to work on App Engine, so I really hope that someone can help with this problem.

Thanks,
Anders

Takeshi Hagikura (AdWords API Team)

unread,
Dec 11, 2013, 2:05:41 PM12/11/13
to adwor...@googlegroups.com
Hi, 

Looks like one of your jars that has binding of jaxws is competing with the Java native implementation.
You need to include only needed jars.
At least dfp-playground works with the Java library with jaxws on appengine. 

Can you please refer to its pom.xml first?
At least you need to change the dfp part to adwords like this. 

  <dependency>
    <groupId>com.google.api-ads</groupId>
    <artifactId>dfp-appengine</artifactId>
  <version>1.18.0</version> | v
  <dependency>
    <groupId>com.google.api-ads</groupId>
    <artifactId>adwords-appengine</artifactId>
  <version>1.18.0</version>

Best,
- Takeshi

Anders H

unread,
Dec 11, 2013, 5:47:07 PM12/11/13
to adwor...@googlegroups.com
Hi,

All imported jaxws classes in the Java app are from: com.google.api.ads.adwords.jaxws.v201309.

I have included the pom.xml being used for reference.

Thanks,
Anders
pom.xml

Anders H

unread,
Dec 16, 2013, 5:20:15 AM12/16/13
to adwor...@googlegroups.com
Just to make sure that the problem is not related to Eclipse / m2e, I have also tried to set up and compile the project using Maven, but without using Eclipse. The result was the same.

Takeshi Hagikura (AdWords API Team)

unread,
Dec 17, 2013, 10:15:52 PM12/17/13
to adwor...@googlegroups.com
Hi Andres, 

Apologies for the delay. 
At least I got it to work to call the AdWords API services (CampaignService) with the dependencies in the same pom.xml as DfpPlayground + adwords-appengine dependency.

  <dependency>
    <groupId>com.google.api-ads</groupId>
    <artifactId>adwords-appengine</artifactId>
  <version>1.18.0</version>

Can you please try start with that pom.xml first?
I'm not sure which one of all jars you included has the conflict, but at least starting with the pom.xml is the good start.

Best,
- Takeshi, AdWords API Team

Anders H

unread,
Dec 18, 2013, 6:26:48 PM12/18/13
to adwor...@googlegroups.com
Hi Takeshi,

The different artifact versions from the DfpPlayground pom.xml seems to be quite old. The version used in the example for adwords-appengine is 1.18.0, but the newest version I could find is 1.22.0. I normally try to use the latest stable versions of software components, to get better stability and more functions. Is it documented anywhere which versions should be used for AdWords/appengine?

I tried to use the pom.xml as you suggested, but when I start the devserver I get the following error:
[ERROR] Failed to execute goal com.google.appengine:appengine-maven-plugin:1.8.2:devserver (default-cli) on project dfp-
api-playground: Execution default-cli of goal com.google.appengine:appengine-maven-plugin:1.8.2:devserver failed: A requ
ired class was missing while executing com.google.appengine:appengine-maven-plugin:1.8.2:devserver: Lorg/sonatype/aether
/RepositorySystem;
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/AetherClassNotFound


It looks like there is a problem with the version of Maven that I am using (Maven 3.1.1) and I hope that there is an alternative, so I don't have to downgrade Maven to an older version.

Best,
Anders

Takeshi Hagikura (AdWords API Team)

unread,
Dec 18, 2013, 8:36:38 PM12/18/13
to adwor...@googlegroups.com
Hi Andres,

Can you please try the 1.8.3 appengine-maven-plugin?

Best,
- Takeshi, 

Anders H

unread,
Dec 19, 2013, 7:27:48 AM12/19/13
to adwor...@googlegroups.com
Hi Takeshi,

It helped trying with 1.8.3 on the devserver and I get a nice list of accounts from the MCC, but when uploading to appspot, I still get the error: Reflection is not allowed on private.The error is the same on both the test and prod mcc when running on appspot.

Best,
Anders.

Takeshi Hagikura (AdWords API Team)

unread,
Dec 20, 2013, 3:45:30 AM12/20/13
to adwor...@googlegroups.com
Hi Andres,

For your reference, this is the pom.xml I used, that worked devserver and appspot.com as well. 

Best,
- Takeshi, AdWords API Team

<?xml version="1.0" encoding="UTF-8"?>
<!--
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
-->

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.google.dfpapi.playground</groupId>
  <artifactId>dfp-api-playground</artifactId>
  <version>test</version>

  <packaging>war</packaging>
  <name>DFP API Playground using AppEngine</name>
  <description>
    An AppEngine project showing the use of the Google Ads Java client libraries
    for DFP API.
  </description>

  <properties>
    <appengine.app.version>1</appengine.app.version>
    <appengine.target.version>1.8.2</appengine.target.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>1.8.3</version>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
        <version>1.3.1</version>
        <configuration>
          <generateBackupPoms>false</generateBackupPoms>
          <includes>
            <include>com.google.api-ads:*</include>
            <include>com.google.http-client:*</include>
          </includes>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <version>2.5.1</version>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <archiveClasses>true</archiveClasses>
          <webResources>
              <!-- in order to interpolate version from pom into appengine-web.xml -->
              <resource>
                  <directory>${basedir}/src/main/webapp/WEB-INF</directory>
                  <filtering>true</filtering>
                  <targetPath>WEB-INF</targetPath>
              </resource>
          </webResources>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <!-- Ads client library dependencies -->
    <dependency>
      <groupId>com.google.api-ads</groupId>
      <artifactId>ads-lib</artifactId>
      <version>1.18.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.api-ads</groupId>
      <artifactId>dfp-appengine</artifactId>
      <version>1.18.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.api-ads</groupId>
      <artifactId>adwords-appengine</artifactId>
      <version>1.18.0</version>
    </dependency>
    <!-- Third party dependencies -->
    <!-- Configuration to use log4j for logging -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.16</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.6.2</version>
    </dependency>
    <dependency>
      <groupId>javax.jdo</groupId>
      <artifactId>jdo2-api</artifactId>
      <version>2.3-eb</version>
      <exclusions>
        <!-- exclude the legacy javax.transaction:transaction-api and replace it
            with javax.transaction:jta (it appears to be the same thing) -->
        <exclusion>
          <groupId>javax.transaction</groupId>
          <artifactId>transaction-api</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>javax.transaction</groupId>
      <artifactId>jta</artifactId>
      <version>1.1</version>
    </dependency>
    <dependency>
      <groupId>com.google.appengine.orm</groupId>
      <artifactId>datanucleus-appengine</artifactId>
      <version>1.0.4.1</version>
    </dependency>
    <dependency>
      <groupId>org.datanucleus</groupId>
      <artifactId>datanucleus-core</artifactId>
      <version>1.1.5</version>
      <exclusions>
        <exclusion>
          <groupId>javax.transaction</groupId>
          <artifactId>transaction-api</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.datanucleus</groupId>
      <artifactId>datanucleus-jpa</artifactId>
      <version>1.1.5</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-jpa_3.0_spec</artifactId>
      <version>1.1.1</version>
      <scope>runtime</scope>
    </dependency>

    <!-- AppEngine plugin dependencies -->
    <dependency>
      <groupId>com.google.appengine</groupId>
      <artifactId>appengine-api-1.0-sdk</artifactId>
      <version>${appengine.target.version}</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <!-- Project dependencies -->
    <dependency>
      <groupId>com.google.inject.extensions</groupId>
      <artifactId>guice-multibindings</artifactId>
      <version>3.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.inject.extensions</groupId>
      <artifactId>guice-servlet</artifactId>
      <version>3.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.2.2</version>
    </dependency>
    <dependency>
      <groupId>com.google.http-client</groupId>
      <artifactId>google-http-client-jackson2</artifactId>
      <version>1.16.0-rc</version>
    </dependency>
    <dependency>
      <groupId>xerces</groupId>
      <artifactId>xercesImpl</artifactId>
      <version>2.10.0</version>
    </dependency>

    <!-- Testing dependencies -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-all</artifactId>
      <version>1.8.5</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.google.appengine</groupId>
      <artifactId>appengine-testing</artifactId>
      <version>${appengine.target.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.google.appengine</groupId>
      <artifactId>appengine-api-stubs</artifactId>
      <version>${appengine.target.version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Anders H

unread,
Dec 21, 2013, 12:22:51 PM12/21/13
to adwor...@googlegroups.com
Hi Takeshi,

Same result with your pom.xml.

From the statement:

    ManagedCustomerServiceInterface managedCustomerService =
            adWordsServices.get(session, ManagedCustomerServiceInterface.class);

com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection <init>: Unable to make javax.xml.ws.wsaddressing.W3CEndpointReference.address accessible.
java.lang.SecurityException: java.lang.IllegalAccessException: Reflection is not allowed on private javax.xml.ws.wsaddressing.W3CEndpointReference$Address javax.xml.ws.wsaddressing.W3CEndpointReference.address

What does this exception mean?

Best,
André

Takeshi Hagikura (AdWords API Team)

unread,
Dec 23, 2013, 11:26:08 PM12/23/13
to adwor...@googlegroups.com
Hi Anders,

The error still looks there is an jar that conflicts the native implementation. 
Let me confirm, do you upload your sources to appengine using "mvn appengine:update"?

I just wanted to make sure unneeded jars are included. 

Best,
- Takeshi, AdWords API Team

Takeshi Hagikura (AdWords API Team)

unread,
Dec 23, 2013, 11:46:47 PM12/23/13
to adwor...@googlegroups.com
Also is it possible to look your code snippet especially initializing AdWordsSession, AdWordsServices, and ManagedCustomerServiceInterface.

Best,
- Takeshi, 

Anders H

unread,
Dec 24, 2013, 6:42:07 AM12/24/13
to adwor...@googlegroups.com
Hi Takeshi,

Yes, I can confirm that I have both compiled the sources with "mvn verify" from the command prompt and uploaded with "mvn appengine:update".

Best,
Anders

Anders H

unread,
Dec 24, 2013, 7:31:05 AM12/24/13
to adwor...@googlegroups.com
Hi Takeshi,

The attached code snippet will reproduce the exception when run on appspot.

Somehow the devserver cannot read the "ads.properties" file, so I am using the ".withClientSecrets" method instead of the ".fromFile" that are used in the examples.

Best,
Anders.
RunExample.java
GetAccountHierarchy2.java

Takeshi Hagikura (AdWords API Team)

unread,
Dec 25, 2013, 1:19:19 AM12/25/13
to adwor...@googlegroups.com
Hi Anders,

I'm still not sure whether your code or environment (like unneeded jars are included) causes the error.
(Obviously the main method is not intended to be invoked from another class though)

I've put together a simple demo app based on the dfp playground code that just fetches the existing campaigns in an account and 
prints to jsp.
At least the code worked on both devserver and appspot.com

Can you try that if your appengine instance works?

Best,
- Takeshi, AdWords API Team

Anders H

unread,
Dec 30, 2013, 5:09:00 PM12/30/13
to adwor...@googlegroups.com
Hi Takeshi,

Thanks for uploading your demo app which I have been able to run without any issues. My situation is a little different from your demo app as I will be using Oauth2.0 offline credentials for my project, but I will surely study your example for further inspiration.

Is there any special reason to why you are using the appengine-web.xml file for credentials instead of the ads.properties file? I am asking because I have only been able to get it working on the devserver.

Best,
Anders

Anders H

unread,
Jan 3, 2014, 4:07:19 AM1/3/14
to adwor...@googlegroups.com
Hi, Takeshi,

Correction sorry, I have NOT been able to read the ads.properties file on the devserver (.fromFile() ), it only works on appspot.

Best,
Anders
Reply all
Reply to author
Forward
0 new messages