[OLINGO-234] OperationImportInvokeTestITCase moved to fit]
This commit is contained in:
parent
32fcb8cb5e
commit
f87321f98e
|
@ -419,7 +419,7 @@ public abstract class AbstractServices {
|
|||
} else {
|
||||
final Container<JSONEntryImpl> jcont =
|
||||
mapper.readValue(IOUtils.toInputStream(changes), new TypeReference<JSONEntryImpl>() {
|
||||
});
|
||||
});
|
||||
|
||||
entryChanges = dataBinder.getAtomEntry(jcont.getObject());
|
||||
}
|
||||
|
@ -609,7 +609,7 @@ public abstract class AbstractServices {
|
|||
} else {
|
||||
final Container<JSONEntryImpl> jcontainer =
|
||||
mapper.readValue(IOUtils.toInputStream(entity), new TypeReference<JSONEntryImpl>() {
|
||||
});
|
||||
});
|
||||
|
||||
entry = dataBinder.getAtomEntry(jcontainer.getObject());
|
||||
|
||||
|
@ -636,7 +636,7 @@ public abstract class AbstractServices {
|
|||
Container<AtomEntryImpl> result = atomDeserializer.read(serialization, AtomEntryImpl.class);
|
||||
result = new Container<AtomEntryImpl>(
|
||||
URI.create(Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL)
|
||||
+ "$metadata#" + entitySetName + "/$entity"), null, result.getObject());
|
||||
+ "$metadata#" + entitySetName + "/$entity"), null, result.getObject());
|
||||
|
||||
final String path = Commons.getEntityBasePath(entitySetName, entityKey);
|
||||
FSManager.instance(version).putInMemory(
|
||||
|
@ -698,13 +698,13 @@ public abstract class AbstractServices {
|
|||
replaceAll("\"Salary\":[0-9]*,", "\"Salary\":0,").
|
||||
replaceAll("\"Title\":\".*\"", "\"Title\":\"[Sacked]\"").
|
||||
replaceAll("\\<d:Salary m:type=\"Edm.Int32\"\\>.*\\</d:Salary\\>",
|
||||
"<d:Salary m:type=\"Edm.Int32\">0</d:Salary>").
|
||||
"<d:Salary m:type=\"Edm.Int32\">0</d:Salary>").
|
||||
replaceAll("\\<d:Title\\>.*\\</d:Title\\>", "<d:Title>[Sacked]</d:Title>");
|
||||
|
||||
final FSManager fsManager = FSManager.instance(version);
|
||||
fsManager.putInMemory(IOUtils.toInputStream(newContent, "UTF-8"),
|
||||
fsManager.getAbsolutePath(Commons.getEntityBasePath("Person", entityId) + Constants.get(version,
|
||||
ConstantKey.ENTITY), utils.getKey()));
|
||||
ConstantKey.ENTITY), utils.getKey()));
|
||||
|
||||
return utils.getValue().createResponse(null, null, null, utils.getKey(), Response.Status.NO_CONTENT);
|
||||
} catch (Exception e) {
|
||||
|
@ -756,9 +756,9 @@ public abstract class AbstractServices {
|
|||
final Long newSalary = Long.valueOf(salaryMatcher.group(1)) + n;
|
||||
newContent = newContent.
|
||||
replaceAll("\"Salary\":" + salaryMatcher.group(1) + ",",
|
||||
"\"Salary\":" + newSalary + ",").
|
||||
"\"Salary\":" + newSalary + ",").
|
||||
replaceAll("\\<d:Salary m:type=\"Edm.Int32\"\\>" + salaryMatcher.group(1) + "</d:Salary\\>",
|
||||
"<d:Salary m:type=\"Edm.Int32\">" + newSalary + "</d:Salary>");
|
||||
"<d:Salary m:type=\"Edm.Int32\">" + newSalary + "</d:Salary>");
|
||||
}
|
||||
|
||||
FSManager.instance(version).putInMemory(IOUtils.toInputStream(newContent, "UTF-8"),
|
||||
|
@ -888,7 +888,7 @@ public abstract class AbstractServices {
|
|||
} else {
|
||||
mapper.writeValue(
|
||||
writer, new JsonFeedContainer<JSONFeedImpl>(container.getContextURL(), container.getMetadataETag(),
|
||||
dataBinder.getJsonFeed(container.getObject())));
|
||||
dataBinder.getJsonFeed(container.getObject())));
|
||||
}
|
||||
|
||||
return xml.createResponse(
|
||||
|
@ -1503,8 +1503,8 @@ public abstract class AbstractServices {
|
|||
mapper.writeValue(
|
||||
writer,
|
||||
new JsonFeedContainer<JSONFeedImpl>(container.getContextURL(),
|
||||
container.getMetadataETag(),
|
||||
dataBinder.getJsonFeed((AtomFeedImpl) container.getObject())));
|
||||
container.getMetadataETag(),
|
||||
dataBinder.getJsonFeed((AtomFeedImpl) container.getObject())));
|
||||
}
|
||||
} else {
|
||||
final Container<Entry> container = atomDeserializer.<Entry, AtomEntryImpl>read(stream, AtomEntryImpl.class);
|
||||
|
@ -1516,8 +1516,8 @@ public abstract class AbstractServices {
|
|||
mapper.writeValue(
|
||||
writer,
|
||||
new JsonEntryContainer<JSONEntryImpl>(container.getContextURL(),
|
||||
container.getMetadataETag(),
|
||||
dataBinder.getJsonEntry((AtomEntryImpl) container.getObject())));
|
||||
container.getMetadataETag(),
|
||||
dataBinder.getJsonEntry((AtomEntryImpl) container.getObject())));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -25,6 +25,8 @@ import java.io.File;
|
|||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.net.URI;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -48,17 +50,25 @@ import org.apache.commons.io.IOUtils;
|
|||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.cxf.interceptor.InInterceptors;
|
||||
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
|
||||
import org.apache.olingo.commons.api.data.CollectionValue;
|
||||
import org.apache.olingo.commons.api.data.Container;
|
||||
import org.apache.olingo.commons.api.data.Entry;
|
||||
import org.apache.olingo.commons.api.data.Feed;
|
||||
import org.apache.olingo.commons.api.data.Property;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.core.data.AtomEntryImpl;
|
||||
import org.apache.olingo.commons.core.data.AtomFeedImpl;
|
||||
import org.apache.olingo.commons.core.data.AtomPropertyImpl;
|
||||
import org.apache.olingo.commons.core.data.CollectionValueImpl;
|
||||
import org.apache.olingo.commons.core.data.EnumValueImpl;
|
||||
import org.apache.olingo.commons.core.data.JSONEntryImpl;
|
||||
import org.apache.olingo.commons.core.data.JSONFeedImpl;
|
||||
import org.apache.olingo.commons.core.data.JSONPropertyImpl;
|
||||
import org.apache.olingo.commons.core.data.PrimitiveValueImpl;
|
||||
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
|
||||
import org.apache.olingo.fit.methods.PATCH;
|
||||
import org.apache.olingo.fit.serializer.JsonFeedContainer;
|
||||
import org.apache.olingo.fit.serializer.JsonPropertyContainer;
|
||||
import org.apache.olingo.fit.utils.AbstractUtilities;
|
||||
import org.apache.olingo.fit.utils.Accept;
|
||||
import org.apache.olingo.fit.utils.ConstantKey;
|
||||
|
@ -196,7 +206,7 @@ public class V4Services extends AbstractServices {
|
|||
|
||||
return utils.getValue().createResponse(
|
||||
FSManager.instance(version).readFile(Constants.get(version, ConstantKey.REF)
|
||||
+ File.separatorChar + filename, utils.getKey()),
|
||||
+ File.separatorChar + filename, utils.getKey()),
|
||||
null,
|
||||
utils.getKey());
|
||||
} catch (Exception e) {
|
||||
|
@ -218,7 +228,7 @@ public class V4Services extends AbstractServices {
|
|||
|
||||
final Response response =
|
||||
getEntityInternal(uriInfo.getRequestUri().toASCIIString(),
|
||||
accept, entitySetName, entityId, accept, StringUtils.EMPTY, StringUtils.EMPTY, false);
|
||||
accept, entitySetName, entityId, accept, StringUtils.EMPTY, StringUtils.EMPTY, false);
|
||||
return response.getStatus() >= 400
|
||||
? postNewEntity(uriInfo, accept, contentType, prefer, entitySetName, changes)
|
||||
: super.patchEntity(uriInfo, accept, contentType, prefer, ifMatch, entitySetName, entityId, changes);
|
||||
|
@ -272,7 +282,7 @@ public class V4Services extends AbstractServices {
|
|||
|
||||
final InputStream entry = FSManager.instance(version).
|
||||
readFile(containedPath(entityId, containedEntitySetName).
|
||||
append('(').append(containedEntityId).append(')').toString(), Accept.ATOM);
|
||||
append('(').append(containedEntityId).append(')').toString(), Accept.ATOM);
|
||||
|
||||
final Container<AtomEntryImpl> container = atomDeserializer.read(entry, AtomEntryImpl.class);
|
||||
|
||||
|
@ -315,7 +325,7 @@ public class V4Services extends AbstractServices {
|
|||
} else {
|
||||
final Container<JSONEntryImpl> jcontainer =
|
||||
mapper.readValue(IOUtils.toInputStream(entity), new TypeReference<JSONEntryImpl>() {
|
||||
});
|
||||
});
|
||||
|
||||
entry = dataBinder.getAtomEntry(jcontainer.getObject());
|
||||
|
||||
|
@ -413,7 +423,7 @@ public class V4Services extends AbstractServices {
|
|||
|
||||
final Container<JSONEntryImpl> jsonContainer = mapper.readValue(IOUtils.toInputStream(changes),
|
||||
new TypeReference<JSONEntryImpl>() {
|
||||
});
|
||||
});
|
||||
jsonContainer.getObject().setType(typeInfo.getFullQualifiedName().toString());
|
||||
entryChanges = dataBinder.getAtomEntry(jsonContainer.getObject());
|
||||
}
|
||||
|
@ -446,7 +456,7 @@ public class V4Services extends AbstractServices {
|
|||
// 1. Fetch the contained entity to be removed
|
||||
final InputStream entry = FSManager.instance(version).
|
||||
readFile(containedPath(entityId, containedEntitySetName).
|
||||
append('(').append(containedEntityId).append(')').toString(), Accept.ATOM);
|
||||
append('(').append(containedEntityId).append(')').toString(), Accept.ATOM);
|
||||
final Container<AtomEntryImpl> container = atomDeserializer.read(entry, AtomEntryImpl.class);
|
||||
|
||||
// 2. Remove the contained entity
|
||||
|
@ -510,7 +520,7 @@ public class V4Services extends AbstractServices {
|
|||
} else {
|
||||
mapper.writeValue(
|
||||
writer, new JsonFeedContainer<JSONFeedImpl>(container.getContextURL(), container.getMetadataETag(),
|
||||
dataBinder.getJsonFeed(container.getObject())));
|
||||
dataBinder.getJsonFeed(container.getObject())));
|
||||
}
|
||||
|
||||
return xml.createResponse(
|
||||
|
@ -522,4 +532,315 @@ public class V4Services extends AbstractServices {
|
|||
return xml.createFaultResponse(accept, e);
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/GetDefaultColor()")
|
||||
public Response functionGetDefaultColor(
|
||||
@HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
|
||||
@QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format) {
|
||||
|
||||
try {
|
||||
final Accept acceptType;
|
||||
if (StringUtils.isNotBlank(format)) {
|
||||
acceptType = Accept.valueOf(format.toUpperCase());
|
||||
} else {
|
||||
acceptType = Accept.parse(accept, version);
|
||||
}
|
||||
|
||||
final AtomPropertyImpl property = new AtomPropertyImpl();
|
||||
property.setType("Microsoft.Test.OData.Services.ODataWCFService.Color");
|
||||
property.setValue(new EnumValueImpl("Red"));
|
||||
final Container<AtomPropertyImpl> container = new Container<AtomPropertyImpl>(
|
||||
URI.create(Constants.get(version, ConstantKey.ODATA_METADATA_PREFIX) + property.getType()), null,
|
||||
property);
|
||||
|
||||
final ByteArrayOutputStream content = new ByteArrayOutputStream();
|
||||
final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
|
||||
|
||||
if (acceptType == Accept.XML) {
|
||||
atomSerializer.write(writer, container);
|
||||
writer.flush();
|
||||
writer.close();
|
||||
} else {
|
||||
mapper.writeValue(
|
||||
writer, new JsonPropertyContainer<JSONPropertyImpl>(container.getContextURL(),
|
||||
container.getMetadataETag(), dataBinder.getJsonProperty(container.getObject())));
|
||||
}
|
||||
|
||||
return xml.createResponse(
|
||||
null,
|
||||
new ByteArrayInputStream(content.toByteArray()),
|
||||
null,
|
||||
acceptType);
|
||||
} catch (Exception e) {
|
||||
return xml.createFaultResponse(accept, e);
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/GetPerson2({param:.*})")
|
||||
public Response functionGetPerson2(
|
||||
@Context UriInfo uriInfo,
|
||||
@HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
|
||||
@QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format) {
|
||||
|
||||
return getEntityInternal(
|
||||
uriInfo.getRequestUri().toASCIIString(), accept, "Customers", "1", format, null, null, false);
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/GetPerson({param:.*})")
|
||||
public Response functionGetPerson(
|
||||
@Context UriInfo uriInfo,
|
||||
@HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
|
||||
@QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format) {
|
||||
|
||||
return getEntityInternal(
|
||||
uriInfo.getRequestUri().toASCIIString(), accept, "Customers", "1", format, null, null, false);
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/GetAllProducts()")
|
||||
public Response functionGetAllProducts(
|
||||
@Context UriInfo uriInfo,
|
||||
@HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
|
||||
@QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format) {
|
||||
|
||||
return getEntitySet(uriInfo, accept, "Products", format, null, null, null, null);
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/GetProductsByAccessLevel({param:.*})")
|
||||
public Response functionGetProductsByAccessLevel(
|
||||
@Context UriInfo uriInfo,
|
||||
@HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
|
||||
@QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format) {
|
||||
|
||||
try {
|
||||
final Accept acceptType;
|
||||
if (StringUtils.isNotBlank(format)) {
|
||||
acceptType = Accept.valueOf(format.toUpperCase());
|
||||
} else {
|
||||
acceptType = Accept.parse(accept, version);
|
||||
}
|
||||
|
||||
final AtomPropertyImpl property = new AtomPropertyImpl();
|
||||
property.setType("Collection(String)");
|
||||
final CollectionValue value = new CollectionValueImpl();
|
||||
value.get().add(new PrimitiveValueImpl("Cheetos"));
|
||||
value.get().add(new PrimitiveValueImpl("Mushrooms"));
|
||||
value.get().add(new PrimitiveValueImpl("Apple"));
|
||||
value.get().add(new PrimitiveValueImpl("Car"));
|
||||
value.get().add(new PrimitiveValueImpl("Computer"));
|
||||
property.setValue(value);
|
||||
final Container<AtomPropertyImpl> container = new Container<AtomPropertyImpl>(
|
||||
URI.create(Constants.get(version, ConstantKey.ODATA_METADATA_PREFIX) + property.getType()), null,
|
||||
property);
|
||||
|
||||
final ByteArrayOutputStream content = new ByteArrayOutputStream();
|
||||
final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
|
||||
|
||||
if (acceptType == Accept.XML) {
|
||||
atomSerializer.write(writer, container);
|
||||
writer.flush();
|
||||
writer.close();
|
||||
} else {
|
||||
mapper.writeValue(
|
||||
writer, new JsonPropertyContainer<JSONPropertyImpl>(container.getContextURL(),
|
||||
container.getMetadataETag(), dataBinder.getJsonProperty(container.getObject())));
|
||||
}
|
||||
|
||||
return xml.createResponse(
|
||||
null,
|
||||
new ByteArrayInputStream(content.toByteArray()),
|
||||
null,
|
||||
acceptType);
|
||||
} catch (Exception e) {
|
||||
return xml.createFaultResponse(accept, e);
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/GetBossEmails({param:.*})")
|
||||
public Response functionGetBossEmails(
|
||||
@Context UriInfo uriInfo,
|
||||
@HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
|
||||
@QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format) {
|
||||
|
||||
try {
|
||||
final Accept acceptType;
|
||||
if (StringUtils.isNotBlank(format)) {
|
||||
acceptType = Accept.valueOf(format.toUpperCase());
|
||||
} else {
|
||||
acceptType = Accept.parse(accept, version);
|
||||
}
|
||||
|
||||
final AtomPropertyImpl property = new AtomPropertyImpl();
|
||||
property.setType("Collection(Edm.String)");
|
||||
final CollectionValue value = new CollectionValueImpl();
|
||||
value.get().add(new PrimitiveValueImpl("first@olingo.apache.org"));
|
||||
value.get().add(new PrimitiveValueImpl("second@olingo.apache.org"));
|
||||
property.setValue(value);
|
||||
final Container<AtomPropertyImpl> container = new Container<AtomPropertyImpl>(
|
||||
URI.create(Constants.get(version, ConstantKey.ODATA_METADATA_PREFIX) + property.getType()), null,
|
||||
property);
|
||||
|
||||
final ByteArrayOutputStream content = new ByteArrayOutputStream();
|
||||
final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
|
||||
|
||||
if (acceptType == Accept.XML) {
|
||||
atomSerializer.write(writer, container);
|
||||
writer.flush();
|
||||
writer.close();
|
||||
} else {
|
||||
mapper.writeValue(
|
||||
writer, new JsonPropertyContainer<JSONPropertyImpl>(container.getContextURL(),
|
||||
container.getMetadataETag(), dataBinder.getJsonProperty(container.getObject())));
|
||||
}
|
||||
|
||||
return xml.createResponse(
|
||||
null,
|
||||
new ByteArrayInputStream(content.toByteArray()),
|
||||
null,
|
||||
acceptType);
|
||||
} catch (Exception e) {
|
||||
return xml.createFaultResponse(accept, e);
|
||||
}
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/Discount()")
|
||||
public Response actionDiscount(
|
||||
@HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
|
||||
@HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) String contentType,
|
||||
@QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format,
|
||||
final String param) {
|
||||
|
||||
try {
|
||||
final Accept acceptType;
|
||||
if (StringUtils.isNotBlank(format)) {
|
||||
acceptType = Accept.valueOf(format.toUpperCase());
|
||||
} else {
|
||||
acceptType = Accept.parse(accept, version);
|
||||
}
|
||||
|
||||
final Accept contentTypeValue = Accept.parse(contentType, version);
|
||||
Property property;
|
||||
if (contentTypeValue == Accept.ATOM) {
|
||||
final Container<AtomPropertyImpl> paramContainer = atomDeserializer.read(
|
||||
IOUtils.toInputStream(param, Constants.ENCODING), AtomPropertyImpl.class);
|
||||
property = paramContainer.getObject();
|
||||
} else {
|
||||
final Container<JSONPropertyImpl> paramContainer =
|
||||
mapper.readValue(IOUtils.toInputStream(param, Constants.ENCODING),
|
||||
new TypeReference<JSONPropertyImpl>() {
|
||||
});
|
||||
property = paramContainer.getObject();
|
||||
}
|
||||
|
||||
assert property.getValue().isComplex();
|
||||
assert 1 == property.getValue().asComplex().get().size();
|
||||
assert "Edm.Int32".equals(property.getValue().asComplex().get().get(0).getType());
|
||||
assert property.getValue().asComplex().get().get(0).getValue().isPrimitive();
|
||||
assert "percentage".equals(property.getValue().asComplex().get().get(0).getName());
|
||||
|
||||
return xml.createResponse(null, null, null, acceptType, Response.Status.NO_CONTENT);
|
||||
} catch (Exception e) {
|
||||
return xml.createFaultResponse(accept, e);
|
||||
}
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/ResetBossAddress()")
|
||||
public Response actionResetBossAddress(
|
||||
@HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
|
||||
@HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) String contentType,
|
||||
@QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format,
|
||||
final String param) {
|
||||
|
||||
try {
|
||||
final Accept acceptType;
|
||||
if (StringUtils.isNotBlank(format)) {
|
||||
acceptType = Accept.valueOf(format.toUpperCase());
|
||||
} else {
|
||||
acceptType = Accept.parse(accept, version);
|
||||
}
|
||||
|
||||
final Accept contentTypeValue = Accept.parse(contentType, version);
|
||||
Property property;
|
||||
if (contentTypeValue == Accept.XML) {
|
||||
final Container<AtomPropertyImpl> paramContainer = atomDeserializer.read(
|
||||
IOUtils.toInputStream(param, Constants.ENCODING), AtomPropertyImpl.class);
|
||||
property = paramContainer.getObject();
|
||||
} else {
|
||||
final Container<JSONPropertyImpl> paramContainer =
|
||||
mapper.readValue(IOUtils.toInputStream(param, Constants.ENCODING),
|
||||
new TypeReference<JSONPropertyImpl>() {
|
||||
});
|
||||
property = paramContainer.getObject();
|
||||
}
|
||||
|
||||
assert "Microsoft.Test.OData.Services.ODataWCFService.Address".equals(property.getType());
|
||||
assert property.getValue().isComplex();
|
||||
|
||||
return xml.createResponse(
|
||||
null,
|
||||
new ByteArrayInputStream(param.getBytes(Constants.ENCODING)),
|
||||
null,
|
||||
acceptType);
|
||||
} catch (Exception e) {
|
||||
return xml.createFaultResponse(accept, e);
|
||||
}
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/ResetBossEmail()")
|
||||
public Response actionResetBossEmail(
|
||||
@HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
|
||||
@HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) String contentType,
|
||||
@QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format,
|
||||
final String param) {
|
||||
|
||||
try {
|
||||
final Accept acceptType;
|
||||
if (StringUtils.isNotBlank(format)) {
|
||||
acceptType = Accept.valueOf(format.toUpperCase());
|
||||
} else {
|
||||
acceptType = Accept.parse(accept, version);
|
||||
}
|
||||
|
||||
final Accept contentTypeValue = Accept.parse(contentType, version);
|
||||
Entry entry;
|
||||
if (contentTypeValue == Accept.XML) {
|
||||
final Container<AtomEntryImpl> paramContainer = atomDeserializer.read(
|
||||
IOUtils.toInputStream(param, Constants.ENCODING), AtomEntryImpl.class);
|
||||
entry = paramContainer.getObject();
|
||||
} else {
|
||||
final Container<JSONEntryImpl> paramContainer =
|
||||
mapper.readValue(IOUtils.toInputStream(param, Constants.ENCODING),
|
||||
new TypeReference<JSONEntryImpl>() {
|
||||
});
|
||||
entry = paramContainer.getObject();
|
||||
}
|
||||
|
||||
assert 1 == entry.getProperties().size();
|
||||
assert "Collection(Edm.String)".equals(entry.getProperty("emails").getType());
|
||||
assert entry.getProperty("emails").getValue().isCollection();
|
||||
|
||||
final StringWriter writer = new StringWriter();
|
||||
if (acceptType == Accept.XML) {
|
||||
atomSerializer.write(writer, entry.getProperty("emails"));
|
||||
} else {
|
||||
mapper.writeValue(writer, entry.getProperty("emails"));
|
||||
}
|
||||
|
||||
return xml.createResponse(
|
||||
null,
|
||||
new ByteArrayInputStream(writer.toString().getBytes(Constants.ENCODING)),
|
||||
null,
|
||||
acceptType);
|
||||
} catch (Exception e) {
|
||||
return xml.createFaultResponse(accept, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* 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.serializer;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import java.net.URI;
|
||||
import org.apache.olingo.commons.api.data.Container;
|
||||
import org.apache.olingo.commons.core.data.JSONPropertyDeserializer;
|
||||
import org.apache.olingo.commons.core.data.JSONPropertySerializer;
|
||||
|
||||
@JsonDeserialize(using = JSONPropertyDeserializer.class)
|
||||
@JsonSerialize(using = JSONPropertySerializer.class)
|
||||
public class JsonPropertyContainer<T> extends Container<T> {
|
||||
|
||||
public JsonPropertyContainer(final URI contextURL, final String metadataETag, final T object) {
|
||||
super(contextURL, metadataETag, object);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,139 @@
|
|||
{
|
||||
"@odata.context": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/$metadata#Products",
|
||||
"value": [{
|
||||
"@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.Product",
|
||||
"@odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(5)",
|
||||
"@odata.editLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(5)",
|
||||
"ProductID": 5,
|
||||
"Name": "Cheetos",
|
||||
"QuantityPerUnit": "100g Bag",
|
||||
"UnitPrice@odata.type": "#Single",
|
||||
"UnitPrice": 3.24,
|
||||
"QuantityInStock": 100,
|
||||
"Discontinued": true,
|
||||
"UserAccess@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.AccessLevel",
|
||||
"UserAccess": "None",
|
||||
"SkinColor@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.Color",
|
||||
"SkinColor": "Red",
|
||||
"CoverColors@odata.type": "#Collection(Microsoft.Test.OData.Services.ODataWCFService.Color)",
|
||||
"CoverColors": ["Green", "Blue", "Blue"],
|
||||
"Details@odata.associationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(5)/Details/$ref",
|
||||
"Details@odata.navigationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(5)/Details",
|
||||
"#Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight": {
|
||||
"title": "Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight",
|
||||
"target": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(5)/Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight"
|
||||
},
|
||||
"#Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails": {
|
||||
"title": "Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails",
|
||||
"target": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(5)/Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails"
|
||||
}
|
||||
}, {
|
||||
"@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.Product",
|
||||
"@odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(6)",
|
||||
"@odata.editLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(6)",
|
||||
"ProductID": 6,
|
||||
"Name": "Mushrooms",
|
||||
"QuantityPerUnit": "Pound",
|
||||
"UnitPrice@odata.type": "#Single",
|
||||
"UnitPrice": 3.24,
|
||||
"QuantityInStock": 100,
|
||||
"Discontinued": false,
|
||||
"UserAccess@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.AccessLevel",
|
||||
"UserAccess": "ReadWrite",
|
||||
"SkinColor@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.Color",
|
||||
"SkinColor": "Blue",
|
||||
"CoverColors@odata.type": "#Collection(Microsoft.Test.OData.Services.ODataWCFService.Color)",
|
||||
"CoverColors": ["Red", "Blue"],
|
||||
"Details@odata.associationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(6)/Details/$ref",
|
||||
"Details@odata.navigationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(6)/Details",
|
||||
"#Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight": {
|
||||
"title": "Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight",
|
||||
"target": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(6)/Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight"
|
||||
},
|
||||
"#Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails": {
|
||||
"title": "Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails",
|
||||
"target": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(6)/Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails"
|
||||
}
|
||||
}, {
|
||||
"@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.Product",
|
||||
"@odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(7)",
|
||||
"@odata.editLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(7)",
|
||||
"ProductID": 7,
|
||||
"Name": "Apple",
|
||||
"QuantityPerUnit": "Pound",
|
||||
"UnitPrice@odata.type": "#Single",
|
||||
"UnitPrice": 0.35,
|
||||
"QuantityInStock": 20,
|
||||
"Discontinued": false,
|
||||
"UserAccess@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.AccessLevel",
|
||||
"UserAccess": "Read",
|
||||
"SkinColor@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.Color",
|
||||
"SkinColor": "Red",
|
||||
"CoverColors@odata.type": "#Collection(Microsoft.Test.OData.Services.ODataWCFService.Color)",
|
||||
"CoverColors": ["Blue"],
|
||||
"Details@odata.associationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(7)/Details/$ref",
|
||||
"Details@odata.navigationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(7)/Details",
|
||||
"#Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight": {
|
||||
"title": "Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight",
|
||||
"target": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(7)/Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight"
|
||||
},
|
||||
"#Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails": {
|
||||
"title": "Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails",
|
||||
"target": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(7)/Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails"
|
||||
}
|
||||
}, {
|
||||
"@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.Product",
|
||||
"@odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(8)",
|
||||
"@odata.editLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(8)",
|
||||
"ProductID": 8,
|
||||
"Name": "Car",
|
||||
"QuantityPerUnit": "Pound",
|
||||
"UnitPrice@odata.type": "#Single",
|
||||
"UnitPrice": 28000,
|
||||
"QuantityInStock": 300,
|
||||
"Discontinued": false,
|
||||
"UserAccess@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.AccessLevel",
|
||||
"UserAccess": "Execute",
|
||||
"SkinColor@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.Color",
|
||||
"SkinColor": "Red",
|
||||
"CoverColors@odata.type": "#Collection(Microsoft.Test.OData.Services.ODataWCFService.Color)",
|
||||
"CoverColors": ["Red", "Red", "Blue"],
|
||||
"Details@odata.associationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(8)/Details/$ref",
|
||||
"Details@odata.navigationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(8)/Details",
|
||||
"#Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight": {
|
||||
"title": "Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight",
|
||||
"target": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(8)/Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight"
|
||||
},
|
||||
"#Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails": {
|
||||
"title": "Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails",
|
||||
"target": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(8)/Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails"
|
||||
}
|
||||
}, {
|
||||
"@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.Product",
|
||||
"@odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(9)",
|
||||
"@odata.editLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(9)",
|
||||
"ProductID": 9,
|
||||
"Name": "Computer",
|
||||
"QuantityPerUnit": "Pound",
|
||||
"UnitPrice@odata.type": "#Single",
|
||||
"UnitPrice": 1250,
|
||||
"QuantityInStock": 1000,
|
||||
"Discontinued": false,
|
||||
"UserAccess@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.AccessLevel",
|
||||
"UserAccess": "Read",
|
||||
"SkinColor@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.Color",
|
||||
"SkinColor": "Green",
|
||||
"CoverColors@odata.type": "#Collection(Microsoft.Test.OData.Services.ODataWCFService.Color)",
|
||||
"CoverColors": ["Green"],
|
||||
"Details@odata.associationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(9)/Details/$ref",
|
||||
"Details@odata.navigationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(9)/Details",
|
||||
"#Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight": {
|
||||
"title": "Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight",
|
||||
"target": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(9)/Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight"
|
||||
},
|
||||
"#Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails": {
|
||||
"title": "Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails",
|
||||
"target": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(9)/Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails"
|
||||
}
|
||||
}]
|
||||
}
|
|
@ -0,0 +1,167 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
|
||||
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.
|
||||
|
||||
-->
|
||||
<feed xml:base="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/"
|
||||
xmlns="http://www.w3.org/2005/Atom"
|
||||
xmlns:d="http://docs.oasis-open.org/odata/ns/data"
|
||||
xmlns:m="http://docs.oasis-open.org/odata/ns/metadata"
|
||||
xmlns:georss="http://www.georss.org/georss"
|
||||
xmlns:gml="http://www.opengis.net/gml"
|
||||
m:context="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/$metadata#Products">
|
||||
<id>http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products</id>
|
||||
<title />
|
||||
<updated>2014-04-23T08:04:46Z</updated>
|
||||
<entry>
|
||||
<id>http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(5)</id>
|
||||
<category term="#Microsoft.Test.OData.Services.ODataWCFService.Product" scheme="http://docs.oasis-open.org/odata/ns/scheme" />
|
||||
<link rel="edit" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(5)" />
|
||||
<link rel="http://docs.oasis-open.org/odata/ns/related/Details" type="application/atom+xml;type=feed" title="Details" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(5)/Details" />
|
||||
<title />
|
||||
<updated>2014-04-23T08:04:46Z</updated>
|
||||
<author>
|
||||
<name />
|
||||
</author>
|
||||
<content type="application/xml">
|
||||
<m:properties>
|
||||
<d:ProductID m:type="Int32">5</d:ProductID>
|
||||
<d:Name>Cheetos</d:Name>
|
||||
<d:QuantityPerUnit>100g Bag</d:QuantityPerUnit>
|
||||
<d:UnitPrice m:type="Single">3.24</d:UnitPrice>
|
||||
<d:QuantityInStock m:type="Int32">100</d:QuantityInStock>
|
||||
<d:Discontinued m:type="Boolean">true</d:Discontinued>
|
||||
<d:UserAccess m:type="#Microsoft.Test.OData.Services.ODataWCFService.AccessLevel">None</d:UserAccess>
|
||||
<d:SkinColor m:type="#Microsoft.Test.OData.Services.ODataWCFService.Color">Red</d:SkinColor>
|
||||
<d:CoverColors m:type="#Collection(Microsoft.Test.OData.Services.ODataWCFService.Color)">
|
||||
<m:element>Green</m:element>
|
||||
<m:element>Blue</m:element>
|
||||
<m:element>Blue</m:element>
|
||||
</d:CoverColors>
|
||||
</m:properties>
|
||||
</content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(6)</id>
|
||||
<category term="#Microsoft.Test.OData.Services.ODataWCFService.Product" scheme="http://docs.oasis-open.org/odata/ns/scheme" />
|
||||
<link rel="edit" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(6)" />
|
||||
<link rel="http://docs.oasis-open.org/odata/ns/related/Details" type="application/atom+xml;type=feed" title="Details" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(6)/Details" />
|
||||
<title />
|
||||
<updated>2014-04-23T08:04:46Z</updated>
|
||||
<author>
|
||||
<name />
|
||||
</author>
|
||||
<content type="application/xml">
|
||||
<m:properties>
|
||||
<d:ProductID m:type="Int32">6</d:ProductID>
|
||||
<d:Name>Mushrooms</d:Name>
|
||||
<d:QuantityPerUnit>Pound</d:QuantityPerUnit>
|
||||
<d:UnitPrice m:type="Single">3.24</d:UnitPrice>
|
||||
<d:QuantityInStock m:type="Int32">100</d:QuantityInStock>
|
||||
<d:Discontinued m:type="Boolean">false</d:Discontinued>
|
||||
<d:UserAccess m:type="#Microsoft.Test.OData.Services.ODataWCFService.AccessLevel">ReadWrite</d:UserAccess>
|
||||
<d:SkinColor m:type="#Microsoft.Test.OData.Services.ODataWCFService.Color">Blue</d:SkinColor>
|
||||
<d:CoverColors m:type="#Collection(Microsoft.Test.OData.Services.ODataWCFService.Color)">
|
||||
<m:element>Red</m:element>
|
||||
<m:element>Blue</m:element>
|
||||
</d:CoverColors>
|
||||
</m:properties>
|
||||
</content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(7)</id>
|
||||
<category term="#Microsoft.Test.OData.Services.ODataWCFService.Product" scheme="http://docs.oasis-open.org/odata/ns/scheme" />
|
||||
<link rel="edit" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(7)" />
|
||||
<link rel="http://docs.oasis-open.org/odata/ns/related/Details" type="application/atom+xml;type=feed" title="Details" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(7)/Details" />
|
||||
<title />
|
||||
<updated>2014-04-23T08:04:46Z</updated>
|
||||
<author>
|
||||
<name />
|
||||
</author>
|
||||
<content type="application/xml">
|
||||
<m:properties>
|
||||
<d:ProductID m:type="Int32">7</d:ProductID>
|
||||
<d:Name>Apple</d:Name>
|
||||
<d:QuantityPerUnit>Pound</d:QuantityPerUnit>
|
||||
<d:UnitPrice m:type="Single">0.35</d:UnitPrice>
|
||||
<d:QuantityInStock m:type="Int32">20</d:QuantityInStock>
|
||||
<d:Discontinued m:type="Boolean">false</d:Discontinued>
|
||||
<d:UserAccess m:type="#Microsoft.Test.OData.Services.ODataWCFService.AccessLevel">Read</d:UserAccess>
|
||||
<d:SkinColor m:type="#Microsoft.Test.OData.Services.ODataWCFService.Color">Red</d:SkinColor>
|
||||
<d:CoverColors m:type="#Collection(Microsoft.Test.OData.Services.ODataWCFService.Color)">
|
||||
<m:element>Blue</m:element>
|
||||
</d:CoverColors>
|
||||
</m:properties>
|
||||
</content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(8)</id>
|
||||
<category term="#Microsoft.Test.OData.Services.ODataWCFService.Product" scheme="http://docs.oasis-open.org/odata/ns/scheme" />
|
||||
<link rel="edit" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(8)" />
|
||||
<link rel="http://docs.oasis-open.org/odata/ns/related/Details" type="application/atom+xml;type=feed" title="Details" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(8)/Details" />
|
||||
<title />
|
||||
<updated>2014-04-23T08:04:46Z</updated>
|
||||
<author>
|
||||
<name />
|
||||
</author>
|
||||
<content type="application/xml">
|
||||
<m:properties>
|
||||
<d:ProductID m:type="Int32">8</d:ProductID>
|
||||
<d:Name>Car</d:Name>
|
||||
<d:QuantityPerUnit>Pound</d:QuantityPerUnit>
|
||||
<d:UnitPrice m:type="Single">28000</d:UnitPrice>
|
||||
<d:QuantityInStock m:type="Int32">300</d:QuantityInStock>
|
||||
<d:Discontinued m:type="Boolean">false</d:Discontinued>
|
||||
<d:UserAccess m:type="#Microsoft.Test.OData.Services.ODataWCFService.AccessLevel">Execute</d:UserAccess>
|
||||
<d:SkinColor m:type="#Microsoft.Test.OData.Services.ODataWCFService.Color">Red</d:SkinColor>
|
||||
<d:CoverColors m:type="#Collection(Microsoft.Test.OData.Services.ODataWCFService.Color)">
|
||||
<m:element>Red</m:element>
|
||||
<m:element>Red</m:element>
|
||||
<m:element>Blue</m:element>
|
||||
</d:CoverColors>
|
||||
</m:properties>
|
||||
</content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(9)</id>
|
||||
<category term="#Microsoft.Test.OData.Services.ODataWCFService.Product" scheme="http://docs.oasis-open.org/odata/ns/scheme" />
|
||||
<link rel="edit" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(9)" />
|
||||
<link rel="http://docs.oasis-open.org/odata/ns/related/Details" type="application/atom+xml;type=feed" title="Details" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/Products(9)/Details" />
|
||||
<title />
|
||||
<updated>2014-04-23T08:04:46Z</updated>
|
||||
<author>
|
||||
<name />
|
||||
</author>
|
||||
<content type="application/xml">
|
||||
<m:properties>
|
||||
<d:ProductID m:type="Int32">9</d:ProductID>
|
||||
<d:Name>Computer</d:Name>
|
||||
<d:QuantityPerUnit>Pound</d:QuantityPerUnit>
|
||||
<d:UnitPrice m:type="Single">1250</d:UnitPrice>
|
||||
<d:QuantityInStock m:type="Int32">1000</d:QuantityInStock>
|
||||
<d:Discontinued m:type="Boolean">false</d:Discontinued>
|
||||
<d:UserAccess m:type="#Microsoft.Test.OData.Services.ODataWCFService.AccessLevel">Read</d:UserAccess>
|
||||
<d:SkinColor m:type="#Microsoft.Test.OData.Services.ODataWCFService.Color">Green</d:SkinColor>
|
||||
<d:CoverColors m:type="#Collection(Microsoft.Test.OData.Services.ODataWCFService.Color)">
|
||||
<m:element>Green</m:element>
|
||||
</d:CoverColors>
|
||||
</m:properties>
|
||||
</content>
|
||||
</entry>
|
||||
</feed>
|
|
@ -70,7 +70,7 @@ public abstract class AbstractODataInvokeRequest<T extends ODataInvokeResult>
|
|||
* @param uri URI that identifies the operation.
|
||||
*/
|
||||
public AbstractODataInvokeRequest(
|
||||
final CommonODataClient odataClient,
|
||||
final CommonODataClient<?> odataClient,
|
||||
final Class<T> reference,
|
||||
final HttpMethod method,
|
||||
final URI uri) {
|
||||
|
|
|
@ -32,8 +32,8 @@ import org.apache.olingo.commons.api.format.ODataPubFormat;
|
|||
|
||||
public class ODataInvokeRequestImpl<T extends ODataInvokeResult> extends AbstractODataInvokeRequest<T> {
|
||||
|
||||
public ODataInvokeRequestImpl(final CommonODataClient odataClient, final Class<T> reference, final HttpMethod method,
|
||||
final URI uri) {
|
||||
public ODataInvokeRequestImpl(final CommonODataClient<?> odataClient, final Class<T> reference,
|
||||
final HttpMethod method, final URI uri) {
|
||||
|
||||
super(odataClient, reference, method, uri);
|
||||
}
|
||||
|
|
|
@ -35,8 +35,8 @@ public class ODataInvokeRequestImpl<T extends ODataInvokeResult> extends Abstrac
|
|||
|
||||
private ODataPubFormat format;
|
||||
|
||||
public ODataInvokeRequestImpl(final CommonODataClient odataClient, final Class<T> reference, final HttpMethod method,
|
||||
final URI uri) {
|
||||
public ODataInvokeRequestImpl(final CommonODataClient<?> odataClient, final Class<T> reference,
|
||||
final HttpMethod method, final URI uri) {
|
||||
|
||||
super(odataClient, reference, method, uri);
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@ public class BatchTestITCase extends AbstractTestITCase {
|
|||
private static final int MAX = 10000;
|
||||
|
||||
// ------------------------
|
||||
// Uncomment to performe check externally ...
|
||||
// Uncomment to check externally ...
|
||||
// ------------------------
|
||||
// private final static String testStaticServiceRootURL=
|
||||
// "http://odatae2etest.azurewebsites.net/javatest/DefaultService/";
|
||||
|
|
|
@ -22,13 +22,9 @@ import static org.junit.Assert.assertEquals;
|
|||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
|
||||
import org.apache.olingo.client.api.communication.request.invoke.ODataNoContent;
|
||||
import org.apache.olingo.commons.api.domain.ODataCollectionValue;
|
||||
|
@ -46,35 +42,14 @@ import org.apache.olingo.commons.api.edm.EdmFunctionImport;
|
|||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
|
||||
import org.apache.olingo.commons.api.format.ODataPubFormat;
|
||||
import org.junit.Assume;
|
||||
import org.junit.BeforeClass;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public class OperationImportInvokeTestITCase extends AbstractTestITCase {
|
||||
|
||||
private static final String serviceRoot = "http://odatae2etest.azurewebsites.net/javatest/DefaultService";
|
||||
|
||||
// TODO: remove once fit provides function / action imports
|
||||
@BeforeClass
|
||||
public static void checkServerIsOnline() throws IOException {
|
||||
final Socket socket = new Socket();
|
||||
boolean reachable = false;
|
||||
try {
|
||||
socket.connect(new InetSocketAddress("odatae2etest.azurewebsites.net", 80), 2000);
|
||||
reachable = true;
|
||||
} catch (Exception e) {
|
||||
LOG.warn("External test service not reachable, ignoring this whole class: {}",
|
||||
OperationImportInvokeTestITCase.class.getName());
|
||||
} finally {
|
||||
IOUtils.closeQuietly(socket);
|
||||
}
|
||||
Assume.assumeTrue(reachable);
|
||||
}
|
||||
|
||||
private Edm getEdm() {
|
||||
final Edm edm = getClient().getRetrieveRequestFactory().
|
||||
getMetadataRequest(serviceRoot).execute().getBody();
|
||||
getMetadataRequest(testStaticServiceRootURL).execute().getBody();
|
||||
assertNotNull(edm);
|
||||
|
||||
return edm;
|
||||
|
@ -89,7 +64,7 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
|
|||
EdmFunctionImport funcImp = container.getFunctionImport("GetDefaultColor");
|
||||
|
||||
final ODataInvokeRequest<ODataProperty> defaultColorReq = getClient().getInvokeRequestFactory().
|
||||
getInvokeRequest(getClient().getURIBuilder(serviceRoot).
|
||||
getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
|
||||
appendOperationCallSegment(funcImp.getName()).build(),
|
||||
funcImp.getUnboundFunctions().get(0));
|
||||
defaultColorReq.setFormat(format);
|
||||
|
@ -106,7 +81,7 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
|
|||
getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("London");
|
||||
|
||||
final ODataInvokeRequest<ODataEntity> person2Req = getClient().getInvokeRequestFactory().
|
||||
getInvokeRequest(getClient().getURIBuilder(serviceRoot).
|
||||
getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
|
||||
appendOperationCallSegment(funcImp.getName()).build(),
|
||||
funcImp.getUnboundFunctions().get(0),
|
||||
Collections.<String, ODataValue>singletonMap("city", city));
|
||||
|
@ -129,24 +104,20 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
|
|||
client.getObjectFactory().newPrimitiveValueBuilder().buildString("98052")));
|
||||
|
||||
final ODataInvokeRequest<ODataEntity> personReq = getClient().getInvokeRequestFactory().
|
||||
getInvokeRequest(getClient().getURIBuilder(serviceRoot).
|
||||
getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
|
||||
appendOperationCallSegment(funcImp.getName()).build(),
|
||||
funcImp.getUnboundFunctions().get(0),
|
||||
Collections.<String, ODataValue>singletonMap("address", address));
|
||||
personReq.setFormat(format);
|
||||
//TODO test service doesn't support yet complex and collection values as inline parameters
|
||||
try {
|
||||
final ODataEntity person = personReq.execute().getBody();
|
||||
assertNotNull(person);
|
||||
} catch (Exception e) {
|
||||
// ignore
|
||||
}
|
||||
final ODataEntity person = personReq.execute().getBody();
|
||||
assertNotNull(person);
|
||||
assertEquals(person2, person);
|
||||
|
||||
// GetAllProducts
|
||||
funcImp = container.getFunctionImport("GetAllProducts");
|
||||
|
||||
final ODataInvokeRequest<ODataEntitySet> productsReq = getClient().getInvokeRequestFactory().
|
||||
getInvokeRequest(getClient().getURIBuilder(serviceRoot).
|
||||
getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
|
||||
appendOperationCallSegment(funcImp.getName()).build(),
|
||||
funcImp.getUnboundFunctions().get(0));
|
||||
productsReq.setFormat(format);
|
||||
|
@ -161,7 +132,7 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
|
|||
newEnumValue("Microsoft.Test.OData.Services.ODataWCFService.AccessLevel", "None");
|
||||
|
||||
final ODataInvokeRequest<ODataProperty> prodByALReq = getClient().getInvokeRequestFactory().
|
||||
getInvokeRequest(getClient().getURIBuilder(serviceRoot).
|
||||
getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
|
||||
appendOperationCallSegment(funcImp.getName()).build(),
|
||||
funcImp.getUnboundFunctions().get(0),
|
||||
Collections.<String, ODataValue>singletonMap("accessLevel", accessLevel));
|
||||
|
@ -193,7 +164,7 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
|
|||
|
||||
final ODataPrimitiveValue percentage = getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(22);
|
||||
final ODataInvokeRequest<ODataNoContent> discountReq = getClient().getInvokeRequestFactory().
|
||||
getInvokeRequest(getClient().getURIBuilder(serviceRoot).
|
||||
getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
|
||||
appendOperationCallSegment(actImp.getName()).build(),
|
||||
actImp.getUnboundAction(),
|
||||
Collections.<String, ODataValue>singletonMap("percentage", percentage));
|
||||
|
@ -214,7 +185,7 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
|
|||
client.getObjectFactory().newPrimitiveValueBuilder().buildString("66010")));
|
||||
|
||||
final ODataInvokeRequest<ODataProperty> resetBossAddressReq = getClient().getInvokeRequestFactory().
|
||||
getInvokeRequest(getClient().getURIBuilder(serviceRoot).
|
||||
getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
|
||||
appendOperationCallSegment(actImp.getName()).build(),
|
||||
actImp.getUnboundAction(),
|
||||
Collections.<String, ODataValue>singletonMap("address", address));
|
||||
|
@ -225,12 +196,7 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
|
|||
|
||||
@Test
|
||||
public void atomActionImports() {
|
||||
//TODO test service doesn't support yet Atom POST params
|
||||
try {
|
||||
actionImports(ODataPubFormat.ATOM);
|
||||
} catch (Exception e) {
|
||||
// ignore
|
||||
}
|
||||
actionImports(ODataPubFormat.ATOM);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -247,12 +213,11 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
|
|||
final EdmActionImport actImp = container.getActionImport("ResetBossEmail");
|
||||
|
||||
final ODataCollectionValue<org.apache.olingo.commons.api.domain.v4.ODataValue> emails =
|
||||
getClient().getObjectFactory().newCollectionValue(
|
||||
EdmPrimitiveTypeKind.String.getFullQualifiedName().toString());
|
||||
getClient().getObjectFactory().newCollectionValue("Collection(Edm.String)");
|
||||
emails.add(getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("first@olingo.apache.org"));
|
||||
emails.add(getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("second@olingo.apache.org"));
|
||||
ODataInvokeRequest<ODataProperty> bossEmailsReq = getClient().getInvokeRequestFactory().
|
||||
getInvokeRequest(getClient().getURIBuilder(serviceRoot).
|
||||
getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
|
||||
appendOperationCallSegment(actImp.getName()).build(),
|
||||
actImp.getUnboundAction(),
|
||||
Collections.<String, ODataValue>singletonMap("emails", emails));
|
||||
|
@ -268,7 +233,7 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
|
|||
params.put("start", getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(0));
|
||||
params.put("count", getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(100));
|
||||
bossEmailsReq = getClient().getInvokeRequestFactory().
|
||||
getInvokeRequest(getClient().getURIBuilder(serviceRoot).
|
||||
getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
|
||||
appendOperationCallSegment(funcImp.getName()).build(),
|
||||
funcImp.getUnboundFunctions().get(0),
|
||||
params);
|
||||
|
@ -277,17 +242,13 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
|
|||
assertNotNull(bossEmailsViaGET);
|
||||
assertTrue(bossEmailsViaGET.hasCollectionValue());
|
||||
assertEquals(2, bossEmailsViaGET.getCollectionValue().size());
|
||||
assertEquals(bossEmails, bossEmailsViaGET);
|
||||
assertEquals(bossEmails.getCollectionValue().asJavaCollection(),
|
||||
bossEmailsViaGET.getCollectionValue().asJavaCollection());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void atomBossEmails() throws EdmPrimitiveTypeException {
|
||||
//TODO test service doesn't support yet Atom POST params
|
||||
try {
|
||||
bossEmails(ODataPubFormat.ATOM);
|
||||
} catch (Exception e) {
|
||||
// ignore
|
||||
}
|
||||
bossEmails(ODataPubFormat.ATOM);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -195,7 +195,7 @@ abstract class AbstractJsonSerializer<T> extends ODataJacksonSerializer<T> {
|
|||
}
|
||||
|
||||
protected void property(final JsonGenerator jgen, final Property property, final String name) throws IOException {
|
||||
if (serverMode) {
|
||||
if (serverMode && !Constants.VALUE.equals(name)) {
|
||||
String type = property.getType();
|
||||
if (StringUtils.isBlank(type)
|
||||
&& property.getValue().isPrimitive() || property.getValue().isNull()) {
|
||||
|
|
|
@ -229,8 +229,10 @@ public class AtomSerializer extends AbstractAtomDealer {
|
|||
|
||||
writer.writeStartElement(Constants.ATOM_ELEM_CATEGORY);
|
||||
writer.writeAttribute(Constants.ATOM_ATTR_SCHEME, version.getNamespaceMap().get(ODataServiceVersion.NS_SCHEME));
|
||||
writer.writeAttribute(Constants.ATOM_ATTR_TERM,
|
||||
new EdmTypeInfo.Builder().setTypeExpression(entry.getType()).build().external(version));
|
||||
if (StringUtils.isNotBlank(entry.getType())) {
|
||||
writer.writeAttribute(Constants.ATOM_ATTR_TERM,
|
||||
new EdmTypeInfo.Builder().setTypeExpression(entry.getType()).build().external(version));
|
||||
}
|
||||
writer.writeEndElement();
|
||||
|
||||
if (entry instanceof AbstractODataObject) {
|
||||
|
|
|
@ -52,21 +52,14 @@ public class JSONEntrySerializer extends AbstractJsonSerializer<JSONEntryImpl> {
|
|||
|
||||
jgen.writeStartObject();
|
||||
|
||||
if (StringUtils.isNotBlank(entry.getType())) {
|
||||
jgen.writeStringField(version.getJSONMap().get(ODataServiceVersion.JSON_TYPE),
|
||||
new EdmTypeInfo.Builder().setTypeExpression(entry.getType()).build().external(version));
|
||||
}
|
||||
|
||||
if (serverMode) {
|
||||
if (container.getContextURL() != null) {
|
||||
jgen.writeStringField(version.compareTo(ODataServiceVersion.V40) >= 0
|
||||
? Constants.JSON_CONTEXT : Constants.JSON_METADATA,
|
||||
container.getContextURL().toASCIIString());
|
||||
}
|
||||
if (version.compareTo(ODataServiceVersion.V40) >= 0) {
|
||||
if (StringUtils.isNotBlank(container.getMetadataETag())) {
|
||||
jgen.writeStringField(Constants.JSON_METADATA_ETAG, container.getMetadataETag());
|
||||
}
|
||||
if (version.compareTo(ODataServiceVersion.V40) >= 0 && StringUtils.isNotBlank(container.getMetadataETag())) {
|
||||
jgen.writeStringField(Constants.JSON_METADATA_ETAG, container.getMetadataETag());
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(entry.getETag())) {
|
||||
|
@ -74,6 +67,11 @@ public class JSONEntrySerializer extends AbstractJsonSerializer<JSONEntryImpl> {
|
|||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(entry.getType())) {
|
||||
jgen.writeStringField(version.getJSONMap().get(ODataServiceVersion.JSON_TYPE),
|
||||
new EdmTypeInfo.Builder().setTypeExpression(entry.getType()).build().external(version));
|
||||
}
|
||||
|
||||
if (entry.getId() != null) {
|
||||
jgen.writeStringField(version.getJSONMap().get(ODataServiceVersion.JSON_ID), entry.getId());
|
||||
}
|
||||
|
|
|
@ -22,9 +22,11 @@ import com.fasterxml.jackson.core.JsonGenerator;
|
|||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||
import java.io.IOException;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.Container;
|
||||
import org.apache.olingo.commons.api.data.Property;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
|
||||
|
||||
/**
|
||||
|
@ -49,6 +51,17 @@ public class JSONPropertySerializer extends AbstractJsonSerializer<JSONPropertyI
|
|||
|
||||
jgen.writeStartObject();
|
||||
|
||||
if (serverMode && container.getContextURL() != null) {
|
||||
jgen.writeStringField(version.compareTo(ODataServiceVersion.V40) >= 0
|
||||
? Constants.JSON_CONTEXT : Constants.JSON_METADATA,
|
||||
container.getContextURL().toASCIIString());
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(property.getType())) {
|
||||
jgen.writeStringField(version.getJSONMap().get(ODataServiceVersion.JSON_TYPE),
|
||||
new EdmTypeInfo.Builder().setTypeExpression(property.getType()).build().external(version));
|
||||
}
|
||||
|
||||
if (property.getValue().isNull()) {
|
||||
jgen.writeBooleanField(Constants.JSON_NULL, true);
|
||||
} else if (property.getValue().isPrimitive()) {
|
||||
|
|
Loading…
Reference in New Issue