[OLINGO-234] Cleaning up + re-enabling in-stream error test
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/05b26700 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/05b26700 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/05b26700 Branch: refs/heads/master Commit: 05b26700ade798a9327a62f4d946ad2e6c4cf6f6 Parents: b0c26e1 Author: Francesco Chicchiriccò <[email protected]> Authored: Mon Apr 7 11:26:01 2014 +0200 Committer: Francesco Chicchiriccò <[email protected]> Committed: Mon Apr 7 11:26:01 2014 +0200 ---------------------------------------------------------------------- .../java/org/apache/olingo/fit/V3Services.java | 35 ++++++++++++++++++++ .../resources/v3/InStreamErrorGetCustomer.xml | 2 -- .../olingo/client/api/uri/CommonURIBuilder.java | 9 ----- .../client/core/edm/EdmFunctionImportImpl.java | 3 +- .../client/core/uri/AbstractURIBuilder.java | 12 +++---- .../client/core/uri/v3/URIBuilderImpl.java | 5 +++ .../client/core/uri/v4/URIBuilderImpl.java | 7 +++- .../client/core/it/v3/ErrorTestITCase.java | 23 +++++++------ .../client/core/uri/v3/URIBuilderTest.java | 13 +------- .../client/core/uri/v4/URIBuilderTest.java | 14 ++++---- 10 files changed, 74 insertions(+), 49 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05b26700/fit/src/main/java/org/apache/olingo/fit/V3Services.java ---------------------------------------------------------------------- diff --git a/fit/src/main/java/org/apache/olingo/fit/V3Services.java b/fit/src/main/java/org/apache/olingo/fit/V3Services.java index 1f379d3..587a750 100644 --- a/fit/src/main/java/org/apache/olingo/fit/V3Services.java +++ b/fit/src/main/java/org/apache/olingo/fit/V3Services.java @@ -18,16 +18,22 @@ */ package org.apache.olingo.fit; +import java.io.InputStream; +import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; import org.apache.olingo.fit.utils.ODataVersion; import org.apache.olingo.fit.utils.XHTTPMethodInterceptor; import javax.ws.rs.Path; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; import org.apache.commons.lang3.StringUtils; import org.apache.cxf.interceptor.InInterceptors; +import org.apache.olingo.fit.utils.Accept; import org.apache.olingo.fit.utils.ConstantKey; import org.apache.olingo.fit.utils.Constants; +import org.apache.olingo.fit.utils.FSManager; import org.springframework.stereotype.Service; @Service @@ -39,6 +45,35 @@ public class V3Services extends AbstractServices { super(ODataVersion.v3); } + @GET + @Path("/InStreamErrorGetCustomer") + public Response instreamErrorGetCustomer( + @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept, + @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format) { + + final Accept acceptType; + if (StringUtils.isNotBlank(format)) { + acceptType = Accept.valueOf(format.toUpperCase()); + } else { + acceptType = Accept.parse(accept, version); + } + + try { + final InputStream error = FSManager.instance(version).readFile("InStreamErrorGetCustomer", acceptType); + + return Response.ok(error). + header(Constants.get(version, ConstantKey.ODATA_SERVICE_VERSION), version.getVersion() + ";"). + header("Content-Type", acceptType.toString(version)). + build(); + } catch (Exception e) { + if (acceptType == Accept.XML || acceptType == Accept.TEXT) { + throw new UnsupportedMediaTypeException("Unsupported media type"); + } + + return xml.createFaultResponse(accept, e); + } + } + /** * Provide sample large metadata. * http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05b26700/fit/src/main/resources/v3/InStreamErrorGetCustomer.xml ---------------------------------------------------------------------- diff --git a/fit/src/main/resources/v3/InStreamErrorGetCustomer.xml b/fit/src/main/resources/v3/InStreamErrorGetCustomer.xml index e836bd1..16804f1 100644 --- a/fit/src/main/resources/v3/InStreamErrorGetCustomer.xml +++ b/fit/src/main/resources/v3/InStreamErrorGetCustomer.xml @@ -576,5 +576,3 @@ <m:code /> <m:message xml:lang="en-US">InStreamErrorGetCustomer ThrowForSpecificCustomer error</m:message> </m:error> - </entry> -</feed> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05b26700/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/CommonURIBuilder.java ---------------------------------------------------------------------- diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/CommonURIBuilder.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/CommonURIBuilder.java index 08f267e..ac38943 100644 --- a/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/CommonURIBuilder.java +++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/CommonURIBuilder.java @@ -117,15 +117,6 @@ public interface CommonURIBuilder<UB extends CommonURIBuilder<?>> { UB appendOperationCallSegment(String operation); /** - * Appends operation (action or function) segment to the URI. - * - * @param operation Operation (action or function) name - * @param arguments Operation arguments - * @return current URIBuilder instance - */ - UB appendOperationCallSegment(String operation, Map<String, Object> arguments); - - /** * Appends metadata segment to the URI. * * @return current URIBuilder instance http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05b26700/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java index 9ad469d..51ea4e6 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java @@ -49,7 +49,8 @@ public class EdmFunctionImportImpl extends EdmOperationImportImpl implements Edm final FullQualifiedName bindingParameterTypeName, final Boolean isBindingParameterCollection) { return edm.getFunction(new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(functionImport.getFunction()). - setDefaultNamespace(container.getNamespace()).build().getFullQualifiedName(), null, null, parameterNames); + setDefaultNamespace(container.getNamespace()).build().getFullQualifiedName(), + bindingParameterTypeName, isBindingParameterCollection, parameterNames); } @Override http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05b26700/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java index 1b2720a..86a3c48 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java @@ -170,13 +170,6 @@ public abstract class AbstractURIBuilder<UB extends CommonURIBuilder<?>> impleme } @Override - public UB appendOperationCallSegment(final String operation, final Map<String, Object> arguments) { - segments.add(new Segment( - segments.size() == 1 ? SegmentType.UNBOUND_OPERATION : SegmentType.BOUND_OPERATION, operation)); - return appendKeySegment(arguments); - } - - @Override public UB appendMetadataSegment() { segments.add(new Segment(SegmentType.METADATA, SegmentType.METADATA.getValue())); return getThis(); @@ -262,6 +255,8 @@ public abstract class AbstractURIBuilder<UB extends CommonURIBuilder<?>> impleme protected abstract char getDerivedEntityTypeSeparator(); + protected abstract String getOperationInvokeMarker(); + @Override public URI build() { final StringBuilder segmentsBuilder = new StringBuilder(); @@ -286,6 +281,9 @@ public abstract class AbstractURIBuilder<UB extends CommonURIBuilder<?>> impleme } else { segmentsBuilder.append(seg.getValue()); } + if (seg.getType() == SegmentType.BOUND_OPERATION || seg.getType() == SegmentType.UNBOUND_OPERATION) { + segmentsBuilder.append(getOperationInvokeMarker()); + } } try { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05b26700/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/URIBuilderImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/URIBuilderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/URIBuilderImpl.java index f02c524..ed62882 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/URIBuilderImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/URIBuilderImpl.java @@ -61,6 +61,11 @@ public class URIBuilderImpl extends AbstractURIBuilder<URIBuilder> implements UR } @Override + protected String getOperationInvokeMarker() { + return StringUtils.EMPTY; + } + + @Override public URIBuilder appendLinksSegment(final String segmentValue) { segments.add(new Segment(SegmentType.LINKS, SegmentType.LINKS.getValue())); segments.add(new Segment(SegmentType.ENTITYSET, segmentValue)); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05b26700/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/URIBuilderImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/URIBuilderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/URIBuilderImpl.java index 332f8c2..dc351df 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/URIBuilderImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/URIBuilderImpl.java @@ -76,6 +76,11 @@ public class URIBuilderImpl extends AbstractURIBuilder<URIBuilder> implements UR } @Override + protected String getOperationInvokeMarker() { + return "()"; + } + + @Override public URIBuilder appendSingletonSegment(final String segmentValue) { segments.add(new Segment(SegmentType.SINGLETON, segmentValue)); return getThis(); @@ -95,7 +100,7 @@ public class URIBuilderImpl extends AbstractURIBuilder<URIBuilder> implements UR @Override public URIBuilder appendCrossjoinSegment(final String... segmentValues) { - StringBuilder segValue = new StringBuilder(SegmentType.CROSS_JOIN.getValue()). + final StringBuilder segValue = new StringBuilder(SegmentType.CROSS_JOIN.getValue()). append('(').append(StringUtils.join(segmentValues, ",")).append(')'); segments.add(new Segment(SegmentType.CROSS_JOIN, segValue.toString())); return getThis(); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05b26700/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ErrorTestITCase.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ErrorTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ErrorTestITCase.java index 5e3e235..e25c9fd 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ErrorTestITCase.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ErrorTestITCase.java @@ -30,15 +30,19 @@ import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.olingo.client.api.CommonODataClient; import org.apache.olingo.client.api.communication.ODataClientErrorException; +import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest; import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest; import org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse; +import org.apache.olingo.client.api.communication.response.ODataInvokeResponse; import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.uri.CommonURIBuilder; +import org.apache.olingo.client.api.uri.v3.URIBuilder; import org.apache.olingo.client.core.communication.request.AbstractODataBasicRequest; import org.apache.olingo.client.core.communication.response.AbstractODataResponse; import org.apache.olingo.client.core.uri.URIUtils; import org.apache.olingo.commons.api.domain.CommonODataEntity; import org.apache.olingo.commons.api.domain.v3.ODataEntity; +import org.apache.olingo.commons.api.domain.v3.ODataEntitySet; import org.apache.olingo.commons.api.edm.Edm; import org.apache.olingo.commons.api.edm.EdmEntityContainer; import org.apache.olingo.commons.api.edm.EdmFunctionImport; @@ -148,16 +152,15 @@ public class ErrorTestITCase extends AbstractTestITCase { final EdmEntityContainer container = metadata.getSchemas().get(0).getEntityContainer(); final EdmFunctionImport funcImp = container.getFunctionImport("InStreamErrorGetCustomer"); - final CommonURIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL). - appendOperationCallSegment(URIUtils.operationImportURISegment(container, funcImp), null); - // TODO: review invoke -// final ODataInvokeRequest<ODataEntitySet> req = -// client.getInvokeRequestFactory().getInvokeRequest(builder.build(), metadata, funcImp); -// req.setFormat(format); -// -// final ODataInvokeResponse<ODataEntitySet> res = req.execute(); -// res.getBody(); - throw new IllegalArgumentException(); + final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL). + appendOperationCallSegment(URIUtils.operationImportURISegment(container, funcImp)); + final ODataInvokeRequest<ODataEntitySet> req = + client.getInvokeRequestFactory().getInvokeRequest(builder.build(), funcImp.getUnboundFunction(null)); + req.setFormat(format); + + final ODataInvokeResponse<ODataEntitySet> res = req.execute(); + res.getBody(); + fail("Shouldn't get here"); } @Test(expected = IllegalArgumentException.class) http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05b26700/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v3/URIBuilderTest.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v3/URIBuilderTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v3/URIBuilderTest.java index 6bfe116..a0bb04c 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v3/URIBuilderTest.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v3/URIBuilderTest.java @@ -22,7 +22,6 @@ import static org.junit.Assert.assertEquals; import java.net.URI; import java.net.URISyntaxException; -import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -114,19 +113,9 @@ public class URIBuilderTest extends AbstractTest { } @Test - public void unboundAction() throws URISyntaxException { - final URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT). - appendOperationCallSegment("ProductsByCategoryId", - Collections.<String, Object>singletonMap("categoryId", 2)); - - assertEquals(new org.apache.http.client.utils.URIBuilder( - SERVICE_ROOT + "/ProductsByCategoryId(categoryId=2)").build(), uriBuilder.build()); - } - - @Test public void boundAction() throws URISyntaxException { final URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT). - appendEntitySetSegment("Products").appendOperationCallSegment("MostExpensive", null); + appendEntitySetSegment("Products").appendOperationCallSegment("MostExpensive"); assertEquals(new org.apache.http.client.utils.URIBuilder( SERVICE_ROOT + "/Products/MostExpensive").build(), uriBuilder.build()); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05b26700/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/URIBuilderTest.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/URIBuilderTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/URIBuilderTest.java index af26059..de113bc 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/URIBuilderTest.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/URIBuilderTest.java @@ -43,13 +43,13 @@ public class URIBuilderTest extends AbstractTest { public void expandWithOptions() throws URISyntaxException { URI uri = getClient().getURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Products").appendKeySegment(5). expandWithOptions("ProductDetails", new LinkedHashMap<String, Object>() { - private static final long serialVersionUID = 3109256773218160485L; + private static final long serialVersionUID = 3109256773218160485L; - { - put("$expand", "ProductInfo"); - put("$select", "Price"); - } - }).expand("Orders", "Customers").build(); + { + put("$expand", "ProductInfo"); + put("$select", "Price"); + } + }).expand("Orders", "Customers").build(); assertEquals(new org.apache.http.client.utils.URIBuilder(SERVICE_ROOT + "/Products(5)"). addParameter("$expand", "ProductDetails($expand=ProductInfo,$select=Price),Orders,Customers").build(), uri); @@ -90,7 +90,7 @@ public class URIBuilderTest extends AbstractTest { final URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT). appendEntitySetSegment("Categories").appendKeySegment(1). appendNavigationSegment("Products").appendNavigationSegment("Model"). - appendOperationCallSegment("AllOrders", null); + appendOperationCallSegment("AllOrders"); assertEquals(new org.apache.http.client.utils.URIBuilder( SERVICE_ROOT + "/Categories(1)/Products/Model.AllOrders()").build(), uriBuilder.build());
