[OLINGO-260] V4 function / action import invoke
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/ead588e8 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/ead588e8 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/ead588e8 Branch: refs/heads/olingo-266-ref Commit: ead588e8a511c4409c344a5d63c6fa4e45c18f5d Parents: 4ad25f2 Author: Francesco Chicchiriccò <--global> Authored: Wed May 14 10:21:03 2014 +0200 Committer: Stephan Klevenz <[email protected]> Committed: Mon May 19 12:33:26 2014 +0200 ---------------------------------------------------------------------- .../commons/AbstractInvocationHandler.java | 4 +- .../commons/AbstractTypeInvocationHandler.java | 2 +- .../olingo/ext/proxy/commons/ContainerImpl.java | 2 +- .../commons/EntityTypeInvocationHandler.java | 2 +- .../olingo/ext/proxy/utils/CoreUtils.java | 58 +++++++++--- .../olingo/ext/pojogen/AbstractPOJOGenMojo.java | 11 +-- .../java/org/apache/olingo/fit/V4Services.java | 23 ++--- .../olingo/fit/utils/AbstractUtilities.java | 1 - .../v4/OperationImportInvokeTestITCase.java | 99 ++++++++++++++++++++ .../fit/v4/OperationImportInvokeTestITCase.java | 1 + fit/src/test/resources/META-INF/enumTypes | 3 + ...che.olingo.ext.proxy.api.AbstractComplexType | 14 --- .../invoke/AbstractODataInvokeRequest.java | 3 - .../invoke/v4/ODataInvokeRequestImpl.java | 2 +- .../client/core/op/impl/v4/ODataBinderImpl.java | 2 +- .../client/core/v3/PrimitiveValueTest.java | 14 +-- pom.xml | 2 +- 17 files changed, 174 insertions(+), 69 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java index 9da6aab..516664d 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java @@ -193,7 +193,7 @@ abstract class AbstractInvocationHandler<C extends CommonEdmEnabledODataClient<? final EdmTypeInfo edmType = new EdmTypeInfo.Builder(). setEdm(client.getCachedEdm()).setTypeExpression(annotation.returnType()).build(); - + if (edmType.isEntityType()) { if (edmType.isCollection()) { final ParameterizedType collType = (ParameterizedType) method.getReturnType().getGenericInterfaces()[0]; @@ -213,7 +213,7 @@ abstract class AbstractInvocationHandler<C extends CommonEdmEnabledODataClient<? method.getReturnType(), false); } - }else{ + } else { return CoreUtils.getValueFromProperty(client, (CommonODataProperty) result, method.getGenericReturnType(), null); } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractTypeInvocationHandler.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractTypeInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractTypeInvocationHandler.java index f10cb03..d9a9d85 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractTypeInvocationHandler.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractTypeInvocationHandler.java @@ -168,7 +168,7 @@ public abstract class AbstractTypeInvocationHandler<C extends CommonEdmEnabledOD } protected void attach() { - if (!entityContext.isAttached(targetHandler)) { + if (targetHandler != null && !entityContext.isAttached(targetHandler)) { entityContext.attach(targetHandler, AttachedEntityStatus.ATTACHED); } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ContainerImpl.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ContainerImpl.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ContainerImpl.java index 3d30497..49c1c9f 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ContainerImpl.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/ContainerImpl.java @@ -410,7 +410,7 @@ class ContainerImpl implements Container { final URI targetURI = currentStatus == AttachedEntityStatus.NEW ? URI.create("$" + startingPos) : URIUtils.getURI( factory.getServiceRoot(), - CoreUtils.getEditMediaLink(streamedChanges.getKey(), entity).toASCIIString()); + CoreUtils.getMediaEditLink(streamedChanges.getKey(), entity).toASCIIString()); batchUpdateMediaResource(handler, targetURI, streamedChanges.getValue(), changeset); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityTypeInvocationHandler.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityTypeInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityTypeInvocationHandler.java index 9f81634..afafeb3 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityTypeInvocationHandler.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityTypeInvocationHandler.java @@ -289,7 +289,7 @@ public class EntityTypeInvocationHandler<C extends CommonEdmEnabledODataClient<? if (res == null) { final URI link = URIUtils.getURI( containerHandler.getFactory().getServiceRoot(), - CoreUtils.getEditMediaLink(property.name(), getEntity()).toASCIIString()); + CoreUtils.getMediaEditLink(property.name(), getEntity()).toASCIIString()); final ODataMediaRequest req = client.getRetrieveRequestFactory().getMediaRequest(link); res = req.execute().getBody(); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java ---------------------------------------------------------------------- diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java index 981d285..d1ea8a3 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/CoreUtils.java @@ -33,6 +33,8 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.olingo.client.api.CommonEdmEnabledODataClient; import org.apache.olingo.client.api.v3.UnsupportedInV3Exception; import org.apache.olingo.commons.api.domain.CommonODataEntity; @@ -40,6 +42,8 @@ import org.apache.olingo.commons.api.domain.CommonODataProperty; import org.apache.olingo.commons.api.domain.ODataLink; import org.apache.olingo.commons.api.domain.ODataPrimitiveValue; import org.apache.olingo.commons.api.domain.ODataValue; +import org.apache.olingo.commons.api.domain.v4.ODataEnumValue; +import org.apache.olingo.commons.api.domain.v4.ODataProperty; import org.apache.olingo.commons.api.edm.EdmElement; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException; import org.apache.olingo.commons.api.edm.EdmType; @@ -47,7 +51,9 @@ import org.apache.olingo.commons.api.edm.FullQualifiedName; import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion; import org.apache.olingo.commons.core.edm.EdmTypeInfo; import org.apache.olingo.ext.proxy.api.annotations.CompoundKeyElement; +import org.apache.olingo.ext.proxy.api.annotations.EnumType; import org.apache.olingo.ext.proxy.api.annotations.Key; +import org.apache.olingo.ext.proxy.api.annotations.Namespace; import org.apache.olingo.ext.proxy.api.annotations.Property; import org.apache.olingo.ext.proxy.commons.AbstractTypeInvocationHandler; import org.apache.olingo.ext.proxy.commons.ComplexTypeInvocationHandler; @@ -202,8 +208,8 @@ public final class CoreUtils { } else { oprop = ((org.apache.olingo.commons.api.domain.v4.ODataObjectFactory) client.getObjectFactory()). newEnumProperty(name, - ((org.apache.olingo.commons.api.domain.v4.ODataValue) getODataValue(client, type, obj)). - asEnum()); + ((org.apache.olingo.commons.api.domain.v4.ODataValue) getODataValue(client, type, obj)). + asEnum()); } } else { throw new UnsupportedOperationException("Usupported object type " + type.getFullQualifiedName()); @@ -332,7 +338,7 @@ public final class CoreUtils { Thread.currentThread().getContextClassLoader(), new Class<?>[] {getter.getReturnType()}, ComplexTypeInvocationHandler.getInstance( - client, property.getName(), getter.getReturnType(), null)); + client, property.getName(), getter.getReturnType(), null)); populate(client, complex, Property.class, property.getValue().asComplex().iterator()); setPropertyValue(bean, getter, complex); @@ -356,7 +362,7 @@ public final class CoreUtils { Thread.currentThread().getContextClassLoader(), new Class<?>[] {collItemClass}, ComplexTypeInvocationHandler.getInstance( - client, property.getName(), collItemClass, null)); + client, property.getName(), collItemClass, null)); populate(client, collItem, Property.class, value.asComplex().iterator()); collection.add(collItem); @@ -371,6 +377,29 @@ public final class CoreUtils { } } + @SuppressWarnings({"unchecked", "rawtypes"}) + private static Enum<?> buildEnumInstance(final ODataEnumValue value) { + try { + for (String enumTypeName + : StringUtils.split(IOUtils.toString(CoreUtils.class.getResourceAsStream("/META-INF/enumTypes")), '\n')) { + + final Class<Enum> enumClass = + (Class<Enum>) Thread.currentThread().getContextClassLoader().loadClass(enumTypeName); + if (enumClass != null) { + final Namespace namespace = enumClass.getAnnotation(Namespace.class); + final EnumType enumType = enumClass.getAnnotation(EnumType.class); + if (value.getTypeName().equals(namespace.value() + "." + enumType.name())) { + return Enum.valueOf(enumClass, value.getValue()); + } + } + } + } catch (Exception e) { + LOG.error("While trying to load enum for {}", value, e); + } + + return null; + } + @SuppressWarnings("unchecked") public static Object getValueFromProperty( final CommonEdmEnabledODataClient<?> client, @@ -379,8 +408,6 @@ public final class CoreUtils { final EntityTypeInvocationHandler<?> entityHandler) throws InstantiationException, IllegalAccessException { - final Object res; - Class<?> internalRef; if (typeRef == null) { internalRef = null; @@ -392,6 +419,8 @@ public final class CoreUtils { } } + final Object res; + if (property == null || property.hasNullValue()) { res = null; } else if (property.hasComplexValue()) { @@ -399,8 +428,7 @@ public final class CoreUtils { Thread.currentThread().getContextClassLoader(), new Class<?>[] {internalRef}, ComplexTypeInvocationHandler.getInstance( - client, property.getValue().asComplex(), internalRef, entityHandler)); - + client, property.getValue().asComplex(), internalRef, entityHandler)); } else if (property.hasCollectionValue()) { final ArrayList<Object> collection = new ArrayList<Object>(); @@ -414,15 +442,17 @@ public final class CoreUtils { Thread.currentThread().getContextClassLoader(), new Class<?>[] {internalRef}, ComplexTypeInvocationHandler.getInstance( - client, value.asComplex(), internalRef, entityHandler)); + client, value.asComplex(), internalRef, entityHandler)); collection.add(collItem); } } res = collection; + } else if (property instanceof ODataProperty && ((ODataProperty) property).hasEnumValue()) { + res = buildEnumInstance(((ODataProperty) property).getEnumValue()); } else { - res = CoreUtils.primitiveValueToObject(property.getPrimitiveValue()); + res = primitiveValueToObject(property.getPrimitiveValue()); } return res; @@ -440,10 +470,10 @@ public final class CoreUtils { return null; } - public static URI getEditMediaLink(final String name, final CommonODataEntity entity) { - for (ODataLink editMediaLink : entity.getMediaEditLinks()) { - if (name.equalsIgnoreCase(editMediaLink.getName())) { - return editMediaLink.getLink(); + public static URI getMediaEditLink(final String name, final CommonODataEntity entity) { + for (ODataLink link : entity.getMediaEditLinks()) { + if (name.equalsIgnoreCase(link.getName())) { + return link.getLink(); } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractPOJOGenMojo.java ---------------------------------------------------------------------- diff --git a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractPOJOGenMojo.java b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractPOJOGenMojo.java index b2023a7..ce566ee 100644 --- a/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractPOJOGenMojo.java +++ b/ext/pojogen-maven-plugin/src/main/java/org/apache/olingo/ext/pojogen/AbstractPOJOGenMojo.java @@ -227,8 +227,7 @@ public abstract class AbstractPOJOGenMojo extends AbstractMojo { namespaces.add(schema.getNamespace().toLowerCase()); } - final Set<String> complexTypeNames = new HashSet<String>(); - final File services = mkdir("META-INF/services"); + final StringBuilder enumTypeNames = new StringBuilder(); for (EdmSchema schema : edm.getSchemas()) { createUtility(edm, schema, basePackage); @@ -249,6 +248,7 @@ public abstract class AbstractPOJOGenMojo extends AbstractMojo { // write types into types package for (EdmEnumType enumType : schema.getEnumTypes()) { final String className = utility.capitalize(enumType.getName()); + enumTypeNames.append(typesPkg).append('.').append(className).append('\n'); objs.clear(); objs.put("enumType", enumType); parseObj(typesBaseDir, typesPkg, "enumType", className + ".java", objs); @@ -256,7 +256,6 @@ public abstract class AbstractPOJOGenMojo extends AbstractMojo { for (EdmComplexType complex : schema.getComplexTypes()) { final String className = utility.capitalize(complex.getName()); - complexTypeNames.add(typesPkg + "." + className); objs.clear(); objs.put("complexType", complex); parseObj(typesBaseDir, typesPkg, "complexType", className + ".java", objs); @@ -324,10 +323,10 @@ public abstract class AbstractPOJOGenMojo extends AbstractMojo { } } } - - parseObj(services, true, null, "services", "org.apache.olingo.ext.proxy.api.AbstractComplexType", - Collections.singletonMap("services", (Object) complexTypeNames)); } + + final File metaInf = mkdir("META-INF"); + FileUtils.fileWrite(metaInf.getPath() + File.separator + "enumTypes", enumTypeNames.toString()); } catch (Exception t) { getLog().error(t); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/fit/src/main/java/org/apache/olingo/fit/V4Services.java ---------------------------------------------------------------------- diff --git a/fit/src/main/java/org/apache/olingo/fit/V4Services.java b/fit/src/main/java/org/apache/olingo/fit/V4Services.java index d0bbaad..2d774d5 100644 --- a/fit/src/main/java/org/apache/olingo/fit/V4Services.java +++ b/fit/src/main/java/org/apache/olingo/fit/V4Services.java @@ -111,7 +111,7 @@ public class V4Services extends AbstractServices { protected V4Services(final Metadata metadata) throws Exception { super(ODataServiceVersion.V40, metadata); } - + @GET @Path("/$crossjoin({elements:.*})") public Response crossjoin( @@ -1239,26 +1239,15 @@ public class V4Services extends AbstractServices { acceptType = Accept.parse(accept, version); } - final Accept contentTypeValue = Accept.parse(contentType, version); - Property property; - if (contentTypeValue == Accept.XML) { - final ResWrap<AtomPropertyImpl> paramContainer = atomDeserializer.read( - IOUtils.toInputStream(param, Constants.ENCODING), AtomPropertyImpl.class); - property = paramContainer.getPayload(); - } else { - final ResWrap<JSONPropertyImpl> paramContainer = - mapper.readValue(IOUtils.toInputStream(param, Constants.ENCODING), - new TypeReference<JSONPropertyImpl>() { - }); - property = paramContainer.getPayload(); - } + final Accept contentTypeValue = Accept.parse(contentType, version); + final AtomEntityImpl entity = xml.readEntity(contentTypeValue, IOUtils.toInputStream(param, Constants.ENCODING)); - assert "Microsoft.Test.OData.Services.ODataWCFService.Address".equals(property.getType()); - assert property.getValue().isComplex(); + assert "Microsoft.Test.OData.Services.ODataWCFService.Address".equals(entity.getType()); + assert entity.getProperty("address").getValue().isComplex(); return xml.createResponse( null, - IOUtils.toInputStream(param, Constants.ENCODING), + xml.writeProperty(acceptType, entity.getProperty("address")), null, acceptType); } catch (Exception e) { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java ---------------------------------------------------------------------- diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java index 77c24d6..00259321 100644 --- a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java +++ b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java @@ -41,7 +41,6 @@ import javax.ws.rs.NotFoundException; import javax.ws.rs.core.Response; import javax.xml.stream.XMLStreamException; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.vfs2.FileObject; import org.apache.olingo.commons.api.data.Entity; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/fit/src/test/java/org/apache/olingo/fit/proxy/v4/OperationImportInvokeTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/OperationImportInvokeTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/OperationImportInvokeTestITCase.java new file mode 100644 index 0000000..7231ddc --- /dev/null +++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/OperationImportInvokeTestITCase.java @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.olingo.fit.proxy.v4; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; +import java.util.Collection; +import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.AccessLevel; +import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address; +import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Color; +import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person; +import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types. + ProductCollection; +import org.junit.Test; + +public class OperationImportInvokeTestITCase extends AbstractTestITCase { + + @Test + public void getDefaultColor() { + final Color color = container.operations().getDefaultColor(); + assertEquals(Color.Red, color); + } + + @Test + public void getPerson2() { + final Person person = container.operations().getPerson2("London"); + assertEquals(1, person.getPersonID(), 0); + } + + @Test + public void getPerson() { + final Address address = container.getPeople().newPerson().factory().newHomeAddress(); + address.setStreet("1 Microsoft Way"); + address.setPostalCode("98052"); + address.setCity("London"); + + final Person person = container.operations().getPerson(address); + assertEquals(1, person.getPersonID(), 0); + } + + @Test + public void getAllProducts() { + final ProductCollection products = container.operations().getAllProducts(); + assertEquals(5, products.size()); + } + + @Test + public void getProductsByAccessLevel() { + final Collection<String> products = container.operations().getProductsByAccessLevel(AccessLevel.None); + assertEquals(5, products.size()); + assertTrue(products.contains("Car")); + } + + @Test + public void discount() { + container.operations().discount(22); + } + + @Test + public void resetBossAddress() { + final Address address = container.getPeople().newPerson().factory().newHomeAddress(); + address.setStreet("Via Le Mani Dal Naso, 123"); + address.setPostalCode("Tollo"); + address.setCity("66010"); + + final Address actual = container.operations().resetBossAddress(address); + assertEquals(address.getStreet(), actual.getStreet()); + assertEquals(address.getPostalCode(), actual.getPostalCode()); + assertEquals(address.getCity(), actual.getCity()); + } + + @Test + public void bossEmails() { + final Collection<String> result = container.operations().resetBossEmail(Arrays.asList( + new String[] {"[email protected]", "[email protected]"})); + assertEquals(2, result.size()); + + final Collection<String> result2 = container.operations().getBossEmails(0, 100); + assertEquals(result, result2); + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/fit/src/test/java/org/apache/olingo/fit/v4/OperationImportInvokeTestITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/OperationImportInvokeTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/OperationImportInvokeTestITCase.java index fbca0fb..36ad27b 100644 --- a/fit/src/test/java/org/apache/olingo/fit/v4/OperationImportInvokeTestITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/v4/OperationImportInvokeTestITCase.java @@ -191,6 +191,7 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase { resetBossAddressReq.setFormat(format); final ODataProperty resetBossAddress = resetBossAddressReq.execute().getBody(); assertNotNull(resetBossAddress); + assertEquals(address, resetBossAddress.getComplexValue()); } @Test http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/fit/src/test/resources/META-INF/enumTypes ---------------------------------------------------------------------- diff --git a/fit/src/test/resources/META-INF/enumTypes b/fit/src/test/resources/META-INF/enumTypes new file mode 100644 index 0000000..c1e5365 --- /dev/null +++ b/fit/src/test/resources/META-INF/enumTypes @@ -0,0 +1,3 @@ +org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.AccessLevel +org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Color +org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.CompanyCategory http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/fit/src/test/resources/META-INF/services/org.apache.olingo.ext.proxy.api.AbstractComplexType ---------------------------------------------------------------------- diff --git a/fit/src/test/resources/META-INF/services/org.apache.olingo.ext.proxy.api.AbstractComplexType b/fit/src/test/resources/META-INF/services/org.apache.olingo.ext.proxy.api.AbstractComplexType deleted file mode 100644 index b72e0ee..0000000 --- a/fit/src/test/resources/META-INF/services/org.apache.olingo.ext.proxy.api.AbstractComplexType +++ /dev/null @@ -1,14 +0,0 @@ - -org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.ComplexWithAllPrimitiveTypes -org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.ComplexToCategory -org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.ContactDetails -org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.ConcurrencyInfo -org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.AuditInfo -org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.Dimensions -org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.Phone -org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.Aliases - -org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.HomeAddress -org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address -org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.CompanyAddress -org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.AccountInfo http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java index 21669b1..5cf9308 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java @@ -98,9 +98,6 @@ public abstract class AbstractODataInvokeRequest<T extends ODataInvokeResult> : format.toString(odataClient.getServiceVersion()); } - /** - * {@inheritDoc } - */ @Override public void setFormat(final ODataPubFormat format) { final String _format = getActualFormat(format); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/ODataInvokeRequestImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/ODataInvokeRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/ODataInvokeRequestImpl.java index a64d991..57d391f 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/ODataInvokeRequestImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/ODataInvokeRequestImpl.java @@ -49,7 +49,7 @@ public class ODataInvokeRequestImpl<T extends ODataInvokeResult> extends Abstrac @Override protected ODataPubFormat getPOSTParameterFormat() { - return format; + return format == null ? getDefaultFormat() : format; } @Override http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java index 0527951..c245498 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java @@ -313,7 +313,7 @@ public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder final ODataLinkedComplexValue lcValue = ((ODataClient) client).getObjectFactory().newLinkedComplexValue(type == null ? null : type.toString()); - for (Property property : valuable.getValue().asComplex().get()) { + for (Property property : valuable.getValue().asLinkedComplex().get()) { lcValue.add(getODataProperty(new ResWrap<Property>(contextURL, metadataETag, property))); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/PrimitiveValueTest.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/PrimitiveValueTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/PrimitiveValueTest.java index f902a0d..03f30d7 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/PrimitiveValueTest.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/PrimitiveValueTest.java @@ -29,12 +29,12 @@ import java.util.Iterator; import java.util.List; import java.util.TimeZone; import java.util.UUID; -import javax.xml.datatype.Duration; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.RandomStringUtils; import org.apache.olingo.commons.api.domain.ODataValue; import org.apache.olingo.client.api.v3.ODataClient; import org.apache.olingo.client.core.AbstractTest; +import org.apache.olingo.commons.api.domain.ODataPrimitiveValue; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind; import org.apache.olingo.commons.api.edm.geo.Geospatial; @@ -122,12 +122,14 @@ public class PrimitiveValueTest extends AbstractTest { @Test public void time() throws EdmPrimitiveTypeException { final String primitive = "-P9DT51M10.5063807S"; - final ODataValue value = - getClient().getObjectFactory().newPrimitiveValueBuilder().setType(EdmPrimitiveTypeKind.Time). - setText(primitive).build(); + final ODataValue value = getClient().getObjectFactory().newPrimitiveValueBuilder(). + setType(EdmPrimitiveTypeKind.Time).setText(primitive).build(); assertEquals(EdmPrimitiveTypeKind.Time, value.asPrimitive().getTypeKind()); - // performed cast to improve the check - assertEquals("-780670.5063807", value.asPrimitive().toCastValue(BigDecimal.class).toString()); + assertEquals(-780670.5063807, value.asPrimitive().toCastValue(BigDecimal.class)); + + final ODataPrimitiveValue write = getClient().getObjectFactory().newPrimitiveValueBuilder(). + setType(EdmPrimitiveTypeKind.Time).setValue(-780670.5063807).build(); + assertEquals(primitive, write.toString()); } @Test http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ead588e8/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index ba29b92..23e6460 100644 --- a/pom.xml +++ b/pom.xml @@ -430,7 +430,7 @@ </goals> <configuration> <excludes> - <exclude>**/META-INF/services/*</exclude> + <exclude>**/META-INF/**</exclude> <exclude>**/*.txt</exclude> <exclude>**/*.ini</exclude> <exclude>**/*.bin</exclude>
