AnsweredAssumed Answered

Export Web Map Task Error: "Unable to connect to map server..."

Question asked by roessera on May 2, 2012
Latest reply on Dec 1, 2014 by agup-esristaff
I receive this error anytime I try to print any base map from http://services.arcgisonline.com.

If I remove the base map from my code, it prints fine.

(From Firebug console:)
"Error executing tool.: Layer "layer0": Unable to connect to map server at http://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer. Failed to execute (Export Web Map). Failed to execute (Export Web Map Task)."

I get a gut-feeling it has something to do with my server's proxy, but I'm not sure.

Any thoughts?

Here is the proxy I'm using:

<%@page session="false"%>
<%@page import="java.net.*,java.io.*" %>
<%!
String[] serverUrls = {
  //"<url>[,<token>]"
  //For ex. (secured server): "http://myserver.mycompany.com/arcgis/rest/services,ayn2C2iPvqjeqWoXwV6rjmr43kyo23mhIPnXz2CEiMA6rVu0xR0St8gKsd0olv8a"
  //For ex. (non-secured server): "http://sampleserver1.arcgisonline.com/arcgis/rest/services"
  "http://sampleserver1.arcgisonline.com/arcgis/rest/services",
  "http://***/arcgis/rest/services, username=***",// username=***
  "http://server.arcgisonline.com/ArcGIS/rest/services",
  "http://***/ArcGIS/rest/services, username=***&password=***",
  "http://servicesbeta4.esri.com/arcgis/rest/services/",
  "http://sampleserver2.arcgisonline.com/arcgis/rest/services" 
};
%>
<%
try {
  String reqUrl = request.getQueryString();
  boolean allowed = false;
  String token = null;
  for(String surl : serverUrls) {
    String[] stokens = surl.split("\\s*,\\s*");
    if(reqUrl.toLowerCase().contains(stokens[0].toLowerCase())) {
      allowed = true;
      if(stokens.length >= 2 && stokens[1].length() > 0)
        token = stokens[1];
      break;
    }
  }
  if(!allowed) {
    response.setStatus(403);
    return;
  }
  if(token != null) {
    reqUrl = reqUrl + (reqUrl.indexOf("?") > -1 ? "&" : "?") + "token=" + token;
  }
  URL url = new URL(reqUrl);
 HttpURLConnection con = (HttpURLConnection)url.openConnection();
 con.setDoOutput(true);
 con.setRequestMethod(request.getMethod());
 if(request.getContentType() != null) {
   con.setRequestProperty("Content-Type", request.getContentType());
 }
  con.setRequestProperty("Referer", request.getHeader("Referer"));
 int clength = request.getContentLength();
 if(clength > 0) {
  con.setDoInput(true);
  InputStream istream = request.getInputStream();
  OutputStream os = con.getOutputStream();
  final int length = 5000;
   byte[] bytes = new byte[length];
   int bytesRead = 0;
   while ((bytesRead = istream.read(bytes, 0, length)) > 0) {
     os.write(bytes, 0, bytesRead);
   }
 }
  else {
    con.setRequestMethod("GET");
  }
 out.clear();
  out = pageContext.pushBody();
 OutputStream ostream = response.getOutputStream();
 response.setContentType(con.getContentType());
 InputStream in = con.getInputStream();
 final int length = 5000;
  byte[] bytes = new byte[length];
  int bytesRead = 0;
  while ((bytesRead = in.read(bytes, 0, length)) > 0) {
    ostream.write(bytes, 0, bytesRead);
  }
} catch(Exception e) {
 response.setStatus(500);
}
%>


Outcomes