<%@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); } %>
I was able to resolve the issue by logging in as agsadmin, the service account running the server then attempt to access arcgisonline via browser. Turns out, in our domain, service accounts aren't configured to be able to access the internet. All I had to do was open internet options and fill in proxy information.
AR,
Make sure that http://services.arcgisonline.com/ArcGIS/rest/services/ is explicitly added in the proxy configuration serverUrls list. I didn't see it listed in your code example. Once that is done then try running the print task again.
If it's still not working then please run thru the suggestions below to see if any of those help.
-Andy