Re: Remote HTTP fetch from Server not working?
Hello, I'm having a similar issue where my servlet can not reach a URL within my company's intranet. My company has a proxy and firewall, but I've written other servlets that don't have any issue reaching URLs on my intranet. It's possible that gwt requires me to manually specify a proxy, but I've noticed trying to use the java.net.Proxy class is unsupported by appengine, and was wondering if anyone had other methods of connecting. I will paste the code below, with the exception. I've tried this in development mode and I've tried creating a war and posting it to my company's sunone server. No luck either way. System.setProperty(http.proxyHost, my-company-proxy); System.setProperty(http.proxyPort, 80); String urlStr = http://my-company-intranet.com;; try { StringWriter content = new StringWriter(); URL url = new URL(urlStr); // Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(my-company-proxy.com, 80)); URLConnection spoof = url.openConnection(); InputStream i = spoof.getInputStream(); spoof.setRequestProperty(User-Agent, Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; H010818) ); InputStreamReader isr = new InputStreamReader(i); BufferedReader in = new BufferedReader(isr); and the exception is... Initializing AppEngine server The server is running at http://localhost:/ java.io.IOException: Could not fetch URL: http://my-company-intranet.com at com.google.appengine.api.urlfetch.URLFetchServiceImpl.handleApplicationException(URLFetchServiceImpl.java: 75) at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java: 45) at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler $Connection.fetchResponse(URLFetchServiceStreamHandler.java:409) at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler $Connection.getInputStream(URLFetchServiceStreamHandler.java:290) at myproject.server.search.GreetingServiceImpl.getURLTextContent(GreetingServiceImpl.java: 118) at myproject.server.search.GreetingServiceImpl.greetServer(GreetingServiceImpl.java: 50) 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 com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java: 100) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java: 562) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java: 188) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java: 224) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java: 62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:713) at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java: 487) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1093) at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java: 51) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java: 43) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java: 121) at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1084) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java: 360) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java: 216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java: 181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java: 712) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: 405) at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java: 70) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java: 139) at com.google.appengine.tools.development.JettyContainerService $ApiProxyHandler.handle(JettyContainerService.java:352) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java: 139) at
Re: Remote HTTP fetch from Server not working?
If you're not actually deploying to the App Engine environment you can remove the GAE class restrictions in the GWT plugin options and use whatever classes you want. On Mar 16, 10:09 pm, vegbenz veggieb...@gmail.com wrote: So I discovered that I need to add any extra libraries into /war/WEB- INF/lib -- added apache httpclient, apache logging, and apache codec jars. Now I get this error --- java.net.Socket is a restricted class. Please see the Google App Engine developer's guide But the gwt docs seem to suggest i can use anything i want on the server side: Tip: Although GWT translates Java into JavaScript for client-side code, GWT does not meddle with your ability to run Java bytecode on your server whatsoever. Server-side code doesn't need to be translatable, so you're free to use any Java library you find useful. Well this one would be useful... any ideas why it is a restricted class? and what that means? Anecdotally i saw that I should be able to use URLConnection? I guess I'll try that. Thanks! On Mar 16, 11:43 am, vegbenz veggieb...@gmail.com wrote: Hi, when i run the code below as standalone pojo, it works fine, but in my GreetingServiceImpl on server it returns 500 error; ** please note i DO want to do this from the server. i saw the tutorial about adding script tags to accomplish this from the client. I need to do the fetch from the server side for other reasons. thanks! import java.io.IOException; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; public class TestRemoteCall { public static void main(String args[]) { HttpClient client = new HttpClient(); GetMethod method = new GetMethod(http://waterdata.usgs.gov/tx/nwis/ current/? type=flowgroup_key=basin_cdsearch_site_no_station_nm=barton); // Provide custom retry handler is necessary method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); try { // Execute the method. int statusCode = client.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { System.err.println(Method failed: + method.getStatusLine()); } // Read the response body. byte[] responseBody = method.getResponseBody(); // Deal with the response. // Use caution: ensure correct character encoding and is not binary data // System.out.println(new String(responseBody)); System.out.println(new String(responseBody)); } catch (HttpException he) { System.err.println(Fatal protocol violation: + he.getMessage()); he.printStackTrace(); } catch (IOException e) { System.err.println(Fatal transport error: + e.getMessage()); e.printStackTrace(); } finally { // Release the connection. method.releaseConnection(); } } } HERE is the error message import java.io.IOException; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; public class TestRemoteCall { public static void main(String args[]) { HttpClient client = new HttpClient(); GetMethod method = new GetMethod(http://waterdata.usgs.gov/tx/nwis/ current/? type=flowgroup_key=basin_cdsearch_site_no_station_nm=barton); // Provide custom retry handler is necessary method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); try { // Execute the method. int statusCode = client.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { System.err.println(Method failed: + method.getStatusLine()); } // Read the response body. byte[]
Remote HTTP fetch from Server not working?
Hi, when i run the code below as standalone pojo, it works fine, but in my GreetingServiceImpl on server it returns 500 error; ** please note i DO want to do this from the server. i saw the tutorial about adding script tags to accomplish this from the client. I need to do the fetch from the server side for other reasons. thanks! import java.io.IOException; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; public class TestRemoteCall { public static void main(String args[]) { HttpClient client = new HttpClient(); GetMethod method = new GetMethod(http://waterdata.usgs.gov/tx/nwis/ current/? type=flowgroup_key=basin_cdsearch_site_no_station_nm=barton); // Provide custom retry handler is necessary method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); try { // Execute the method. int statusCode = client.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { System.err.println(Method failed: + method.getStatusLine()); } // Read the response body. byte[] responseBody = method.getResponseBody(); // Deal with the response. // Use caution: ensure correct character encoding and is not binary data // System.out.println(new String(responseBody)); System.out.println(new String(responseBody)); } catch (HttpException he) { System.err.println(Fatal protocol violation: + he.getMessage()); he.printStackTrace(); } catch (IOException e) { System.err.println(Fatal transport error: + e.getMessage()); e.printStackTrace(); } finally { // Release the connection. method.releaseConnection(); } } } HERE is the error message import java.io.IOException; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; public class TestRemoteCall { public static void main(String args[]) { HttpClient client = new HttpClient(); GetMethod method = new GetMethod(http://waterdata.usgs.gov/tx/nwis/ current/? type=flowgroup_key=basin_cdsearch_site_no_station_nm=barton); // Provide custom retry handler is necessary method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); try { // Execute the method. int statusCode = client.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { System.err.println(Method failed: + method.getStatusLine()); } // Read the response body. byte[] responseBody = method.getResponseBody(); // Deal with the response. // Use caution: ensure correct character encoding and is not binary data // System.out.println(new String(responseBody)); System.out.println(new String(responseBody)); } catch (HttpException he) { System.err.println(Fatal protocol violation: + he.getMessage()); he.printStackTrace(); } catch (IOException e) { System.err.println(Fatal transport error: + e.getMessage()); e.printStackTrace(); } finally { // Release the connection. method.releaseConnection(); } } } -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To post to this group, send email to google-web-tool...@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Remote HTTP fetch from Server not working?
So I discovered that I need to add any extra libraries into /war/WEB- INF/lib -- added apache httpclient, apache logging, and apache codec jars. Now I get this error --- java.net.Socket is a restricted class. Please see the Google App Engine developer's guide But the gwt docs seem to suggest i can use anything i want on the server side: Tip: Although GWT translates Java into JavaScript for client-side code, GWT does not meddle with your ability to run Java bytecode on your server whatsoever. Server-side code doesn't need to be translatable, so you're free to use any Java library you find useful. Well this one would be useful... any ideas why it is a restricted class? and what that means? Anecdotally i saw that I should be able to use URLConnection? I guess I'll try that. Thanks! On Mar 16, 11:43 am, vegbenz veggieb...@gmail.com wrote: Hi, when i run the code below as standalone pojo, it works fine, but in my GreetingServiceImpl on server it returns 500 error; ** please note i DO want to do this from the server. i saw the tutorial about adding script tags to accomplish this from the client. I need to do the fetch from the server side for other reasons. thanks! import java.io.IOException; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; public class TestRemoteCall { public static void main(String args[]) { HttpClient client = new HttpClient(); GetMethod method = new GetMethod(http://waterdata.usgs.gov/tx/nwis/ current/? type=flowgroup_key=basin_cdsearch_site_no_station_nm=barton); // Provide custom retry handler is necessary method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); try { // Execute the method. int statusCode = client.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { System.err.println(Method failed: + method.getStatusLine()); } // Read the response body. byte[] responseBody = method.getResponseBody(); // Deal with the response. // Use caution: ensure correct character encoding and is not binary data // System.out.println(new String(responseBody)); System.out.println(new String(responseBody)); } catch (HttpException he) { System.err.println(Fatal protocol violation: + he.getMessage()); he.printStackTrace(); } catch (IOException e) { System.err.println(Fatal transport error: + e.getMessage()); e.printStackTrace(); } finally { // Release the connection. method.releaseConnection(); } } } HERE is the error message import java.io.IOException; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; public class TestRemoteCall { public static void main(String args[]) { HttpClient client = new HttpClient(); GetMethod method = new GetMethod(http://waterdata.usgs.gov/tx/nwis/ current/? type=flowgroup_key=basin_cdsearch_site_no_station_nm=barton); // Provide custom retry handler is necessary method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); try { // Execute the method. int statusCode = client.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { System.err.println(Method failed: + method.getStatusLine()); } // Read the response body. byte[] responseBody = method.getResponseBody(); // Deal with the response. // Use caution: ensure correct character encoding and is not binary data // System.out.println(new String(responseBody)); System.out.println(new
Re: Remote HTTP fetch from Server not working?
figured it out ! so for the benefit of anybody searching for this problem in the future, here you go: try { java.net.URL url = new URL(input); java.net.URLConnection urlConn = url.openConnection(); urlConn.getContent(); int c; StringBuilder sb = new StringBuilder(); InputStream stream = urlConn.getInputStream(); int i = urlConn.getContentLength(); while (((c=stream.read())!=-1)){// (--i 0){ System.out.print((char)c); sb.append((char)c); } stream.close(); return sb.toString(); } catch (java.io.IOException ioe) { ioe.printStackTrace(); } return null; On Mar 16, 9:09 pm, vegbenz veggieb...@gmail.com wrote: So I discovered that I need to add any extra libraries into /war/WEB- INF/lib -- added apache httpclient, apache logging, and apache codec jars. Now I get this error --- java.net.Socket is a restricted class. Please see the Google App Engine developer's guide But the gwt docs seem to suggest i can use anything i want on the server side: Tip: Although GWT translates Java into JavaScript for client-side code, GWT does not meddle with your ability to run Java bytecode on your server whatsoever. Server-side code doesn't need to be translatable, so you're free to use any Java library you find useful. Well this one would be useful... any ideas why it is a restricted class? and what that means? Anecdotally i saw that I should be able to use URLConnection? I guess I'll try that. Thanks! On Mar 16, 11:43 am, vegbenz veggieb...@gmail.com wrote: Hi, when i run the code below as standalone pojo, it works fine, but in my GreetingServiceImpl on server it returns 500 error; ** please note i DO want to do this from the server. i saw the tutorial about adding script tags to accomplish this from the client. I need to do the fetch from the server side for other reasons. thanks! import java.io.IOException; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; public class TestRemoteCall { public static void main(String args[]) { HttpClient client = new HttpClient(); GetMethod method = new GetMethod(http://waterdata.usgs.gov/tx/nwis/ current/? type=flowgroup_key=basin_cdsearch_site_no_station_nm=barton); // Provide custom retry handler is necessary method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); try { // Execute the method. int statusCode = client.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { System.err.println(Method failed: + method.getStatusLine()); } // Read the response body. byte[] responseBody = method.getResponseBody(); // Deal with the response. // Use caution: ensure correct character encoding and is not binary data // System.out.println(new String(responseBody)); System.out.println(new String(responseBody)); } catch (HttpException he) { System.err.println(Fatal protocol violation: + he.getMessage()); he.printStackTrace(); } catch (IOException e) { System.err.println(Fatal transport error: + e.getMessage()); e.printStackTrace(); } finally { // Release the connection. method.releaseConnection(); } } } HERE is the error message import java.io.IOException; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; public class TestRemoteCall { public static void main(String args[]) {