2012-03-06 75 views
4

后很长一段时间搜索和尝试我现在​​求助:WFS-T xmlhttp帖子长度限制?

我的情况:

  • 我有一个jQuery /的OpenLayers,应用程序,它允许用户创建简单 geoemtries与属性通过WFS-T ...
  • 我在debian6上运行tomcat6(:80-iptables)和geoserver 2.1.3(码头:8181)。 Tomcat和GeoServer的之间的所有交叉域问题都解决了一个简单的JSP代理
  • 用户可以查看我所有的WFS-层没有任何问题,并能 确实创造简单的几何形状

我的问题:

  • 创建更复杂几何图形的用户无法通过 将wfs-t保存。更复杂的意思是所产生的XML-POST内容长度 超过约。 2100个字符。 POST的例如已成功插入2000个字符 。
  • 我挖到Tomcat服务器设置和禁用所有限制 (maxHTTPHeaderSize,maxSavePostSize,......),还提高在GeoServer的-码头网络服务器的 maxpostsize - >没有作用
  • 继响应在该文档的元素的含量被发现:(为0x0的Unicode)当用户创建更复杂的几何形状 错误消息:

org.xml.sax.SAXParseException无效XML字符。在文档的元素内容中找到无效的XML字符(Unicode:0x0)。


  • 我不知道为什么我的XML POST请求引起Unicode的错误每次我多了一个顶点添加到我成功之前插入一个几何形状。
  • 我的请求和响应代码:

successful POST request

successful response

successful POST request headers

not successful POST request

not successful response

not successful POST request headers

my jsp-proxy

我任何提示如何解决我的问题,非常高兴!

由于提前,

干杯休伯特

+0

我解决了这个问题......我的jsp代理无法正常工作。我将openlayers应用程序转移到geoserver webapps文件夹(jetty) - >没有代理需要和所有WFS事务(特别是大的)正在工作...但将来我想在tomcat中托管应用程序,因此我需要一个工作解决方案...我会看看一个tomcat代理解决方案 – user1252188 2012-03-14 12:59:35

回答

1

好过从未:) 下面的代码适用于大型的几何形状(至少对我来说)

哦,是的,这是代码简单jsp代理

<%@page session="false"%> 
<%@page import="java.net.*,java.io.*" %> 
<%@page trimDirectiveWhitespaces="true"%> 
<% 

/** 
* This is a white list proxy that could be used the prevent an error due to 
* JavaScript Same Origin Policy. 
* 
* CAUTION: It might break some sites and it's a security risk because 
* people can use this proxy to browse the web and possibly do bad and/or illegal stuff 
* with it. 
* It can load any content type. 
* This proxy implementation was inspired by the proxy.cgi script of OpenLayers 
* {@link http://openlayers.org} 
* To use this in OpenLayers you have to set OpenLayers.ProxyHost = "Url/To/This/Proxyfile/proxy.jsp?"; 
* within your JavaScript code <br> 
* The base code of the proxy has been provided by SNIPPLR 
* {@link http://snipplr.com/view/17987/jsp-proxy-for-javascript-applications/} 
* 
* @author terrestris GmbH & Co. KG 
* @author Christian Mayer 
* @author Marc Jansen 
* 
* @license BSD see license.txt 
* 
*/ 
String[] allowedHosts = { 
    "www.openlayers.org", "openlayers.org", 
    "labs.metacarta.com", "world.freemap.in", 
    "prototype.openmnnd.org", "geo.openplans.org", 
    "sigma.openplans.org", "demo.opengeo.org", 
    "www.openstreetmap.org", "sample.azavea.com", 
    "v-swe.uni-muenster.de:8080", 
    "vmap0.tiles.osgeo.org", 
    "192.168.197.95:8080" 
}; 
HttpURLConnection con = null; 
try { 
    String reqUrl = request.getQueryString(); 
    String decodedUrl = ""; 
    if (reqUrl != null) { 
     reqUrl = URLDecoder.decode(reqUrl, "UTF-8"); 
    } 
    else { 
     response.setStatus(400); 
     out.println("ERROR 400: No target specified for proxy."); 
    } 

    // extract the host 
    String host = ""; 
    host = reqUrl.split("\\/")[2]; 
    boolean allowed = false; 

    // check if host (with port) is in white list 
    for (String surl : allowedHosts) { 
     if (host.equalsIgnoreCase(surl)) { 
      allowed = true; 
      break; 
     } 
    } 

    // do the proxy action (load requested ressource and transport it to client) 
    // if host is in white list 
    if(allowed) { 
     // replace the white spaces with plus in URL 
     reqUrl = reqUrl.replaceAll(" ", "+"); 

     // call the requested ressource  
     URL url = new URL(reqUrl); 
     con = (HttpURLConnection)url.openConnection(); 
     con.setDoOutput(true); 
     con.setRequestMethod(request.getMethod()); 
     String reqContenType = request.getContentType(); 
     if(reqContenType != null) { 
      con.setRequestProperty("Content-Type", reqContenType); 
     } 
     else { 
      con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     } 

     int clength = request.getContentLength(); 
     if(clength > 0) { 
      /* NOT WORKING FOR LARGE POST BODY 
      con.setDoInput(true); 
      byte[] idata = new byte[clength]; 
      request.getInputStream().read(idata, 0, clength); 
      con.getOutputStream().write(idata, 0, clength); 
      */ 
      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); 
      } 
     } 

     // respond to client 
     response.setContentType(con.getContentType()); 

     BufferedReader rd = new BufferedReader(new InputStreamReader(con.getInputStream())); 
     String line; 
     int i = 0; 
     while ((line = rd.readLine()) != null) { 
      out.println(line); 
     } 
     rd.close(); 
    } 
    else { 
     // deny access via HTTP status code 502 
     response.setStatus(502); 
     out.println("ERROR 502: This proxy does not allow you to access that location."); 
    } 

} catch(Exception e) { 

    // resond an internal server error with the stacktrace 
    // on exception 
    response.setStatus(500); 
    byte[] idata = new byte[5000]; 

    if(con.getErrorStream() != null) { 
     con.getErrorStream().read(idata, 0, 5000); 
    } 

    out.println("ERROR 500: An internal server error occured. " + e.getMessage() + " " + new String(idata));  
} 
%> 
+0

非常感谢!我忘了提及“我的”jsp代理是你的子集......干杯 – user1252188 2012-09-06 11:46:04