Hi,
I have a probelm with character encoding in WFS requests using GeoServer 2.0.2.
I use GetFeature to get information of a point whose ‘NAME’ property likes a certain value. Problem arises when the layer name and the value contains CHINESE characters. The debug infomation is shown as follows:
INFO [org.geoserver.wfs] -
Request: getServiceInfo
27 Nov 18:41:16 DEBUG [org.geotools.xml] - schemaLocation found: http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd
27 Nov 18:41:16 DEBUG [org.geotools.xml] - Found override for http://www.opengis.net/wfs: http://schemas.opengis.net/wfs/1.1.0/wfs.xsd ==> jar:file:/home/luojiesi/GeoServer/webapps/geoserver/WEB-INF/lib/wfs-2.0.2.jar!/org/geoserver/wfs/xml/v1_1_0/wfs.xsd
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.qix by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shp by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shp by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.qix by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.qix by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - IndexFile has been opened. Number open: 1
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shx by org.geotools.data.shapefile.shp.IndexFile
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - Memory mapping file…
27 Nov 18:41:16 TRACE [org.geotools.index.quadtree] - QuadTree opened
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.qix by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shx by org.geotools.data.shapefile.shp.IndexFile
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - IndexFile has been closed. Number open: 0
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.dbf by org.geotools.data.shapefile.dbf.IndexedDbaseFileReader
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - Dbase File Reader has been opened. Number open: 1
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shp by org.geotools.data.shapefile.shp.ShapefileReader
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - Shapefile Reader has been opened. Number open: 1
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - IndexFile has been opened. Number open: 1
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shx by org.geotools.data.shapefile.shp.IndexFile
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - Memory mapping file…
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.fix by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shp by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shp by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.fix by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.fix by org.geotools.data.shapefile.indexed.IndexedFidReader
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - IndexedFidReader has been opened. Number open: 1
27 Nov 18:41:16 DEBUG [org.geotools.core] - wildcard * single .
27 Nov 18:41:16 DEBUG [org.geotools.core] - escape ! esc ! esc == \ false
27 Nov 18:41:16 DEBUG [org.geotools.core] - tmp = looking at 永
27 Nov 18:41:16 DEBUG [org.geotools.core] - tmp = 永 looking at 州
27 Nov 18:41:16 DEBUG [org.geotools.core] - final pattern 永州
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shp by org.geotools.data.shapefile.shp.ShapefileReader
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - Shapefile Reader has been closed. Number open: 0
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shx by org.geotools.data.shapefile.shp.IndexFile
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - IndexFile has been closed. Number open: 0
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.dbf by org.geotools.data.shapefile.dbf.IndexedDbaseFileReader
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - Dbase File Reader has been closed. Number open: 0
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.fix by org.geotools.data.shapefile.indexed.IndexedFidReader
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - IndexedFidReader has been closed. Number open: 0
27 Nov 18:41:16 INFO [org.geoserver.wfs] -
Request: getFeature
handle = null
service = WFS
version = 1.1.0
baseUrl = http://10.15.69.77:8888/geoserver/
providedVersion = null
query = [net.opengis.wfs.impl.QueryTypeImpl@anonymised.com (group: null, propertyName: null, function: null, filter: [[ NAME_CH is like 永州 ] AND [ the_geom bbox POLYGON ((67.363189603321 12.443257476878, 67.363189603321 49.016742523122, 145.58981039668 49.016742523122, 145.58981039668 12.443257476878, 67.363189603321 12.443257476878)) ]], sortBy: null, featureVersion: null, handle: null, srsName: EPSG:4326, typeName: {[http://www.cadal.org/nansong}1208_州府级驻点])]
maxFeatures = null
outputFormat = text/xml; subtype=gml/3.1.1
resultType = results
traverseXlinkDepth = null
traverseXlinkExpiry = null
formatOptions = {}
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.qix by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shp by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shp by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.qix by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.qix by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - IndexFile has been opened. Number open: 1
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shx by org.geotools.data.shapefile.shp.IndexFile
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - Memory mapping file…
27 Nov 18:41:16 TRACE [org.geotools.index.quadtree] - QuadTree opened
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.qix by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shx by org.geotools.data.shapefile.shp.IndexFile
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - IndexFile has been closed. Number open: 0
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.dbf by org.geotools.data.shapefile.dbf.IndexedDbaseFileReader
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - Dbase File Reader has been opened. Number open: 1
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shp by org.geotools.data.shapefile.shp.ShapefileReader
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - Shapefile Reader has been opened. Number open: 1
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - IndexFile has been opened. Number open: 1
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shx by org.geotools.data.shapefile.shp.IndexFile
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - Memory mapping file…
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.fix by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shp by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shp by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.fix by org.geotools.data.shapefile.indexed.IndexedShapefileDataStore: 1208_州府级驻点
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.fix by org.geotools.data.shapefile.indexed.IndexedFidReader
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - IndexedFidReader has been opened. Number open: 1
27 Nov 18:41:16 DEBUG [org.geotools.xml] - _Feature is abstract
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shp by org.geotools.data.shapefile.shp.ShapefileReader
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - Shapefile Reader has been closed. Number open: 0
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.shx by org.geotools.data.shapefile.shp.IndexFile
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - IndexFile has been closed. Number open: 0
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.dbf by org.geotools.data.shapefile.dbf.IndexedDbaseFileReader
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - Dbase File Reader has been closed. Number open: 0
27 Nov 18:41:16 DEBUG [org.geotools.data.shapefile] - Read lock: file:/home/luojiesi/GeoServer/data_dir/data/nansong/南宋1208年/1208_州府级驻点.fix by org.geotools.data.shapefile.indexed.IndexedFidReader
27 Nov 18:41:16 TRACE [org.geotools.data.shapefile] - IndexedFidReader has been closed. Number open: 0
27 Nov 18:41:16 ERROR [org.geoserver.ows] -
java.lang.RuntimeException: Encode failed for _Feature. Cause: INVALID_CHARACTER_ERR: An invalid or illegal XML character is specified.
at org.geotools.xml.impl.ElementEncodeExecutor.visit(ElementEncodeExecutor.java:132)
at org.geotools.xml.impl.BindingWalker$BindingExecutionChain.execute(BindingWalker.java:215)
at org.geotools.xml.impl.BindingWalker.walk(BindingWalker.java:181)
at org.geotools.xml.impl.BindingVisitorDispatch.walk(BindingVisitorDispatch.java:44)
at org.geotools.xml.impl.ElementEncoder.encode(ElementEncoder.java:83)
at org.geotools.xml.Encoder.encode(Encoder.java:1080)
at org.geotools.xml.Encoder.encode(Encoder.java:831)
at org.geotools.xml.Encoder.encode(Encoder.java:561)
at org.geoserver.wfs.xml.GML3OutputFormat.write(GML3OutputFormat.java:190)
at org.geoserver.wfs.WFSGetFeatureOutputFormat.write(WFSGetFeatureOutputFormat.java:137)
at org.geoserver.ows.Dispatcher.response(Dispatcher.java:726)
at org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:234)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
at org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:174)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:73)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
at org.geoserver.filters.ReverseProxyFilter.doFilter(ReverseProxyFilter.java:183)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:41)
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:726)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
Caused by: org.w3c.dom.DOMException: INVALID_CHARACTER_ERR: An invalid or illegal XML character is specified.
at org.apache.xerces.dom.CoreDocumentImpl.checkQName(Unknown Source)
at org.apache.xerces.dom.ElementNSImpl.setName(Unknown Source)
at org.apache.xerces.dom.ElementNSImpl.(Unknown Source)
at org.apache.xerces.dom.CoreDocumentImpl.createElementNS(Unknown Source)
at org.geotools.gml3.bindings.GML3EncodingUtils.AbstractFeatureType_encode(GML3EncodingUtils.java:163)
at org.geotools.gml3.bindings.AbstractFeatureTypeBinding.encode(AbstractFeatureTypeBinding.java:135)
at org.geotools.xml.impl.ElementEncodeExecutor.visit(ElementEncodeExecutor.java:124)
… 60 more
It’s easy to figure out that the characters have been successfully received by the server, error occurs when the geoserver handle the request.