Michael Bolz created OLINGO-774:
-----------------------------------
Summary: Handling of special characters in FunctionImportParameter
Key: OLINGO-774
URL: https://issues.apache.org/jira/browse/OLINGO-774
Project: Olingo
Issue Type: Bug
Components: odata2-core
Affects Versions: V2 2.0.4
Reporter: Michael Bolz
Priority: Minor
As specified in OData V2 {{Edm.String}} {{FunctionImportParameter}} can contain
UTF-8 characters (see
[spec|http://www.odata.org/documentation/odata-version-2-0/overview/#AbstractTypeSystem]).
In Olingo V2 for a request with a Function Parameter e.g. {{q='Wa|lter'}} the
use of (some) special characters (here: {{|}}) leads to an exception.
As workaround the parameter can be send as URL encoded value.
For the {{ODataServlet}} an {{IllegalArgumentException}} is thrown (stack trace
below):
{code}
ERROR ScenarioErrorCallback - Internal Server Error
java.lang.IllegalArgumentException
at java.net.URI.create(URI.java:841)
at
org.apache.olingo.odata2.core.servlet.RestUtil.buildRequestUri(RestUtil.java:266)
at
org.apache.olingo.odata2.core.servlet.RestUtil.buildODataPathInfo(RestUtil.java:222)
at
org.apache.olingo.odata2.core.servlet.ODataServlet.handleRequest(ODataServlet.java:184)
at
org.apache.olingo.odata2.core.servlet.ODataServlet.handle(ODataServlet.java:115)
at
org.apache.olingo.odata2.core.servlet.ODataServlet.service(ODataServlet.java:85)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:695)
Caused by: java.net.URISyntaxException: Illegal character in query at index 74:
http://localhost:8080/ReferenceScenarioNonJaxrs.svc/EmployeeSearch?q=%27Wa|lter%27
at java.net.URI$Parser.fail(URI.java:2810)
at java.net.URI$Parser.checkChars(URI.java:2983)
at java.net.URI$Parser.parseHierarchical(URI.java:3073)
at java.net.URI$Parser.parse(URI.java:3015)
at java.net.URI.<init>(URI.java:577)
at java.net.URI.create(URI.java:839)
... 23 more
java.lang.IllegalArgumentException
at java.net.URI.create(URI.java:841)
at
org.apache.olingo.odata2.core.servlet.RestUtil.buildRequestUri(RestUtil.java:266)
at
org.apache.olingo.odata2.core.servlet.RestUtil.buildODataPathInfo(RestUtil.java:222)
at
org.apache.olingo.odata2.core.servlet.ODataServlet.handleRequest(ODataServlet.java:184)
at
org.apache.olingo.odata2.core.servlet.ODataServlet.handle(ODataServlet.java:115)
at
org.apache.olingo.odata2.core.servlet.ODataServlet.service(ODataServlet.java:85)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:695)
Caused by: java.net.URISyntaxException: Illegal character in query at index 74:
http://localhost:8080/ReferenceScenarioNonJaxrs.svc/EmployeeSearch?q=%27Wa|lter%27
at java.net.URI$Parser.fail(URI.java:2810)
at java.net.URI$Parser.checkChars(URI.java:2983)
at java.net.URI$Parser.parseHierarchical(URI.java:3073)
at java.net.URI$Parser.parse(URI.java:3015)
at java.net.URI.<init>(URI.java:577)
at java.net.URI.create(URI.java:839)
... 23 more
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)