[
https://issues.apache.org/jira/browse/OLINGO-938?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Tobias Stolzenberger updated OLINGO-938:
----------------------------------------
Description:
Hi,
I'm using Olingo version 2.0.6 with JPA adapter. I'm sending a batch message to
the server that contains a function which uses an absolute URI in the status
line. This message is related to ticket
https://issues.apache.org/jira/browse/OLINGO-926. Using absolute URIs within
the HTTP status lines of batch request bodies seem to work properly for all
kind of operations except functions.
My metadata looks like this:
{code:borderStyle=solid}
<FunctionImport Name="EmptyGetOperation" ReturnType="Edm.String"
m:HttpMethod="GET"/>
{code}
If I call this function wiht a single reques and not via batch it works
correctly:
{code:borderStyle=solid}
GET https://host/path/EmptyGetOperation
{code}
Executing the same function as part of a batch request fails with error
message: Error while
executeBatchorg.apache.olingo.odata2.api.batch.BatchException: Invalid URI:
line '5'.
This is the batch request payload I'm using:
{code:borderStyle=solid}
--batch_1
Content-Type: application/http
Content-Transfer-Encoding: binary
GET https://host/path/EmptyGetOperation HTTP/1.1
Host: hepindustrymobility1-industrymobility2.neo.ondemand.com
Accept: application/xml
--batch_1--
{code}
The complete stack trace is pasted below.
If I'm using a relative URI in the batch request body then it succeeds:
{code:borderStyle=solid}
--batch_1
Content-Type: application/http
Content-Transfer-Encoding: binary
GET EmptyGetOperation HTTP/1.1
Host: hepindustrymobility1-industrymobility2.neo.ondemand.com
Accept: application/xml
--batch_1--
{code}
But I doubt that this is HTTP 1.1 spec compliant. Also using the "origin-form"
as request line I get the same error:
{code:borderStyle=solid}
--batch_1
Content-Type: application/http
Content-Transfer-Encoding: binary
GET /path/EmptyGetOperation HTTP/1.1
Host: hepindustrymobility1-industrymobility2.neo.ondemand.com
Accept: application/xml
--batch_1--
{code}
Exception stacktrace:
{code:borderStyle=solid}
Error while executeBatchorg.apache.olingo.odata2.api.batch.BatchException:
Invalid URI: line '5'.
at
org.apache.olingo.odata2.core.batch.v2.BatchTransformatorCommon$HttpRequestStatusLine.parseUri(BatchTransformatorCommon.java:216)
at
org.apache.olingo.odata2.core.batch.v2.BatchTransformatorCommon$HttpRequestStatusLine.parse(BatchTransformatorCommon.java:165)
at
org.apache.olingo.odata2.core.batch.v2.BatchTransformatorCommon$HttpRequestStatusLine.<init>(BatchTransformatorCommon.java:156)
at
org.apache.olingo.odata2.core.batch.v2.BatchRequestTransformator.createRequest(BatchRequestTransformator.java:85)
at
org.apache.olingo.odata2.core.batch.v2.BatchRequestTransformator.processQueryOperation(BatchRequestTransformator.java:78)
at
org.apache.olingo.odata2.core.batch.v2.BatchRequestTransformator.transform(BatchRequestTransformator.java:52)
at
org.apache.olingo.odata2.core.batch.v2.BatchParser.parseBatch(BatchParser.java:86)
at
org.apache.olingo.odata2.core.batch.v2.BatchParser.parse(BatchParser.java:64)
at
org.apache.olingo.odata2.core.batch.v2.BatchParser.parseBatchRequest(BatchParser.java:58)
at
org.apache.olingo.odata2.core.ep.ProviderFacadeImpl.parseBatchRequest(ProviderFacadeImpl.java:237)
at
org.apache.olingo.odata2.api.ep.EntityProvider.parseBatchRequest(EntityProvider.java:887)
at
com.sap.icmobile.demo.odata.jpa.base.DefaultODataJpaProcessor.executeBatch(DefaultODataJpaProcessor.java:304)
at
org.apache.olingo.odata2.core.Dispatcher.dispatch(Dispatcher.java:190)
at
org.apache.olingo.odata2.core.ODataRequestHandler.handle(ODataRequestHandler.java:130)
at
org.apache.olingo.odata2.core.rest.ODataSubLocator.handle(ODataSubLocator.java:164)
at
org.apache.olingo.odata2.core.rest.ODataSubLocator.handlePost(ODataSubLocator.java:86)
at sun.reflect.GeneratedMethodAccessor630.invoke(Unknown Source))
{code}
Regards,
Tobias
was:
Hi,
I'm using Olingo version 2.0.6 with JPA adapter. I'm sending a batch message to
the server that causes an Exception with text: Invalid URI: line '6'
The reason for that is that parsing of the HTTP status line seems not to be
able to handle absolute path values.
This is the request line I'm sending:
{code:borderStyle=solid}
GET /com.sap.icmobile.demo.application/odata/referenceservice/RootEntity1s
HTTP/1.1
{code}
If I use the relative URI instead the batch message get processed without an
error:
{code:borderStyle=solid}
GET RootEntity1s HTTP/1.1
{code}
I had a look in OData V2 spec:
http://www.odata.org/documentation/odata-version-2-0/batch-processing/
In the example on this page you see two different variants of the request line:
{code:borderStyle=solid}
GET /service/Customers('ALFKI') HTTP/1.1
{code}
{code:borderStyle=solid}
GET service/Products HTTP/1.1
{code}
It's Interesting to see that in first example there is a leading slash while in
the second example there isn't. If you have a look at the HTTP 1.1 spec you see
that the leading slash seems to be the correct format:
https://tools.ietf.org/html/rfc7230#section-5.3
This is the complete HTTP request body that I send:
{code:borderStyle=solid}
POST /mypath/odata/referenceservice/$batch HTTP/1.1
Content-Type: multipart/mixed;
boundary=batch_f90a925d-f990-4b20-bbc3-057f6eb1c692
X-CSRF-Token: ...
...
--batch_f90a925d-f990-4b20-bbc3-057f6eb1c692
Content-Disposition: form-data; name="1"; filename="1"
Content-Type: application/http
Content-Transfer-Encoding: binary
GET /mypath/odata/referenceservice/RootEntity1s HTTP/1.1
Host: myhost
Accept: application/atom+xml;type=feed
--batch_f90a925d-f990-4b20-bbc3-057f6eb1c692--
{code}
And this is the Exception stacktrace:
{code:borderStyle=solid}
Invalid URI: line '6'. - org.apache.olingo.odata2.api.batch.BatchException:
Invalid URI: line '6'.
at
org.apache.olingo.odata2.core.batch.v2.BatchTransformatorCommon$HttpRequestStatusLine.parseUri(BatchTransformatorCommon.java:216)
at
org.apache.olingo.odata2.core.batch.v2.BatchTransformatorCommon$HttpRequestStatusLine.parse(BatchTransformatorCommon.java:165)
at
org.apache.olingo.odata2.core.batch.v2.BatchTransformatorCommon$HttpRequestStatusLine.<init>(BatchTransformatorCommon.java:156)
at
org.apache.olingo.odata2.core.batch.v2.BatchRequestTransformator.createRequest(BatchRequestTransformator.java:85)
at
org.apache.olingo.odata2.core.batch.v2.BatchRequestTransformator.processQueryOperation(BatchRequestTransformator.java:78)
at
org.apache.olingo.odata2.core.batch.v2.BatchRequestTransformator.transform(BatchRequestTransformator.java:52)
at
org.apache.olingo.odata2.core.batch.v2.BatchParser.parseBatch(BatchParser.java:86)
at
org.apache.olingo.odata2.core.batch.v2.BatchParser.parse(BatchParser.java:64)
at
org.apache.olingo.odata2.core.batch.v2.BatchParser.parseBatchRequest(BatchParser.java:58)
at
org.apache.olingo.odata2.core.ep.ProviderFacadeImpl.parseBatchRequest(ProviderFacadeImpl.java:237)
at
org.apache.olingo.odata2.api.ep.EntityProvider.parseBatchRequest(EntityProvider.java:887)
{code}
Regards,
Tobias
> Batch Request fails contains Function with absolute request URI
> ---------------------------------------------------------------
>
> Key: OLINGO-938
> URL: https://issues.apache.org/jira/browse/OLINGO-938
> Project: Olingo
> Issue Type: Bug
> Components: odata2-core
> Affects Versions: V2 2.0.6
> Reporter: Tobias Stolzenberger
> Assignee: Michael Bolz
>
> Hi,
> I'm using Olingo version 2.0.6 with JPA adapter. I'm sending a batch message
> to the server that contains a function which uses an absolute URI in the
> status line. This message is related to ticket
> https://issues.apache.org/jira/browse/OLINGO-926. Using absolute URIs within
> the HTTP status lines of batch request bodies seem to work properly for all
> kind of operations except functions.
> My metadata looks like this:
> {code:borderStyle=solid}
> <FunctionImport Name="EmptyGetOperation" ReturnType="Edm.String"
> m:HttpMethod="GET"/>
> {code}
> If I call this function wiht a single reques and not via batch it works
> correctly:
> {code:borderStyle=solid}
> GET https://host/path/EmptyGetOperation
> {code}
> Executing the same function as part of a batch request fails with error
> message: Error while
> executeBatchorg.apache.olingo.odata2.api.batch.BatchException: Invalid URI:
> line '5'.
> This is the batch request payload I'm using:
> {code:borderStyle=solid}
> --batch_1
> Content-Type: application/http
> Content-Transfer-Encoding: binary
> GET https://host/path/EmptyGetOperation HTTP/1.1
> Host: hepindustrymobility1-industrymobility2.neo.ondemand.com
> Accept: application/xml
> --batch_1--
> {code}
> The complete stack trace is pasted below.
> If I'm using a relative URI in the batch request body then it succeeds:
> {code:borderStyle=solid}
> --batch_1
> Content-Type: application/http
> Content-Transfer-Encoding: binary
> GET EmptyGetOperation HTTP/1.1
> Host: hepindustrymobility1-industrymobility2.neo.ondemand.com
> Accept: application/xml
> --batch_1--
> {code}
> But I doubt that this is HTTP 1.1 spec compliant. Also using the
> "origin-form" as request line I get the same error:
> {code:borderStyle=solid}
> --batch_1
> Content-Type: application/http
> Content-Transfer-Encoding: binary
> GET /path/EmptyGetOperation HTTP/1.1
> Host: hepindustrymobility1-industrymobility2.neo.ondemand.com
> Accept: application/xml
> --batch_1--
> {code}
> Exception stacktrace:
> {code:borderStyle=solid}
> Error while executeBatchorg.apache.olingo.odata2.api.batch.BatchException:
> Invalid URI: line '5'.
> at
> org.apache.olingo.odata2.core.batch.v2.BatchTransformatorCommon$HttpRequestStatusLine.parseUri(BatchTransformatorCommon.java:216)
> at
> org.apache.olingo.odata2.core.batch.v2.BatchTransformatorCommon$HttpRequestStatusLine.parse(BatchTransformatorCommon.java:165)
> at
> org.apache.olingo.odata2.core.batch.v2.BatchTransformatorCommon$HttpRequestStatusLine.<init>(BatchTransformatorCommon.java:156)
> at
> org.apache.olingo.odata2.core.batch.v2.BatchRequestTransformator.createRequest(BatchRequestTransformator.java:85)
> at
> org.apache.olingo.odata2.core.batch.v2.BatchRequestTransformator.processQueryOperation(BatchRequestTransformator.java:78)
> at
> org.apache.olingo.odata2.core.batch.v2.BatchRequestTransformator.transform(BatchRequestTransformator.java:52)
> at
> org.apache.olingo.odata2.core.batch.v2.BatchParser.parseBatch(BatchParser.java:86)
> at
> org.apache.olingo.odata2.core.batch.v2.BatchParser.parse(BatchParser.java:64)
> at
> org.apache.olingo.odata2.core.batch.v2.BatchParser.parseBatchRequest(BatchParser.java:58)
> at
> org.apache.olingo.odata2.core.ep.ProviderFacadeImpl.parseBatchRequest(ProviderFacadeImpl.java:237)
> at
> org.apache.olingo.odata2.api.ep.EntityProvider.parseBatchRequest(EntityProvider.java:887)
> at
> com.sap.icmobile.demo.odata.jpa.base.DefaultODataJpaProcessor.executeBatch(DefaultODataJpaProcessor.java:304)
> at
> org.apache.olingo.odata2.core.Dispatcher.dispatch(Dispatcher.java:190)
> at
> org.apache.olingo.odata2.core.ODataRequestHandler.handle(ODataRequestHandler.java:130)
> at
> org.apache.olingo.odata2.core.rest.ODataSubLocator.handle(ODataSubLocator.java:164)
> at
> org.apache.olingo.odata2.core.rest.ODataSubLocator.handlePost(ODataSubLocator.java:86)
> at sun.reflect.GeneratedMethodAccessor630.invoke(Unknown Source))
> {code}
> Regards,
> Tobias
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)