AnsweredAssumed Answered

Android SDK queryRelated objects fails with java.io.IOException

Question asked by kescalerageosystems-cc-esridist Employee on Nov 20, 2015
Latest reply on Dec 2, 2015 by kescalerageosystems-cc-esridist

We have developed an Android App that connects to a Federated ArcGIS Server services using a Web Map., the app does a lot of things, besides charging the web map, and it works on an environment development environment where the web adaptors (of ArcGIS Server and Portal) are directly accesible through Internet.

 

Now, we have mudated to a production environment where whe have a reverse proxy on top of the servers where the Web Adaptors reside, and the applications fails in the query related data with a generic exception:

 

6804-6804/com.segip.verificadores E/com.segip.verificadores.view.OnlineEditionMapActivity﹕ Error al ejecutar related query : null

   java.io.IOException

           at java.io.InputStream.reset(InputStream.java:218)

           at com.esri.core.geodatabase.GeodatabaseFeatureServiceTable.a(SourceFile:946)

           at com.esri.core.geodatabase.GeodatabaseFeatureServiceTable.a(SourceFile:113)

           at com.esri.core.geodatabase.GeodatabaseFeatureServiceTable$2.a(SourceFile:2159)

           at com.esri.core.geodatabase.GeodatabaseFeatureServiceTable$2.call(SourceFile:2114)

           at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

           at java.util.concurrent.FutureTask.run(FutureTask.java:137)

           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)

           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)

           at java.lang.Thread.run(Thread.java:856)

 

 

The rare part is the it doens't fail when the query ralated objects reieves only 7 or less objectIds, when we pass 8 or more it fails with this exception.

 

I have reviewed the ArcGIS Server Logs and it seems that the query has been processed just fine in the server, I also tested the related query from Services Directory, and it also Works, it is just when using the Android App, I don't know what else to do. I'm thinking that my Reverse Proxy could be the problem, but all of my services are being used by another web applications through the same Reverse Proxy and it works. My reverse Proxy is an IIS Web Site configured with URL Re Write with rules to my Server where the Web Adaptors are located.

 

 

final RelatedQueryParameters relatedQueryParameters = new RelatedQueryParameters();

relatedQueryParameters.setObjectIds(oids);

relatedQueryParameters.setRelationshipId(0);

relatedQueryParameters.setOutFields(new String[]{"estado_verificacion", "objectid"});

relatedQueryParameters.setReturnGeometry(false);

GlobalContext.featureServiceTableDomicilio = new GeodatabaseFeatureServiceTable(SettingContext.FEATURE_SERVER_DOMICILIO, GlobalContext.credentials, 0);

GlobalContext.featureServiceTableDomicilio.initialize(new CallbackListener<GeodatabaseFeatureServiceTable.Status>() {

    @Override

    public void onCallback(GeodatabaseFeatureServiceTable.Status status) {

        GlobalContext.featureServiceTableDomicilio.queryRelated(relatedQueryParameters, new CallbackListener<Map<Long, FeatureResult>>()

            {

                @Override

                public void onCallback(Map<Long, FeatureResult> longFeatureResultMap) {

                ........

                }

 

                @Override

                public void onError(final Throwable throwable) {

                    runOnUiThread(new Runnable() {

                        @Override

                        public void run() {

                            log.error("Error al ejecutar related query : " + throwable.getMessage(), throwable);

                            ...........

                        }

                    });

                }

            }

        );

    }

 

    @Override

    public void onError(final Throwable throwable) {

        runOnUiThread(new Runnable() {

            @Override

            public void run() {

                log.error("Erro al cargar datos : " + throwable, throwable);

                .......

            }

        });

    }

});

Outcomes