[OLINGO-317] Finished DeSerializer refactoring
This commit is contained in:
parent
46a3417825
commit
70afb2acc5
|
@ -73,6 +73,7 @@ import org.apache.olingo.commons.api.data.EntitySet;
|
||||||
import org.apache.olingo.commons.api.data.Link;
|
import org.apache.olingo.commons.api.data.Link;
|
||||||
import org.apache.olingo.commons.api.data.Property;
|
import org.apache.olingo.commons.api.data.Property;
|
||||||
import org.apache.olingo.commons.api.data.ResWrap;
|
import org.apache.olingo.commons.api.data.ResWrap;
|
||||||
|
import org.apache.olingo.commons.api.data.Value;
|
||||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
|
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
|
||||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||||
import org.apache.olingo.commons.api.format.ContentType;
|
import org.apache.olingo.commons.api.format.ContentType;
|
||||||
|
@ -80,6 +81,7 @@ import org.apache.olingo.commons.api.op.ODataDeserializer;
|
||||||
import org.apache.olingo.commons.api.op.ODataSerializer;
|
import org.apache.olingo.commons.api.op.ODataSerializer;
|
||||||
import org.apache.olingo.commons.core.data.AtomSerializer;
|
import org.apache.olingo.commons.core.data.AtomSerializer;
|
||||||
import org.apache.olingo.commons.core.data.EntityImpl;
|
import org.apache.olingo.commons.core.data.EntityImpl;
|
||||||
|
import org.apache.olingo.commons.core.data.EntitySetImpl;
|
||||||
import org.apache.olingo.commons.core.data.JsonDeserializer;
|
import org.apache.olingo.commons.core.data.JsonDeserializer;
|
||||||
import org.apache.olingo.commons.core.data.JsonSerializer;
|
import org.apache.olingo.commons.core.data.JsonSerializer;
|
||||||
import org.apache.olingo.commons.core.data.LinkImpl;
|
import org.apache.olingo.commons.core.data.LinkImpl;
|
||||||
|
@ -201,7 +203,7 @@ public abstract class AbstractServices {
|
||||||
try {
|
try {
|
||||||
final boolean continueOnError = prefer.contains("odata.continue-on-error");
|
final boolean continueOnError = prefer.contains("odata.continue-on-error");
|
||||||
return xml.createBatchResponse(
|
return xml.createBatchResponse(
|
||||||
exploreMultipart(attachment.getAllAttachments(), BOUNDARY, continueOnError), BOUNDARY);
|
exploreMultipart(attachment.getAllAttachments(), BOUNDARY, continueOnError));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
return xml.createFaultResponse(Accept.XML.toString(version), e);
|
return xml.createFaultResponse(Accept.XML.toString(version), e);
|
||||||
}
|
}
|
||||||
|
@ -638,17 +640,11 @@ public abstract class AbstractServices {
|
||||||
final Accept contentTypeValue = Accept.parse(contentType, version);
|
final Accept contentTypeValue = Accept.parse(contentType, version);
|
||||||
if (Accept.ATOM == contentTypeValue) {
|
if (Accept.ATOM == contentTypeValue) {
|
||||||
container = atomDeserializer.toEntity(IOUtils.toInputStream(entity, Constants.ENCODING));
|
container = atomDeserializer.toEntity(IOUtils.toInputStream(entity, Constants.ENCODING));
|
||||||
entry = container.getPayload();
|
|
||||||
} else {
|
} else {
|
||||||
final ResWrap<Entity> jcontainer = jsonDeserializer.toEntity(
|
container = jsonDeserializer.toEntity(IOUtils.toInputStream(entity, Constants.ENCODING));
|
||||||
IOUtils.toInputStream(entity, Constants.ENCODING));
|
|
||||||
entry = jcontainer.getPayload();
|
|
||||||
|
|
||||||
container = new ResWrap<Entity>(
|
|
||||||
jcontainer.getContextURL(),
|
|
||||||
jcontainer.getMetadataETag(),
|
|
||||||
entry);
|
|
||||||
}
|
}
|
||||||
|
entry = container.getPayload();
|
||||||
|
updateInlineEntities(entry);
|
||||||
|
|
||||||
entityKey = xml.getDefaultEntryKey(entitySetName, entry);
|
entityKey = xml.getDefaultEntryKey(entitySetName, entry);
|
||||||
}
|
}
|
||||||
|
@ -1348,8 +1344,7 @@ public abstract class AbstractServices {
|
||||||
} else {
|
} else {
|
||||||
final Property pchanges = xml.readProperty(
|
final Property pchanges = xml.readProperty(
|
||||||
Accept.parse(contentType, version),
|
Accept.parse(contentType, version),
|
||||||
IOUtils.toInputStream(changes, Constants.ENCODING),
|
IOUtils.toInputStream(changes, Constants.ENCODING));
|
||||||
entry.getType());
|
|
||||||
|
|
||||||
toBeReplaced.setValue(pchanges.getValue());
|
toBeReplaced.setValue(pchanges.getValue());
|
||||||
}
|
}
|
||||||
|
@ -1710,9 +1705,9 @@ public abstract class AbstractServices {
|
||||||
final ByteArrayOutputStream content = new ByteArrayOutputStream();
|
final ByteArrayOutputStream content = new ByteArrayOutputStream();
|
||||||
final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
|
final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
|
||||||
|
|
||||||
if (linkInfo.isFeed()) {
|
final ResWrap<?> container = linkInfo.isFeed() ?
|
||||||
final ResWrap<EntitySet> container = atomDeserializer.toEntitySet(stream);
|
atomDeserializer.toEntitySet(stream) :
|
||||||
|
atomDeserializer.toEntity(stream);
|
||||||
if (acceptType == Accept.ATOM) {
|
if (acceptType == Accept.ATOM) {
|
||||||
atomSerializer.write(writer, container);
|
atomSerializer.write(writer, container);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1720,16 +1715,6 @@ public abstract class AbstractServices {
|
||||||
}
|
}
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
} else {
|
|
||||||
final ResWrap<Entity> container = atomDeserializer.toEntity(stream);
|
|
||||||
if (acceptType == Accept.ATOM) {
|
|
||||||
atomSerializer.write(writer, container);
|
|
||||||
} else {
|
|
||||||
jsonSerializer.write(writer, container);
|
|
||||||
}
|
|
||||||
writer.flush();
|
|
||||||
writer.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
final String basePath = Commons.getEntityBasePath(entitySetName, entityId);
|
final String basePath = Commons.getEntityBasePath(entitySetName, entityId);
|
||||||
|
|
||||||
|
@ -1797,20 +1782,17 @@ public abstract class AbstractServices {
|
||||||
|
|
||||||
final ResWrap<Property> container = new ResWrap<Property>(
|
final ResWrap<Property> container = new ResWrap<Property>(
|
||||||
URI.create(Constants.get(version, ConstantKey.ODATA_METADATA_PREFIX)
|
URI.create(Constants.get(version, ConstantKey.ODATA_METADATA_PREFIX)
|
||||||
+ (version.compareTo(ODataServiceVersion.V40) >= 0
|
+ (version.compareTo(ODataServiceVersion.V40) >= 0 ?
|
||||||
? entitySetName + "(" + entityId + ")/" + path
|
entitySetName + "(" + entityId + ")/" + path : property.getType())),
|
||||||
: property.getType())),
|
|
||||||
entryContainer.getMetadataETag(),
|
entryContainer.getMetadataETag(),
|
||||||
property);
|
property);
|
||||||
|
|
||||||
return xml.createResponse(
|
return xml.createResponse(null,
|
||||||
null,
|
searchForValue ?
|
||||||
searchForValue
|
IOUtils.toInputStream(container.getPayload().getValue() == null
|
||||||
? IOUtils.toInputStream(
|
|| container.getPayload().getValue().isNull() ? StringUtils.EMPTY :
|
||||||
container.getPayload().getValue() == null || container.getPayload().getValue().isNull()
|
container.getPayload().getValue().asPrimitive().get(), Constants.ENCODING) :
|
||||||
? StringUtils.EMPTY
|
utils.writeProperty(acceptType, container),
|
||||||
: container.getPayload().getValue().asPrimitive().get(), Constants.ENCODING)
|
|
||||||
: utils.writeProperty(acceptType, container),
|
|
||||||
Commons.getETag(Commons.getEntityBasePath(entitySetName, entityId), version),
|
Commons.getETag(Commons.getEntityBasePath(entitySetName, entityId), version),
|
||||||
acceptType);
|
acceptType);
|
||||||
}
|
}
|
||||||
|
@ -1871,6 +1853,54 @@ public abstract class AbstractServices {
|
||||||
return utils;
|
return utils;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void updateInlineEntities(Entity entity) {
|
||||||
|
final String type = entity.getType();
|
||||||
|
EntityType entityType;
|
||||||
|
Map<String, NavigationProperty> navProperties = Collections.emptyMap();
|
||||||
|
if (type != null && type.length() > 0) {
|
||||||
|
entityType = metadata.getEntityOrComplexType(type);
|
||||||
|
navProperties = entityType.getNavigationPropertyMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Property property : entity.getProperties()) {
|
||||||
|
if (navProperties.containsKey(property.getName())) {
|
||||||
|
Link alink = new LinkImpl();
|
||||||
|
alink.setTitle(property.getName());
|
||||||
|
alink.getAnnotations().addAll(property.getAnnotations());
|
||||||
|
|
||||||
|
alink.setType(navProperties.get(property.getName()).isEntitySet()
|
||||||
|
? Constants.get(version, ConstantKey.ATOM_LINK_FEED)
|
||||||
|
: Constants.get(version, ConstantKey.ATOM_LINK_ENTRY));
|
||||||
|
|
||||||
|
alink.setRel(Constants.get(version, ConstantKey.ATOM_LINK_REL) + property.getName());
|
||||||
|
|
||||||
|
if (property.getValue().isComplex()) {
|
||||||
|
Entity inline = new EntityImpl();
|
||||||
|
inline.setType(navProperties.get(property.getName()).getType());
|
||||||
|
for (Property prop : property.getValue().asComplex().get()) {
|
||||||
|
inline.getProperties().add(prop);
|
||||||
|
}
|
||||||
|
alink.setInlineEntity(inline);
|
||||||
|
|
||||||
|
} else if (property.getValue().isCollection()) {
|
||||||
|
EntitySet inline = new EntitySetImpl();
|
||||||
|
for (Value value : property.getValue().asCollection().get()) {
|
||||||
|
Entity inlineEntity = new EntityImpl();
|
||||||
|
inlineEntity.setType(navProperties.get(property.getName()).getType());
|
||||||
|
for (Property prop : value.asComplex().get()) {
|
||||||
|
inlineEntity.getProperties().add(prop);
|
||||||
|
}
|
||||||
|
inline.getEntities().add(inlineEntity);
|
||||||
|
}
|
||||||
|
alink.setInlineEntitySet(inline);
|
||||||
|
} else {
|
||||||
|
throw new IllegalStateException("Invalid navigation property " + property);
|
||||||
|
}
|
||||||
|
entity.getNavigationLinks().add(alink);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected void normalizeAtomEntry(final Entity entry, final String entitySetName, final String entityKey) {
|
protected void normalizeAtomEntry(final Entity entry, final String entitySetName, final String entityKey) {
|
||||||
final org.apache.olingo.fit.metadata.EntitySet entitySet = metadata.getEntitySet(entitySetName);
|
final org.apache.olingo.fit.metadata.EntitySet entitySet = metadata.getEntitySet(entitySetName);
|
||||||
final EntityType entityType = metadata.getEntityOrComplexType(entitySet.getType());
|
final EntityType entityType = metadata.getEntityOrComplexType(entitySet.getType());
|
||||||
|
|
|
@ -134,7 +134,7 @@ public class V4Services extends AbstractServices {
|
||||||
|
|
||||||
return xml.createResponse(feed, null, Accept.JSON_FULLMETA);
|
return xml.createResponse(feed, null, Accept.JSON_FULLMETA);
|
||||||
} else {
|
} else {
|
||||||
throw new Exception("Unexpected crossjoin pattern");
|
throw new IOException("Unexpected crossjoin pattern");
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return xml.createFaultResponse(Accept.JSON.toString(version), e);
|
return xml.createFaultResponse(Accept.JSON.toString(version), e);
|
||||||
|
|
|
@ -100,7 +100,7 @@ public abstract class AbstractUtilities {
|
||||||
this.fsManager = FSManager.instance(version);
|
this.fsManager = FSManager.instance(version);
|
||||||
atomDeserializer = new FITAtomDeserializer(version);
|
atomDeserializer = new FITAtomDeserializer(version);
|
||||||
jsonDeserializer = new JsonDeserializer(version, true);
|
jsonDeserializer = new JsonDeserializer(version, true);
|
||||||
atomSerializer = new AtomSerializer(version);
|
atomSerializer = new AtomSerializer(version, true);
|
||||||
jsonSerializer = new JsonSerializer(version, true);
|
jsonSerializer = new JsonSerializer(version, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,7 +116,6 @@ public abstract class AbstractUtilities {
|
||||||
* @param is
|
* @param is
|
||||||
* @param links links to be added.
|
* @param links links to be added.
|
||||||
* @return
|
* @return
|
||||||
* @throws IOException
|
|
||||||
*/
|
*/
|
||||||
protected abstract InputStream addLinks(
|
protected abstract InputStream addLinks(
|
||||||
final String entitySetName, final String entitykey, final InputStream is, final Set<String> links)
|
final String entitySetName, final String entitykey, final InputStream is, final Set<String> links)
|
||||||
|
@ -128,6 +127,7 @@ public abstract class AbstractUtilities {
|
||||||
* @param is
|
* @param is
|
||||||
* @return
|
* @return
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
|
* @throws XMLStreamException
|
||||||
*/
|
*/
|
||||||
protected abstract Set<String> retrieveAllLinkNames(final InputStream is) throws Exception;
|
protected abstract Set<String> retrieveAllLinkNames(final InputStream is) throws Exception;
|
||||||
|
|
||||||
|
@ -137,10 +137,8 @@ public abstract class AbstractUtilities {
|
||||||
* @param entitySetName
|
* @param entitySetName
|
||||||
* @param is
|
* @param is
|
||||||
* @return
|
* @return
|
||||||
* @throws IOException
|
|
||||||
*/
|
*/
|
||||||
protected abstract NavigationLinks retrieveNavigationInfo(
|
protected abstract NavigationLinks retrieveNavigationInfo(final String entitySetName, final InputStream is)
|
||||||
final String entitySetName, final InputStream is)
|
|
||||||
throws Exception;
|
throws Exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -151,7 +149,6 @@ public abstract class AbstractUtilities {
|
||||||
* @param is
|
* @param is
|
||||||
* @param links
|
* @param links
|
||||||
* @return
|
* @return
|
||||||
* @throws IOException
|
|
||||||
*/
|
*/
|
||||||
protected abstract InputStream normalizeLinks(
|
protected abstract InputStream normalizeLinks(
|
||||||
final String entitySetName, final String entityKey, final InputStream is, final NavigationLinks links)
|
final String entitySetName, final String entityKey, final InputStream is, final NavigationLinks links)
|
||||||
|
@ -219,13 +216,13 @@ public abstract class AbstractUtilities {
|
||||||
Set<String> linksToBeKept;
|
Set<String> linksToBeKept;
|
||||||
try {
|
try {
|
||||||
linksToBeKept = new HashSet<String>(navigationProperties.keySet());
|
linksToBeKept = new HashSet<String>(navigationProperties.keySet());
|
||||||
} catch (Exception e) {
|
} catch (NullPointerException e) {
|
||||||
linksToBeKept = Collections.<String> emptySet();
|
linksToBeKept = Collections.<String> emptySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String availableLink : new HashSet<String>(linksToBeKept)) {
|
for (String availableLink : new HashSet<String>(linksToBeKept)) {
|
||||||
try {
|
try {
|
||||||
fsManager.resolve(Commons.getLinksPath(version, entitySetName, key, availableLink, Accept.JSON_FULLMETA));
|
fsManager.resolve(Commons.getLinksPath(entitySetName, key, availableLink, Accept.JSON_FULLMETA));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
linksToBeKept.remove(availableLink);
|
linksToBeKept.remove(availableLink);
|
||||||
}
|
}
|
||||||
|
@ -350,7 +347,7 @@ public abstract class AbstractUtilities {
|
||||||
final String entitySetName,
|
final String entitySetName,
|
||||||
final String entityKey,
|
final String entityKey,
|
||||||
final String linkName,
|
final String linkName,
|
||||||
final Collection<String> links) throws IOException {
|
final Collection<String> links) throws Exception {
|
||||||
|
|
||||||
final HashSet<String> uris = new HashSet<String>();
|
final HashSet<String> uris = new HashSet<String>();
|
||||||
|
|
||||||
|
@ -371,7 +368,7 @@ public abstract class AbstractUtilities {
|
||||||
|
|
||||||
public void putLinksInMemory(
|
public void putLinksInMemory(
|
||||||
final String basePath, final String entitySetName, final String linkName, final Collection<String> uris)
|
final String basePath, final String entitySetName, final String linkName, final Collection<String> uris)
|
||||||
throws IOException {
|
throws Exception {
|
||||||
|
|
||||||
fsManager.putInMemory(
|
fsManager.putInMemory(
|
||||||
Commons.getLinksAsJSON(version, entitySetName, new SimpleEntry<String, Collection<String>>(linkName, uris)),
|
Commons.getLinksAsJSON(version, entitySetName, new SimpleEntry<String, Collection<String>>(linkName, uris)),
|
||||||
|
@ -416,7 +413,7 @@ public abstract class AbstractUtilities {
|
||||||
return createResponse(null, entity, etag, accept, null);
|
return createResponse(null, entity, etag, accept, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Response createBatchResponse(final InputStream stream, final String boundary) {
|
public Response createBatchResponse(final InputStream stream) {
|
||||||
final Response.ResponseBuilder builder = version.compareTo(ODataServiceVersion.V30) <= 0
|
final Response.ResponseBuilder builder = version.compareTo(ODataServiceVersion.V30) <= 0
|
||||||
? Response.accepted(stream)
|
? Response.accepted(stream)
|
||||||
: Response.ok(stream);
|
: Response.ok(stream);
|
||||||
|
@ -590,8 +587,7 @@ public abstract class AbstractUtilities {
|
||||||
return IOUtils.toInputStream(writer.toString(), Constants.ENCODING);
|
return IOUtils.toInputStream(writer.toString(), Constants.ENCODING);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Property readProperty(final Accept accept, final InputStream property, final String entryType)
|
public Property readProperty(final Accept accept, final InputStream property) throws ODataDeserializerException {
|
||||||
throws ODataDeserializerException {
|
|
||||||
return (Accept.ATOM == accept || Accept.XML == accept ?
|
return (Accept.ATOM == accept || Accept.XML == accept ?
|
||||||
atomDeserializer.toProperty(property) : jsonDeserializer.toProperty(property))
|
atomDeserializer.toProperty(property) : jsonDeserializer.toProperty(property))
|
||||||
.getPayload();
|
.getPayload();
|
||||||
|
@ -611,14 +607,14 @@ public abstract class AbstractUtilities {
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getDefaultEntryKey(final String entitySetName, final Entity entry, final String propertyName)
|
private String getDefaultEntryKey(final String entitySetName, final Entity entry, final String propertyName)
|
||||||
throws Exception {
|
throws IOException {
|
||||||
|
|
||||||
String res;
|
String res;
|
||||||
if (entry.getProperty(propertyName) == null) {
|
if (entry.getProperty(propertyName) == null) {
|
||||||
if (Commons.SEQUENCE.containsKey(entitySetName)) {
|
if (Commons.SEQUENCE.containsKey(entitySetName)) {
|
||||||
res = String.valueOf(Commons.SEQUENCE.get(entitySetName) + 1);
|
res = String.valueOf(Commons.SEQUENCE.get(entitySetName) + 1);
|
||||||
} else {
|
} else {
|
||||||
throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
|
throw new IOException(String.format("Unable to retrieve entity key value for %s", entitySetName));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
res = entry.getProperty(propertyName).getValue().asPrimitive().get();
|
res = entry.getProperty(propertyName).getValue().asPrimitive().get();
|
||||||
|
@ -639,7 +635,7 @@ public abstract class AbstractUtilities {
|
||||||
productID = Commons.SEQUENCE.get(entitySetName) + 1;
|
productID = Commons.SEQUENCE.get(entitySetName) + 1;
|
||||||
res = "OrderID=1" + ",ProductID=" + String.valueOf(productID);
|
res = "OrderID=1" + ",ProductID=" + String.valueOf(productID);
|
||||||
} else {
|
} else {
|
||||||
throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
|
throw new IOException(String.format("Unable to retrieve entity key value for %s", entitySetName));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
productID = Integer.valueOf(entity.getProperty("OrderID").getValue().asPrimitive().get());
|
productID = Integer.valueOf(entity.getProperty("OrderID").getValue().asPrimitive().get());
|
||||||
|
@ -654,7 +650,7 @@ public abstract class AbstractUtilities {
|
||||||
messageId = Commons.SEQUENCE.get(entitySetName) + 1;
|
messageId = Commons.SEQUENCE.get(entitySetName) + 1;
|
||||||
res = "FromUsername=1" + ",MessageId=" + String.valueOf(messageId);
|
res = "FromUsername=1" + ",MessageId=" + String.valueOf(messageId);
|
||||||
} else {
|
} else {
|
||||||
throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
|
throw new IOException(String.format("Unable to retrieve entity key value for %s", entitySetName));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
messageId = Integer.valueOf(entity.getProperty("MessageId").getValue().asPrimitive().get());
|
messageId = Integer.valueOf(entity.getProperty("MessageId").getValue().asPrimitive().get());
|
||||||
|
@ -697,7 +693,7 @@ public abstract class AbstractUtilities {
|
||||||
productDetailId = Commons.SEQUENCE.get(entitySetName) + 1;
|
productDetailId = Commons.SEQUENCE.get(entitySetName) + 1;
|
||||||
res = "ProductID=" + String.valueOf(productId) + ",ProductDetailID=" + String.valueOf(productDetailId);
|
res = "ProductID=" + String.valueOf(productId) + ",ProductDetailID=" + String.valueOf(productDetailId);
|
||||||
} else {
|
} else {
|
||||||
throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
|
throw new IOException(String.format("Unable to retrieve entity key value for %s", entitySetName));
|
||||||
}
|
}
|
||||||
Commons.SEQUENCE.put(entitySetName, productDetailId);
|
Commons.SEQUENCE.put(entitySetName, productDetailId);
|
||||||
} else {
|
} else {
|
||||||
|
@ -715,7 +711,7 @@ public abstract class AbstractUtilities {
|
||||||
} else if ("People".equals(entitySetName)) {
|
} else if ("People".equals(entitySetName)) {
|
||||||
res = getDefaultEntryKey(entitySetName, entity, "PersonID");
|
res = getDefaultEntryKey(entitySetName, entity, "PersonID");
|
||||||
} else {
|
} else {
|
||||||
throw new Exception(String.format("EntitySet '%s' not found", entitySetName));
|
throw new IOException(String.format("EntitySet '%s' not found", entitySetName));
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
@ -857,9 +853,11 @@ public abstract class AbstractUtilities {
|
||||||
throws Exception;
|
throws Exception;
|
||||||
|
|
||||||
protected abstract InputStream replaceLink(
|
protected abstract InputStream replaceLink(
|
||||||
final InputStream toBeChanged, final String linkName, final InputStream replacement) throws Exception;
|
final InputStream toBeChanged, final String linkName, final InputStream replacement)
|
||||||
|
throws Exception;
|
||||||
|
|
||||||
public abstract InputStream selectEntity(final InputStream entity, final String[] propertyNames) throws Exception;
|
public abstract InputStream selectEntity(final InputStream entity, final String[] propertyNames)
|
||||||
|
throws Exception;
|
||||||
|
|
||||||
protected abstract Accept getDefaultFormat();
|
protected abstract Accept getDefaultFormat();
|
||||||
|
|
||||||
|
@ -869,16 +867,20 @@ public abstract class AbstractUtilities {
|
||||||
final InputStream content, final String title, final String href) throws Exception;
|
final InputStream content, final String title, final String href) throws Exception;
|
||||||
|
|
||||||
public abstract InputStream addOperation(
|
public abstract InputStream addOperation(
|
||||||
final InputStream content, final String name, final String metaAnchor, final String href) throws Exception;
|
final InputStream content, final String name, final String metaAnchor, final String href)
|
||||||
|
throws Exception;
|
||||||
|
|
||||||
protected abstract InputStream replaceProperty(
|
protected abstract InputStream replaceProperty(
|
||||||
final InputStream src, final InputStream replacement, final List<String> path, final boolean justValue)
|
final InputStream src, final InputStream replacement, final List<String> path, final boolean justValue)
|
||||||
throws Exception;
|
throws Exception;
|
||||||
|
|
||||||
protected abstract InputStream deleteProperty(final InputStream src, final List<String> path) throws Exception;
|
protected abstract InputStream deleteProperty(final InputStream src, final List<String> path)
|
||||||
|
throws Exception;
|
||||||
|
|
||||||
public abstract Map.Entry<String, List<String>> extractLinkURIs(final InputStream is) throws Exception;
|
public abstract Map.Entry<String, List<String>> extractLinkURIs(final InputStream is)
|
||||||
|
throws Exception;
|
||||||
|
|
||||||
public abstract Map.Entry<String, List<String>> extractLinkURIs(
|
public abstract Map.Entry<String, List<String>> extractLinkURIs(
|
||||||
final String entitySetName, final String entityId, final String linkName) throws Exception;
|
final String entitySetName, final String entityId, final String linkName)
|
||||||
|
throws Exception;
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,20 +122,13 @@ public abstract class Commons {
|
||||||
+ (StringUtils.isNotBlank(entityKey) ? getEntityKey(entityKey) + File.separatorChar : "");
|
+ (StringUtils.isNotBlank(entityKey) ? getEntityKey(entityKey) + File.separatorChar : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getLinksURI(
|
public static String getLinksURI(final String entitySetName, final String entityId, final String linkName)
|
||||||
final ODataServiceVersion version,
|
throws IOException {
|
||||||
final String entitySetName,
|
|
||||||
final String entityId,
|
|
||||||
final String linkName) throws IOException {
|
|
||||||
return getEntityURI(entitySetName, entityId) + "/" + linkName;
|
return getEntityURI(entitySetName, entityId) + "/" + linkName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getLinksPath(
|
public static String getLinksPath(final String entitySetName, final String entityId,
|
||||||
final ODataServiceVersion version,
|
final String linkName, final Accept accept) throws IOException {
|
||||||
final String entitySetName,
|
|
||||||
final String entityId,
|
|
||||||
final String linkName,
|
|
||||||
final Accept accept) throws IOException {
|
|
||||||
return getLinksPath(ODataServiceVersion.V30, getEntityBasePath(entitySetName, entityId), linkName, accept);
|
return getLinksPath(ODataServiceVersion.V30, getEntityBasePath(entitySetName, entityId), linkName, accept);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,14 +65,14 @@ public class FSManager {
|
||||||
|
|
||||||
private final ODataServiceVersion version;
|
private final ODataServiceVersion version;
|
||||||
|
|
||||||
public static FSManager instance(final ODataServiceVersion version) throws Exception {
|
public static FSManager instance(final ODataServiceVersion version) throws IOException {
|
||||||
if (!instance.containsKey(version)) {
|
if (!instance.containsKey(version)) {
|
||||||
instance.put(version, new FSManager(version));
|
instance.put(version, new FSManager(version));
|
||||||
}
|
}
|
||||||
return instance.get(version);
|
return instance.get(version);
|
||||||
}
|
}
|
||||||
|
|
||||||
private FSManager(final ODataServiceVersion version) throws Exception {
|
private FSManager(final ODataServiceVersion version) throws IOException {
|
||||||
this.version = version;
|
this.version = version;
|
||||||
fsManager = VFS.getManager();
|
fsManager = VFS.getManager();
|
||||||
|
|
||||||
|
@ -150,15 +150,15 @@ public class FSManager {
|
||||||
try {
|
try {
|
||||||
final FileObject fileObject = fsManager.resolveFile(fs + path);
|
final FileObject fileObject = fsManager.resolveFile(fs + path);
|
||||||
|
|
||||||
if (!fileObject.exists()) {
|
if (fileObject.exists()) {
|
||||||
|
// return new in-memory content
|
||||||
|
return fileObject.getContent().getInputStream();
|
||||||
|
} else {
|
||||||
LOG.warn("In-memory path '{}' not found", path);
|
LOG.warn("In-memory path '{}' not found", path);
|
||||||
throw new NotFoundException();
|
throw new NotFoundException();
|
||||||
}
|
}
|
||||||
|
} catch (FileSystemException e) {
|
||||||
// return new in-memory content
|
throw new NotFoundException();
|
||||||
return fileObject.getContent().getInputStream();
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new NotFoundException(e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ package org.apache.olingo.fit.utils;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.AbstractMap.SimpleEntry;
|
import java.util.AbstractMap.SimpleEntry;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -73,21 +74,21 @@ public class JSONUtilities extends AbstractUtilities {
|
||||||
@Override
|
@Override
|
||||||
protected InputStream addLinks(
|
protected InputStream addLinks(
|
||||||
final String entitySetName, final String entitykey, final InputStream is, final Set<String> links)
|
final String entitySetName, final String entitykey, final InputStream is, final Set<String> links)
|
||||||
throws Exception {
|
throws IOException {
|
||||||
|
|
||||||
final ObjectNode srcNode = (ObjectNode) mapper.readTree(is);
|
final ObjectNode srcNode = (ObjectNode) mapper.readTree(is);
|
||||||
IOUtils.closeQuietly(is);
|
IOUtils.closeQuietly(is);
|
||||||
|
|
||||||
for (String link : links) {
|
for (String link : links) {
|
||||||
srcNode.set(link + Constants.get(version, ConstantKey.JSON_NAVIGATION_SUFFIX),
|
srcNode.set(link + Constants.get(version, ConstantKey.JSON_NAVIGATION_SUFFIX),
|
||||||
new TextNode(Commons.getLinksURI(version, entitySetName, entitykey, link)));
|
new TextNode(Commons.getLinksURI(entitySetName, entitykey, link)));
|
||||||
}
|
}
|
||||||
|
|
||||||
return IOUtils.toInputStream(srcNode.toString(), Constants.ENCODING);
|
return IOUtils.toInputStream(srcNode.toString(), Constants.ENCODING);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Set<String> retrieveAllLinkNames(InputStream is) throws Exception {
|
protected Set<String> retrieveAllLinkNames(InputStream is) throws IOException {
|
||||||
final ObjectNode srcNode = (ObjectNode) mapper.readTree(is);
|
final ObjectNode srcNode = (ObjectNode) mapper.readTree(is);
|
||||||
IOUtils.closeQuietly(is);
|
IOUtils.closeQuietly(is);
|
||||||
|
|
||||||
|
@ -115,7 +116,7 @@ public class JSONUtilities extends AbstractUtilities {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected NavigationLinks retrieveNavigationInfo(final String entitySetName, final InputStream is)
|
protected NavigationLinks retrieveNavigationInfo(final String entitySetName, final InputStream is)
|
||||||
throws Exception {
|
throws IOException {
|
||||||
|
|
||||||
final ObjectNode srcNode = (ObjectNode) mapper.readTree(is);
|
final ObjectNode srcNode = (ObjectNode) mapper.readTree(is);
|
||||||
IOUtils.closeQuietly(is);
|
IOUtils.closeQuietly(is);
|
||||||
|
@ -150,13 +151,10 @@ public class JSONUtilities extends AbstractUtilities {
|
||||||
return links;
|
return links;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc }
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected InputStream normalizeLinks(
|
protected InputStream normalizeLinks(
|
||||||
final String entitySetName, final String entityKey, final InputStream is, final NavigationLinks links)
|
final String entitySetName, final String entityKey, final InputStream is, final NavigationLinks links)
|
||||||
throws Exception {
|
throws IOException {
|
||||||
|
|
||||||
final ObjectNode srcNode = (ObjectNode) mapper.readTree(is);
|
final ObjectNode srcNode = (ObjectNode) mapper.readTree(is);
|
||||||
|
|
||||||
|
@ -191,9 +189,7 @@ public class JSONUtilities extends AbstractUtilities {
|
||||||
return IOUtils.toInputStream(srcNode.toString(), Constants.ENCODING);
|
return IOUtils.toInputStream(srcNode.toString(), Constants.ENCODING);
|
||||||
}
|
}
|
||||||
|
|
||||||
public InputStream addJsonInlinecount(
|
public InputStream addJsonInlinecount(final InputStream src, final int count) throws Exception {
|
||||||
final InputStream src, final int count, final Accept accept)
|
|
||||||
throws Exception {
|
|
||||||
|
|
||||||
final JsonNode srcNode = mapper.readTree(src);
|
final JsonNode srcNode = mapper.readTree(src);
|
||||||
|
|
||||||
|
@ -208,7 +204,7 @@ public class JSONUtilities extends AbstractUtilities {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public InputStream wrapJsonEntities(final InputStream entities) throws Exception {
|
public InputStream wrapJsonEntities(final InputStream entities) throws IOException {
|
||||||
|
|
||||||
final JsonNode node = mapper.readTree(entities);
|
final JsonNode node = mapper.readTree(entities);
|
||||||
|
|
||||||
|
@ -237,7 +233,7 @@ public class JSONUtilities extends AbstractUtilities {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InputStream selectEntity(final InputStream src, final String[] propertyNames) throws Exception {
|
public InputStream selectEntity(final InputStream src, final String[] propertyNames) throws IOException {
|
||||||
|
|
||||||
final ObjectNode srcNode = (ObjectNode) mapper.readTree(src);
|
final ObjectNode srcNode = (ObjectNode) mapper.readTree(src);
|
||||||
|
|
||||||
|
@ -264,7 +260,7 @@ public class JSONUtilities extends AbstractUtilities {
|
||||||
@Override
|
@Override
|
||||||
public InputStream readEntities(
|
public InputStream readEntities(
|
||||||
final List<String> links, final String linkName, final String next, final boolean forceFeed)
|
final List<String> links, final String linkName, final String next, final boolean forceFeed)
|
||||||
throws Exception {
|
throws IOException {
|
||||||
|
|
||||||
if (links.isEmpty()) {
|
if (links.isEmpty()) {
|
||||||
throw new NotFoundException();
|
throw new NotFoundException();
|
||||||
|
@ -312,7 +308,7 @@ public class JSONUtilities extends AbstractUtilities {
|
||||||
@Override
|
@Override
|
||||||
protected InputStream replaceLink(
|
protected InputStream replaceLink(
|
||||||
final InputStream toBeChanged, final String linkName, final InputStream replacement)
|
final InputStream toBeChanged, final String linkName, final InputStream replacement)
|
||||||
throws Exception {
|
throws IOException {
|
||||||
|
|
||||||
final ObjectNode toBeChangedNode = (ObjectNode) mapper.readTree(toBeChanged);
|
final ObjectNode toBeChangedNode = (ObjectNode) mapper.readTree(toBeChanged);
|
||||||
final ObjectNode replacementNode = (ObjectNode) mapper.readTree(replacement);
|
final ObjectNode replacementNode = (ObjectNode) mapper.readTree(replacement);
|
||||||
|
@ -332,7 +328,7 @@ public class JSONUtilities extends AbstractUtilities {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Map<String, InputStream> getChanges(final InputStream src) throws Exception {
|
protected Map<String, InputStream> getChanges(final InputStream src) throws IOException {
|
||||||
final Map<String, InputStream> res = new HashMap<String, InputStream>();
|
final Map<String, InputStream> res = new HashMap<String, InputStream>();
|
||||||
|
|
||||||
final JsonNode srcObject = mapper.readTree(src);
|
final JsonNode srcObject = mapper.readTree(src);
|
||||||
|
@ -348,15 +344,13 @@ public class JSONUtilities extends AbstractUtilities {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map.Entry<String, List<String>> extractLinkURIs(
|
public Map.Entry<String, List<String>> extractLinkURIs(
|
||||||
final String entitySetName, final String entityId, final String linkName)
|
final String entitySetName, final String entityId, final String linkName) throws Exception {
|
||||||
throws Exception {
|
|
||||||
final LinkInfo links = readLinks(entitySetName, entityId, linkName, Accept.JSON_FULLMETA);
|
final LinkInfo links = readLinks(entitySetName, entityId, linkName, Accept.JSON_FULLMETA);
|
||||||
return extractLinkURIs(links.getLinks());
|
return extractLinkURIs(links.getLinks());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map.Entry<String, List<String>> extractLinkURIs(final InputStream is)
|
public Map.Entry<String, List<String>> extractLinkURIs(final InputStream is) throws IOException {
|
||||||
throws Exception {
|
|
||||||
|
|
||||||
final ObjectNode srcNode = (ObjectNode) mapper.readTree(is);
|
final ObjectNode srcNode = (ObjectNode) mapper.readTree(is);
|
||||||
IOUtils.closeQuietly(is);
|
IOUtils.closeQuietly(is);
|
||||||
|
@ -383,7 +377,7 @@ public class JSONUtilities extends AbstractUtilities {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InputStream addEditLink(
|
public InputStream addEditLink(
|
||||||
final InputStream content, final String title, final String href) throws Exception {
|
final InputStream content, final String title, final String href) throws IOException {
|
||||||
|
|
||||||
final ObjectNode srcNode = (ObjectNode) mapper.readTree(content);
|
final ObjectNode srcNode = (ObjectNode) mapper.readTree(content);
|
||||||
IOUtils.closeQuietly(content);
|
IOUtils.closeQuietly(content);
|
||||||
|
@ -394,7 +388,7 @@ public class JSONUtilities extends AbstractUtilities {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InputStream addOperation(final InputStream content, final String name, final String metaAnchor,
|
public InputStream addOperation(final InputStream content, final String name, final String metaAnchor,
|
||||||
final String href) throws Exception {
|
final String href) throws IOException {
|
||||||
|
|
||||||
final ObjectNode srcNode = (ObjectNode) mapper.readTree(content);
|
final ObjectNode srcNode = (ObjectNode) mapper.readTree(content);
|
||||||
IOUtils.closeQuietly(content);
|
IOUtils.closeQuietly(content);
|
||||||
|
@ -410,7 +404,7 @@ public class JSONUtilities extends AbstractUtilities {
|
||||||
@Override
|
@Override
|
||||||
public InputStream replaceProperty(
|
public InputStream replaceProperty(
|
||||||
final InputStream src, final InputStream replacement, final List<String> path, final boolean justValue)
|
final InputStream src, final InputStream replacement, final List<String> path, final boolean justValue)
|
||||||
throws Exception {
|
throws IOException {
|
||||||
|
|
||||||
final ObjectNode srcNode = (ObjectNode) mapper.readTree(src);
|
final ObjectNode srcNode = (ObjectNode) mapper.readTree(src);
|
||||||
IOUtils.closeQuietly(src);
|
IOUtils.closeQuietly(src);
|
||||||
|
@ -440,7 +434,7 @@ public class JSONUtilities extends AbstractUtilities {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InputStream deleteProperty(final InputStream src, final List<String> path) throws Exception {
|
public InputStream deleteProperty(final InputStream src, final List<String> path) throws IOException {
|
||||||
|
|
||||||
final ObjectNode srcNode = (ObjectNode) mapper.readTree(src);
|
final ObjectNode srcNode = (ObjectNode) mapper.readTree(src);
|
||||||
IOUtils.closeQuietly(src);
|
IOUtils.closeQuietly(src);
|
||||||
|
|
|
@ -24,10 +24,12 @@ import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
|
|
||||||
import javax.xml.stream.XMLEventReader;
|
import javax.xml.stream.XMLEventReader;
|
||||||
import javax.xml.stream.XMLStreamException;
|
import javax.xml.stream.XMLStreamException;
|
||||||
import javax.xml.stream.events.EndElement;
|
import javax.xml.stream.events.EndElement;
|
||||||
import javax.xml.stream.events.StartElement;
|
import javax.xml.stream.events.StartElement;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -66,7 +68,8 @@ public class XMLElement {
|
||||||
return new ByteArrayInputStream(content.toByteArray());
|
return new ByteArrayInputStream(content.toByteArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
public XMLEventReader getContentReader(final ODataServiceVersion version) throws Exception {
|
public XMLEventReader getContentReader(final ODataServiceVersion version)
|
||||||
|
throws XMLStreamException, IOException {
|
||||||
return new XMLEventReaderWrapper(getContent(), version);
|
return new XMLEventReaderWrapper(getContent(), version);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,7 +86,7 @@ public class XMLElement {
|
||||||
IOUtils.closeQuietly(content);
|
IOUtils.closeQuietly(content);
|
||||||
}
|
}
|
||||||
|
|
||||||
public InputStream toStream() throws Exception {
|
public InputStream toStream() {
|
||||||
InputStream res;
|
InputStream res;
|
||||||
try {
|
try {
|
||||||
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||||
|
@ -98,7 +101,10 @@ public class XMLElement {
|
||||||
osw.close();
|
osw.close();
|
||||||
|
|
||||||
res = new ByteArrayInputStream(bos.toByteArray());
|
res = new ByteArrayInputStream(bos.toByteArray());
|
||||||
} catch (Exception e) {
|
} catch (IOException e) {
|
||||||
|
LOG.error("Error serializing element", e);
|
||||||
|
res = null;
|
||||||
|
} catch (XMLStreamException e) {
|
||||||
LOG.error("Error serializing element", e);
|
LOG.error("Error serializing element", e);
|
||||||
res = null;
|
res = null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,13 +19,16 @@
|
||||||
package org.apache.olingo.fit.utils;
|
package org.apache.olingo.fit.utils;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
|
||||||
import javax.xml.stream.XMLEventReader;
|
import javax.xml.stream.XMLEventReader;
|
||||||
import javax.xml.stream.XMLInputFactory;
|
import javax.xml.stream.XMLInputFactory;
|
||||||
import javax.xml.stream.XMLStreamException;
|
import javax.xml.stream.XMLStreamException;
|
||||||
import javax.xml.stream.events.XMLEvent;
|
import javax.xml.stream.events.XMLEvent;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||||
|
|
||||||
|
@ -43,7 +46,8 @@ public class XMLEventReaderWrapper implements XMLEventReader {
|
||||||
|
|
||||||
private XMLEvent nextGivenEvent = null;
|
private XMLEvent nextGivenEvent = null;
|
||||||
|
|
||||||
public XMLEventReaderWrapper(final InputStream stream, final ODataServiceVersion version) throws Exception {
|
public XMLEventReaderWrapper(final InputStream stream, final ODataServiceVersion version)
|
||||||
|
throws IOException, XMLStreamException {
|
||||||
final StringBuilder startBuilder = new StringBuilder();
|
final StringBuilder startBuilder = new StringBuilder();
|
||||||
startBuilder.append("<").append(CONTENT).
|
startBuilder.append("<").append(CONTENT).
|
||||||
append(" xmlns:m").append("=\"").append(Constants.get(version, ConstantKey.METADATA_NS)).append("\"").
|
append(" xmlns:m").append("=\"").append(Constants.get(version, ConstantKey.METADATA_NS)).append("\"").
|
||||||
|
|
|
@ -155,7 +155,7 @@ public class XMLUtilities extends AbstractUtilities {
|
||||||
final Set<Attribute> attributes = new HashSet<Attribute>();
|
final Set<Attribute> attributes = new HashSet<Attribute>();
|
||||||
attributes.add(eventFactory.createAttribute(new QName("title"), link));
|
attributes.add(eventFactory.createAttribute(new QName("title"), link));
|
||||||
attributes.add(eventFactory.createAttribute(new QName("href"),
|
attributes.add(eventFactory.createAttribute(new QName("href"),
|
||||||
Commons.getLinksURI(version, entitySetName, entitykey, link)));
|
Commons.getLinksURI(entitySetName, entitykey, link)));
|
||||||
attributes.add(eventFactory.createAttribute(new QName("rel"),
|
attributes.add(eventFactory.createAttribute(new QName("rel"),
|
||||||
Constants.get(version, ConstantKey.ATOM_LINK_REL) + link));
|
Constants.get(version, ConstantKey.ATOM_LINK_REL) + link));
|
||||||
attributes.add(eventFactory.createAttribute(new QName("type"),
|
attributes.add(eventFactory.createAttribute(new QName("type"),
|
||||||
|
@ -727,9 +727,7 @@ public class XMLUtilities extends AbstractUtilities {
|
||||||
return new SimpleEntry<Integer, XMLElement>(Integer.valueOf(depth - 1), getXmlElement(start, reader));
|
return new SimpleEntry<Integer, XMLElement>(Integer.valueOf(depth - 1), getXmlElement(start, reader));
|
||||||
}
|
}
|
||||||
|
|
||||||
public InputStream addAtomInlinecount(
|
public InputStream addAtomInlinecount(final InputStream feed, final int count) throws Exception {
|
||||||
final InputStream feed, final int count, final Accept accept)
|
|
||||||
throws Exception {
|
|
||||||
final XMLEventReader reader = getEventReader(feed);
|
final XMLEventReader reader = getEventReader(feed);
|
||||||
|
|
||||||
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||||
|
|
|
@ -50,12 +50,12 @@ public abstract class AbstractRequest {
|
||||||
// If using and Edm enabled client, checks that the cached service root matches the request URI
|
// If using and Edm enabled client, checks that the cached service root matches the request URI
|
||||||
if (odataClient instanceof CommonEdmEnabledODataClient
|
if (odataClient instanceof CommonEdmEnabledODataClient
|
||||||
&& !request.getURI().toASCIIString().startsWith(
|
&& !request.getURI().toASCIIString().startsWith(
|
||||||
((CommonEdmEnabledODataClient) odataClient).getServiceRoot())) {
|
((CommonEdmEnabledODataClient<?>) odataClient).getServiceRoot())) {
|
||||||
|
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
String.format("The current request URI %s does not match the configured service root %s",
|
String.format("The current request URI %s does not match the configured service root %s",
|
||||||
request.getURI().toASCIIString(),
|
request.getURI().toASCIIString(),
|
||||||
((CommonEdmEnabledODataClient) odataClient).getServiceRoot()));
|
((CommonEdmEnabledODataClient<?>) odataClient).getServiceRoot()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,17 +28,16 @@ import org.apache.http.client.methods.HttpPost;
|
||||||
import org.apache.olingo.client.api.CommonODataClient;
|
import org.apache.olingo.client.api.CommonODataClient;
|
||||||
import org.apache.olingo.client.api.communication.request.cud.ODataEntityCreateRequest;
|
import org.apache.olingo.client.api.communication.request.cud.ODataEntityCreateRequest;
|
||||||
import org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse;
|
import org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse;
|
||||||
|
import org.apache.olingo.client.api.http.HttpMethod;
|
||||||
|
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.data.Entity;
|
||||||
|
import org.apache.olingo.commons.api.data.ResWrap;
|
||||||
import org.apache.olingo.commons.api.domain.CommonODataEntity;
|
import org.apache.olingo.commons.api.domain.CommonODataEntity;
|
||||||
import org.apache.olingo.commons.api.format.ODataPubFormat;
|
import org.apache.olingo.commons.api.format.ODataPubFormat;
|
||||||
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
||||||
import org.apache.olingo.commons.api.op.ODataSerializerException;
|
import org.apache.olingo.commons.api.op.ODataSerializerException;
|
||||||
import org.apache.olingo.client.api.http.HttpClientException;
|
|
||||||
import org.apache.olingo.client.api.http.HttpMethod;
|
|
||||||
import org.apache.olingo.client.core.uri.URIUtils;
|
|
||||||
import org.apache.olingo.client.core.communication.request.AbstractODataBasicRequest;
|
|
||||||
import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
|
|
||||||
import org.apache.olingo.commons.api.data.ResWrap;
|
|
||||||
import org.apache.olingo.commons.api.data.Entity;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class implements an OData create request.
|
* This class implements an OData create request.
|
||||||
|
@ -74,7 +73,7 @@ public class ODataEntityCreateRequestImpl<E extends CommonODataEntity>
|
||||||
try {
|
try {
|
||||||
return odataClient.getWriter().writeEntity(entity, ODataPubFormat.fromString(getContentType()));
|
return odataClient.getWriter().writeEntity(entity, ODataPubFormat.fromString(getContentType()));
|
||||||
} catch (final ODataSerializerException e) {
|
} catch (final ODataSerializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,7 +131,7 @@ public class ODataEntityCreateRequestImpl<E extends CommonODataEntity>
|
||||||
|
|
||||||
entity = (E) odataClient.getBinder().getODataEntity(resource);
|
entity = (E) odataClient.getBinder().getODataEntity(resource);
|
||||||
} catch (final ODataDeserializerException e) {
|
} catch (final ODataDeserializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
} finally {
|
} finally {
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,17 +28,16 @@ import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
|
||||||
import org.apache.olingo.client.api.CommonODataClient;
|
import org.apache.olingo.client.api.CommonODataClient;
|
||||||
import org.apache.olingo.client.api.communication.request.cud.ODataEntityUpdateRequest;
|
import org.apache.olingo.client.api.communication.request.cud.ODataEntityUpdateRequest;
|
||||||
import org.apache.olingo.client.api.communication.response.ODataEntityUpdateResponse;
|
import org.apache.olingo.client.api.communication.response.ODataEntityUpdateResponse;
|
||||||
|
import org.apache.olingo.client.api.http.HttpMethod;
|
||||||
|
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.data.Entity;
|
||||||
|
import org.apache.olingo.commons.api.data.ResWrap;
|
||||||
import org.apache.olingo.commons.api.domain.CommonODataEntity;
|
import org.apache.olingo.commons.api.domain.CommonODataEntity;
|
||||||
import org.apache.olingo.commons.api.format.ODataPubFormat;
|
import org.apache.olingo.commons.api.format.ODataPubFormat;
|
||||||
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
||||||
import org.apache.olingo.commons.api.op.ODataSerializerException;
|
import org.apache.olingo.commons.api.op.ODataSerializerException;
|
||||||
import org.apache.olingo.client.api.http.HttpClientException;
|
|
||||||
import org.apache.olingo.client.api.http.HttpMethod;
|
|
||||||
import org.apache.olingo.client.core.uri.URIUtils;
|
|
||||||
import org.apache.olingo.client.core.communication.request.AbstractODataBasicRequest;
|
|
||||||
import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
|
|
||||||
import org.apache.olingo.commons.api.data.ResWrap;
|
|
||||||
import org.apache.olingo.commons.api.data.Entity;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class implements an OData update request.
|
* This class implements an OData update request.
|
||||||
|
@ -89,7 +88,7 @@ public class ODataEntityUpdateRequestImpl<E extends CommonODataEntity>
|
||||||
try {
|
try {
|
||||||
return odataClient.getWriter().writeEntity(changes, ODataPubFormat.fromString(getContentType()));
|
return odataClient.getWriter().writeEntity(changes, ODataPubFormat.fromString(getContentType()));
|
||||||
} catch (final ODataSerializerException e) {
|
} catch (final ODataSerializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,7 +129,7 @@ public class ODataEntityUpdateRequestImpl<E extends CommonODataEntity>
|
||||||
|
|
||||||
entity = (E) odataClient.getBinder().getODataEntity(resource);
|
entity = (E) odataClient.getBinder().getODataEntity(resource);
|
||||||
} catch (final ODataDeserializerException e) {
|
} catch (final ODataDeserializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
} finally {
|
} finally {
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,6 @@ import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
|
||||||
import org.apache.olingo.client.api.CommonODataClient;
|
import org.apache.olingo.client.api.CommonODataClient;
|
||||||
import org.apache.olingo.client.api.communication.request.cud.ODataPropertyUpdateRequest;
|
import org.apache.olingo.client.api.communication.request.cud.ODataPropertyUpdateRequest;
|
||||||
import org.apache.olingo.client.api.communication.response.ODataPropertyUpdateResponse;
|
import org.apache.olingo.client.api.communication.response.ODataPropertyUpdateResponse;
|
||||||
import org.apache.olingo.client.api.http.HttpClientException;
|
|
||||||
import org.apache.olingo.client.api.http.HttpMethod;
|
import org.apache.olingo.client.api.http.HttpMethod;
|
||||||
import org.apache.olingo.client.core.communication.request.AbstractODataBasicRequest;
|
import org.apache.olingo.client.core.communication.request.AbstractODataBasicRequest;
|
||||||
import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
|
import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
|
||||||
|
@ -84,7 +83,7 @@ public class ODataPropertyUpdateRequestImpl extends AbstractODataBasicRequest<OD
|
||||||
try {
|
try {
|
||||||
return odataClient.getWriter().writeProperty(property, ODataFormat.fromString(getContentType()));
|
return odataClient.getWriter().writeProperty(property, ODataFormat.fromString(getContentType()));
|
||||||
} catch (final ODataSerializerException e) {
|
} catch (final ODataSerializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,7 +121,7 @@ public class ODataPropertyUpdateRequestImpl extends AbstractODataBasicRequest<OD
|
||||||
|
|
||||||
property = odataClient.getBinder().getODataProperty(resource);
|
property = odataClient.getBinder().getODataProperty(resource);
|
||||||
} catch (final ODataDeserializerException e) {
|
} catch (final ODataDeserializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
} finally {
|
} finally {
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,14 +28,13 @@ import org.apache.http.client.methods.HttpPost;
|
||||||
import org.apache.olingo.client.api.CommonODataClient;
|
import org.apache.olingo.client.api.CommonODataClient;
|
||||||
import org.apache.olingo.client.api.communication.request.cud.v3.ODataLinkCreateRequest;
|
import org.apache.olingo.client.api.communication.request.cud.v3.ODataLinkCreateRequest;
|
||||||
import org.apache.olingo.client.api.communication.response.ODataLinkOperationResponse;
|
import org.apache.olingo.client.api.communication.response.ODataLinkOperationResponse;
|
||||||
|
import org.apache.olingo.client.api.http.HttpMethod;
|
||||||
|
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.ODataLink;
|
import org.apache.olingo.commons.api.domain.ODataLink;
|
||||||
import org.apache.olingo.commons.api.format.ODataFormat;
|
import org.apache.olingo.commons.api.format.ODataFormat;
|
||||||
import org.apache.olingo.commons.api.op.ODataSerializerException;
|
import org.apache.olingo.commons.api.op.ODataSerializerException;
|
||||||
import org.apache.olingo.client.api.http.HttpClientException;
|
|
||||||
import org.apache.olingo.client.api.http.HttpMethod;
|
|
||||||
import org.apache.olingo.client.core.uri.URIUtils;
|
|
||||||
import org.apache.olingo.client.core.communication.request.AbstractODataBasicRequest;
|
|
||||||
import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class implements an insert link OData request.
|
* This class implements an insert link OData request.
|
||||||
|
@ -81,7 +80,7 @@ public class ODataLinkCreateRequestImpl extends AbstractODataBasicRequest<ODataL
|
||||||
try {
|
try {
|
||||||
return odataClient.getWriter().writeLink(link, ODataFormat.fromString(getContentType()));
|
return odataClient.getWriter().writeLink(link, ODataFormat.fromString(getContentType()));
|
||||||
} catch (final ODataSerializerException e) {
|
} catch (final ODataSerializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,14 +28,13 @@ import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
|
||||||
import org.apache.olingo.client.api.CommonODataClient;
|
import org.apache.olingo.client.api.CommonODataClient;
|
||||||
import org.apache.olingo.client.api.communication.request.cud.v3.ODataLinkUpdateRequest;
|
import org.apache.olingo.client.api.communication.request.cud.v3.ODataLinkUpdateRequest;
|
||||||
import org.apache.olingo.client.api.communication.response.ODataLinkOperationResponse;
|
import org.apache.olingo.client.api.communication.response.ODataLinkOperationResponse;
|
||||||
|
import org.apache.olingo.client.api.http.HttpMethod;
|
||||||
|
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.ODataLink;
|
import org.apache.olingo.commons.api.domain.ODataLink;
|
||||||
import org.apache.olingo.commons.api.format.ODataFormat;
|
import org.apache.olingo.commons.api.format.ODataFormat;
|
||||||
import org.apache.olingo.commons.api.op.ODataSerializerException;
|
import org.apache.olingo.commons.api.op.ODataSerializerException;
|
||||||
import org.apache.olingo.client.api.http.HttpClientException;
|
|
||||||
import org.apache.olingo.client.api.http.HttpMethod;
|
|
||||||
import org.apache.olingo.client.core.uri.URIUtils;
|
|
||||||
import org.apache.olingo.client.core.communication.request.AbstractODataBasicRequest;
|
|
||||||
import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class implements an update link OData request.
|
* This class implements an update link OData request.
|
||||||
|
@ -81,7 +80,7 @@ public class ODataLinkUpdateRequestImpl extends AbstractODataBasicRequest<ODataL
|
||||||
try {
|
try {
|
||||||
return odataClient.getWriter().writeLink(link, ODataFormat.fromString(getContentType()));
|
return odataClient.getWriter().writeLink(link, ODataFormat.fromString(getContentType()));
|
||||||
} catch (final ODataSerializerException e) {
|
} catch (final ODataSerializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,14 +89,6 @@ public class ODataLinkUpdateRequestImpl extends AbstractODataBasicRequest<ODataL
|
||||||
*/
|
*/
|
||||||
public class ODataLinkUpdateResponseImpl extends AbstractODataResponse implements ODataLinkOperationResponse {
|
public class ODataLinkUpdateResponseImpl extends AbstractODataResponse implements ODataLinkOperationResponse {
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor.
|
|
||||||
* <p>
|
|
||||||
* Just to create response templates to be initialized from batch.
|
|
||||||
*/
|
|
||||||
private ODataLinkUpdateResponseImpl() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
|
|
|
@ -34,21 +34,21 @@ import org.apache.olingo.client.api.communication.request.ODataBatchableRequest;
|
||||||
import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
|
import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
|
||||||
import org.apache.olingo.client.api.communication.request.invoke.ODataNoContent;
|
import org.apache.olingo.client.api.communication.request.invoke.ODataNoContent;
|
||||||
import org.apache.olingo.client.api.communication.response.ODataInvokeResponse;
|
import org.apache.olingo.client.api.communication.response.ODataInvokeResponse;
|
||||||
|
import org.apache.olingo.client.api.http.HttpClientException;
|
||||||
|
import org.apache.olingo.client.api.http.HttpMethod;
|
||||||
|
import org.apache.olingo.client.api.v4.ODataClient;
|
||||||
|
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.CommonODataEntity;
|
||||||
import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
|
import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
|
||||||
import org.apache.olingo.commons.api.domain.ODataInvokeResult;
|
|
||||||
import org.apache.olingo.commons.api.domain.CommonODataProperty;
|
import org.apache.olingo.commons.api.domain.CommonODataProperty;
|
||||||
|
import org.apache.olingo.commons.api.domain.ODataInvokeResult;
|
||||||
import org.apache.olingo.commons.api.domain.ODataValue;
|
import org.apache.olingo.commons.api.domain.ODataValue;
|
||||||
import org.apache.olingo.commons.api.format.ODataFormat;
|
import org.apache.olingo.commons.api.format.ODataFormat;
|
||||||
import org.apache.olingo.commons.api.format.ODataPubFormat;
|
import org.apache.olingo.commons.api.format.ODataPubFormat;
|
||||||
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
||||||
import org.apache.olingo.commons.api.op.ODataSerializerException;
|
import org.apache.olingo.commons.api.op.ODataSerializerException;
|
||||||
import org.apache.olingo.client.api.http.HttpClientException;
|
|
||||||
import org.apache.olingo.client.api.http.HttpMethod;
|
|
||||||
import org.apache.olingo.client.api.v4.ODataClient;
|
|
||||||
import org.apache.olingo.client.core.uri.URIUtils;
|
|
||||||
import org.apache.olingo.client.core.communication.request.AbstractODataBasicRequest;
|
|
||||||
import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class implements an OData invoke operation request.
|
* This class implements an OData invoke operation request.
|
||||||
|
@ -143,7 +143,7 @@ public abstract class AbstractODataInvokeRequest<T extends ODataInvokeResult>
|
||||||
try {
|
try {
|
||||||
return odataClient.getWriter().writeEntity(tmp, getPOSTParameterFormat());
|
return odataClient.getWriter().writeEntity(tmp, getPOSTParameterFormat());
|
||||||
} catch (final ODataSerializerException e) {
|
} catch (final ODataSerializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,7 +228,7 @@ public abstract class AbstractODataInvokeRequest<T extends ODataInvokeResult>
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new HttpClientException(e);
|
throw new HttpClientException(e);
|
||||||
} catch (final ODataDeserializerException e) {
|
} catch (final ODataDeserializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
} finally {
|
} finally {
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,9 +25,8 @@ import org.apache.http.client.HttpClient;
|
||||||
import org.apache.olingo.client.api.CommonODataClient;
|
import org.apache.olingo.client.api.CommonODataClient;
|
||||||
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
|
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
|
||||||
import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
|
import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
|
||||||
import org.apache.olingo.client.api.http.HttpClientException;
|
|
||||||
import org.apache.olingo.commons.api.data.ResWrap;
|
|
||||||
import org.apache.olingo.commons.api.data.Entity;
|
import org.apache.olingo.commons.api.data.Entity;
|
||||||
|
import org.apache.olingo.commons.api.data.ResWrap;
|
||||||
import org.apache.olingo.commons.api.domain.CommonODataEntity;
|
import org.apache.olingo.commons.api.domain.CommonODataEntity;
|
||||||
import org.apache.olingo.commons.api.format.ODataPubFormat;
|
import org.apache.olingo.commons.api.format.ODataPubFormat;
|
||||||
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
||||||
|
@ -89,7 +88,7 @@ public class ODataEntityRequestImpl<E extends CommonODataEntity>
|
||||||
|
|
||||||
entity = (E) odataClient.getBinder().getODataEntity(resource);
|
entity = (E) odataClient.getBinder().getODataEntity(resource);
|
||||||
} catch (final ODataDeserializerException e) {
|
} catch (final ODataDeserializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
} finally {
|
} finally {
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,9 +25,8 @@ import org.apache.http.client.HttpClient;
|
||||||
import org.apache.olingo.client.api.CommonODataClient;
|
import org.apache.olingo.client.api.CommonODataClient;
|
||||||
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetRequest;
|
import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetRequest;
|
||||||
import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
|
import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
|
||||||
import org.apache.olingo.client.api.http.HttpClientException;
|
|
||||||
import org.apache.olingo.commons.api.data.ResWrap;
|
|
||||||
import org.apache.olingo.commons.api.data.EntitySet;
|
import org.apache.olingo.commons.api.data.EntitySet;
|
||||||
|
import org.apache.olingo.commons.api.data.ResWrap;
|
||||||
import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
|
import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
|
||||||
import org.apache.olingo.commons.api.format.ODataPubFormat;
|
import org.apache.olingo.commons.api.format.ODataPubFormat;
|
||||||
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
||||||
|
@ -98,7 +97,7 @@ public class ODataEntitySetRequestImpl<ES extends CommonODataEntitySet>
|
||||||
|
|
||||||
entitySet = (ES) odataClient.getBinder().getODataEntitySet(resource);
|
entitySet = (ES) odataClient.getBinder().getODataEntitySet(resource);
|
||||||
} catch (final ODataDeserializerException e) {
|
} catch (final ODataDeserializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
} finally {
|
} finally {
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,7 +89,7 @@ public class ODataPropertyRequestImpl<T extends CommonODataProperty>
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new HttpClientException(e);
|
throw new HttpClientException(e);
|
||||||
} catch (final ODataDeserializerException e) {
|
} catch (final ODataDeserializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
} finally {
|
} finally {
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,13 +28,12 @@ import org.apache.http.client.HttpClient;
|
||||||
import org.apache.olingo.client.api.CommonODataClient;
|
import org.apache.olingo.client.api.CommonODataClient;
|
||||||
import org.apache.olingo.client.api.communication.request.retrieve.ODataRawRequest;
|
import org.apache.olingo.client.api.communication.request.retrieve.ODataRawRequest;
|
||||||
import org.apache.olingo.client.api.communication.response.ODataRawResponse;
|
import org.apache.olingo.client.api.communication.response.ODataRawResponse;
|
||||||
import org.apache.olingo.commons.api.format.ODataPubFormat;
|
|
||||||
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
|
||||||
import org.apache.olingo.client.api.http.HttpClientException;
|
|
||||||
import org.apache.olingo.client.api.http.HttpMethod;
|
import org.apache.olingo.client.api.http.HttpMethod;
|
||||||
import org.apache.olingo.client.core.communication.request.AbstractODataRequest;
|
import org.apache.olingo.client.core.communication.request.AbstractODataRequest;
|
||||||
import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
|
import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
|
||||||
import org.apache.olingo.commons.api.data.ResWrap;
|
import org.apache.olingo.commons.api.data.ResWrap;
|
||||||
|
import org.apache.olingo.commons.api.format.ODataPubFormat;
|
||||||
|
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class implements a generic OData request.
|
* This class implements a generic OData request.
|
||||||
|
@ -101,7 +100,7 @@ public class ODataRawRequestImpl extends AbstractODataRequest<ODataPubFormat>
|
||||||
return odataClient.getReader().
|
return odataClient.getReader().
|
||||||
read(new ByteArrayInputStream(obj), getContentType(), reference);
|
read(new ByteArrayInputStream(obj), getContentType(), reference);
|
||||||
} catch (final ODataDeserializerException e) {
|
} catch (final ODataDeserializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,6 @@ import org.apache.olingo.client.api.CommonODataClient;
|
||||||
import org.apache.olingo.client.api.communication.request.retrieve.ODataServiceDocumentRequest;
|
import org.apache.olingo.client.api.communication.request.retrieve.ODataServiceDocumentRequest;
|
||||||
import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
|
import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
|
||||||
import org.apache.olingo.client.api.data.ServiceDocument;
|
import org.apache.olingo.client.api.data.ServiceDocument;
|
||||||
import org.apache.olingo.client.api.http.HttpClientException;
|
|
||||||
import org.apache.olingo.commons.api.data.ResWrap;
|
import org.apache.olingo.commons.api.data.ResWrap;
|
||||||
import org.apache.olingo.commons.api.domain.ODataServiceDocument;
|
import org.apache.olingo.commons.api.domain.ODataServiceDocument;
|
||||||
import org.apache.olingo.commons.api.format.ODataFormat;
|
import org.apache.olingo.commons.api.format.ODataFormat;
|
||||||
|
@ -91,7 +90,7 @@ public class ODataServiceDocumentRequestImpl extends AbstractODataRetrieveReques
|
||||||
|
|
||||||
serviceDocument = odataClient.getBinder().getODataServiceDocument(resource.getPayload());
|
serviceDocument = odataClient.getBinder().getODataServiceDocument(resource.getPayload());
|
||||||
} catch (final ODataDeserializerException e) {
|
} catch (final ODataDeserializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
} finally {
|
} finally {
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,7 +89,7 @@ public class ODataLinkCollectionRequestImpl extends AbstractODataRetrieveRequest
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new HttpClientException(e);
|
throw new HttpClientException(e);
|
||||||
} catch (final ODataDeserializerException e) {
|
} catch (final ODataDeserializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
} finally {
|
} finally {
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,7 @@ public class ODataDeltaRequestImpl extends AbstractODataRetrieveRequest<ODataDel
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new HttpClientException(e);
|
throw new HttpClientException(e);
|
||||||
} catch (final ODataDeserializerException e) {
|
} catch (final ODataDeserializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
} finally {
|
} finally {
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,13 +28,12 @@ import org.apache.olingo.client.api.CommonODataClient;
|
||||||
import org.apache.olingo.client.api.communication.request.streamed.MediaEntityCreateStreamManager;
|
import org.apache.olingo.client.api.communication.request.streamed.MediaEntityCreateStreamManager;
|
||||||
import org.apache.olingo.client.api.communication.request.streamed.ODataMediaEntityCreateRequest;
|
import org.apache.olingo.client.api.communication.request.streamed.ODataMediaEntityCreateRequest;
|
||||||
import org.apache.olingo.client.api.communication.response.ODataMediaEntityCreateResponse;
|
import org.apache.olingo.client.api.communication.response.ODataMediaEntityCreateResponse;
|
||||||
import org.apache.olingo.commons.api.domain.CommonODataEntity;
|
|
||||||
import org.apache.olingo.client.api.http.HttpClientException;
|
|
||||||
import org.apache.olingo.client.api.http.HttpMethod;
|
import org.apache.olingo.client.api.http.HttpMethod;
|
||||||
import org.apache.olingo.client.core.communication.request.AbstractODataStreamManager;
|
import org.apache.olingo.client.core.communication.request.AbstractODataStreamManager;
|
||||||
import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
|
import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
|
||||||
import org.apache.olingo.commons.api.data.ResWrap;
|
|
||||||
import org.apache.olingo.commons.api.data.Entity;
|
import org.apache.olingo.commons.api.data.Entity;
|
||||||
|
import org.apache.olingo.commons.api.data.ResWrap;
|
||||||
|
import org.apache.olingo.commons.api.domain.CommonODataEntity;
|
||||||
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -128,7 +127,7 @@ public class ODataMediaEntityCreateRequestImpl<E extends CommonODataEntity>
|
||||||
|
|
||||||
entity = (E) odataClient.getBinder().getODataEntity(resource);
|
entity = (E) odataClient.getBinder().getODataEntity(resource);
|
||||||
} catch (final ODataDeserializerException e) {
|
} catch (final ODataDeserializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
} finally {
|
} finally {
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,13 +28,12 @@ import org.apache.olingo.client.api.CommonODataClient;
|
||||||
import org.apache.olingo.client.api.communication.request.streamed.MediaEntityUpdateStreamManager;
|
import org.apache.olingo.client.api.communication.request.streamed.MediaEntityUpdateStreamManager;
|
||||||
import org.apache.olingo.client.api.communication.request.streamed.ODataMediaEntityUpdateRequest;
|
import org.apache.olingo.client.api.communication.request.streamed.ODataMediaEntityUpdateRequest;
|
||||||
import org.apache.olingo.client.api.communication.response.ODataMediaEntityUpdateResponse;
|
import org.apache.olingo.client.api.communication.response.ODataMediaEntityUpdateResponse;
|
||||||
import org.apache.olingo.commons.api.domain.CommonODataEntity;
|
|
||||||
import org.apache.olingo.client.api.http.HttpClientException;
|
|
||||||
import org.apache.olingo.client.api.http.HttpMethod;
|
import org.apache.olingo.client.api.http.HttpMethod;
|
||||||
import org.apache.olingo.client.core.communication.request.AbstractODataStreamManager;
|
import org.apache.olingo.client.core.communication.request.AbstractODataStreamManager;
|
||||||
import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
|
import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
|
||||||
import org.apache.olingo.commons.api.data.ResWrap;
|
|
||||||
import org.apache.olingo.commons.api.data.Entity;
|
import org.apache.olingo.commons.api.data.Entity;
|
||||||
|
import org.apache.olingo.commons.api.data.ResWrap;
|
||||||
|
import org.apache.olingo.commons.api.domain.CommonODataEntity;
|
||||||
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -129,7 +128,7 @@ public class ODataMediaEntityUpdateRequestImpl<E extends CommonODataEntity>
|
||||||
|
|
||||||
entity = (E) odataClient.getBinder().getODataEntity(resource);
|
entity = (E) odataClient.getBinder().getODataEntity(resource);
|
||||||
} catch (final ODataDeserializerException e) {
|
} catch (final ODataDeserializerException e) {
|
||||||
throw new HttpClientException(e);
|
throw new IllegalArgumentException(e);
|
||||||
} finally {
|
} finally {
|
||||||
this.close();
|
this.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -347,7 +347,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
|
||||||
if (contextURL.getDerivedEntity() == null) {
|
if (contextURL.getDerivedEntity() == null) {
|
||||||
for (EdmSchema schema : edm.getSchemas()) {
|
for (EdmSchema schema : edm.getSchemas()) {
|
||||||
final EdmEntityContainer container = schema.getEntityContainer();
|
final EdmEntityContainer container = schema.getEntityContainer();
|
||||||
if(container != null) {
|
if (container != null) {
|
||||||
EdmBindingTarget bindingTarget = container.getEntitySet(contextURL.getEntitySetOrSingletonOrType());
|
EdmBindingTarget bindingTarget = container.getEntitySet(contextURL.getEntitySetOrSingletonOrType());
|
||||||
if (bindingTarget == null) {
|
if (bindingTarget == null) {
|
||||||
bindingTarget = container.getSingleton(contextURL.getEntitySetOrSingletonOrType());
|
bindingTarget = container.getSingleton(contextURL.getEntitySetOrSingletonOrType());
|
||||||
|
|
|
@ -36,14 +36,15 @@ import org.apache.olingo.commons.api.format.Format;
|
||||||
import org.apache.olingo.commons.api.format.ODataFormat;
|
import org.apache.olingo.commons.api.format.ODataFormat;
|
||||||
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
||||||
import org.apache.olingo.commons.core.data.AtomDeserializer;
|
import org.apache.olingo.commons.core.data.AtomDeserializer;
|
||||||
|
import org.apache.olingo.commons.core.data.JSONLinkCollectionDeserializer;
|
||||||
import org.apache.olingo.commons.core.op.AbstractODataDeserializer;
|
import org.apache.olingo.commons.core.op.AbstractODataDeserializer;
|
||||||
|
|
||||||
public class ODataDeserializerImpl extends AbstractODataDeserializer implements ODataDeserializer {
|
public class ODataDeserializerImpl extends AbstractODataDeserializer implements ODataDeserializer {
|
||||||
|
|
||||||
private final Format format;
|
private final Format format;
|
||||||
|
|
||||||
public ODataDeserializerImpl(final ODataServiceVersion version, final Format format) {
|
public ODataDeserializerImpl(final ODataServiceVersion version, final boolean serverMode, final Format format) {
|
||||||
super(version, format);
|
super(version, serverMode, format);
|
||||||
this.format = format;
|
this.format = format;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +69,7 @@ public class ODataDeserializerImpl extends AbstractODataDeserializer implements
|
||||||
try {
|
try {
|
||||||
return format == ODataFormat.XML ?
|
return format == ODataFormat.XML ?
|
||||||
new AtomDeserializer(version).linkCollection(input) :
|
new AtomDeserializer(version).linkCollection(input) :
|
||||||
null; //json(input, LinkCollection.class);
|
new JSONLinkCollectionDeserializer(version, false).toLinkCollection(input);
|
||||||
} catch (final XMLStreamException e) {
|
} catch (final XMLStreamException e) {
|
||||||
throw new ODataDeserializerException(e);
|
throw new ODataDeserializerException(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -279,15 +279,14 @@ public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ODataProperty getODataProperty(final ResWrap<Property> resource) {
|
public ODataProperty getODataProperty(final ResWrap<Property> resource) {
|
||||||
|
final Property payload = resource.getPayload();
|
||||||
final EdmTypeInfo typeInfo = buildTypeInfo(resource.getContextURL(), resource.getMetadataETag(),
|
final EdmTypeInfo typeInfo = buildTypeInfo(resource.getContextURL(), resource.getMetadataETag(),
|
||||||
resource.getPayload().getName(), resource.getPayload().getType());
|
payload.getName(), payload.getType());
|
||||||
|
|
||||||
final ODataProperty property = new ODataPropertyImpl(resource.getPayload().getName(),
|
final ODataProperty property = new ODataPropertyImpl(payload.getName(),
|
||||||
getODataValue(typeInfo == null
|
getODataValue(typeInfo == null ? null : typeInfo.getFullQualifiedName(),
|
||||||
? null
|
payload, resource.getContextURL(), resource.getMetadataETag()));
|
||||||
: typeInfo.getFullQualifiedName(),
|
odataAnnotations(payload, property);
|
||||||
resource.getPayload(), resource.getContextURL(), resource.getMetadataETag()));
|
|
||||||
odataAnnotations(resource.getPayload(), property);
|
|
||||||
|
|
||||||
return property;
|
return property;
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,8 +44,8 @@ public class ODataDeserializerImpl extends AbstractODataDeserializer implements
|
||||||
|
|
||||||
private final Format format;
|
private final Format format;
|
||||||
|
|
||||||
public ODataDeserializerImpl(final ODataServiceVersion version, final Format format) {
|
public ODataDeserializerImpl(final ODataServiceVersion version, final boolean serverMode, final Format format) {
|
||||||
super(version, format);
|
super(version, serverMode, format);
|
||||||
this.format = format;
|
this.format = format;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -104,7 +104,7 @@ public class ODataClientImpl extends AbstractODataClient<UpdateType> implements
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ODataDeserializer getDeserializer(final Format format) {
|
public ODataDeserializer getDeserializer(final Format format) {
|
||||||
return new ODataDeserializerImpl(getServiceVersion(), format);
|
return new ODataDeserializerImpl(getServiceVersion(), false, format);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -115,7 +115,7 @@ public class ODataClientImpl extends AbstractODataClient<UpdateType> implements
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ODataDeserializer getDeserializer(final Format format) {
|
public ODataDeserializer getDeserializer(final Format format) {
|
||||||
return new ODataDeserializerImpl(getServiceVersion(), format);
|
return new ODataDeserializerImpl(getServiceVersion(), false, format);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -20,12 +20,15 @@ package org.apache.olingo.commons.core.data;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.builder.EqualsBuilder;
|
||||||
|
import org.apache.commons.lang3.builder.HashCodeBuilder;
|
||||||
|
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
import org.apache.olingo.commons.api.data.Annotatable;
|
import org.apache.olingo.commons.api.data.Annotatable;
|
||||||
import org.apache.olingo.commons.api.data.Annotation;
|
import org.apache.olingo.commons.api.data.Annotation;
|
||||||
|
|
||||||
public abstract class AbstractAnnotatedObject extends AbstractPayloadObject implements Annotatable {
|
public abstract class AbstractAnnotatedObject implements Annotatable {
|
||||||
|
|
||||||
private static final long serialVersionUID = 4163841499530412213L;
|
|
||||||
|
|
||||||
private final List<Annotation> annotations = new ArrayList<Annotation>();
|
private final List<Annotation> annotations = new ArrayList<Annotation>();
|
||||||
|
|
||||||
|
@ -34,4 +37,18 @@ public abstract class AbstractAnnotatedObject extends AbstractPayloadObject impl
|
||||||
return annotations;
|
return annotations;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(final Object obj) {
|
||||||
|
return EqualsBuilder.reflectionEquals(this, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return HashCodeBuilder.reflectionHashCode(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,14 +21,10 @@ package org.apache.olingo.commons.core.data;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
|
|
||||||
abstract class AbstractODataObject extends AbstractAnnotatedObject {
|
public abstract class AbstractODataObject extends AbstractAnnotatedObject {
|
||||||
|
|
||||||
private static final long serialVersionUID = -4391162864875546927L;
|
|
||||||
|
|
||||||
private URI baseURI;
|
private URI baseURI;
|
||||||
|
|
||||||
private URI id;
|
private URI id;
|
||||||
|
|
||||||
private String title;
|
private String title;
|
||||||
|
|
||||||
public URI getBaseURI() {
|
public URI getBaseURI() {
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.commons.core.data;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import org.apache.commons.lang3.builder.EqualsBuilder;
|
|
||||||
import org.apache.commons.lang3.builder.HashCodeBuilder;
|
|
||||||
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
|
|
||||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Abstract representation of a payload (Atom, JSON) object.
|
|
||||||
*/
|
|
||||||
public abstract class AbstractPayloadObject implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1634654241914156675L;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(final Object obj) {
|
|
||||||
return EqualsBuilder.reflectionEquals(this, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return HashCodeBuilder.reflectionHashCode(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -23,12 +23,8 @@ import org.apache.olingo.commons.api.data.Value;
|
||||||
|
|
||||||
public class AnnotationImpl extends AbstractAnnotatedObject implements Annotation {
|
public class AnnotationImpl extends AbstractAnnotatedObject implements Annotation {
|
||||||
|
|
||||||
private static final long serialVersionUID = -2532246000091187020L;
|
|
||||||
|
|
||||||
private String term;
|
private String term;
|
||||||
|
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
private Value value;
|
private Value value;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -23,10 +23,7 @@ import org.apache.olingo.commons.api.data.DeletedEntity;
|
||||||
|
|
||||||
public class DeletedEntityImpl extends AbstractAnnotatedObject implements DeletedEntity {
|
public class DeletedEntityImpl extends AbstractAnnotatedObject implements DeletedEntity {
|
||||||
|
|
||||||
private static final long serialVersionUID = 2075093398299488510L;
|
|
||||||
|
|
||||||
private URI id;
|
private URI id;
|
||||||
|
|
||||||
private Reason reason;
|
private Reason reason;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -23,12 +23,8 @@ import org.apache.olingo.commons.api.data.DeltaLink;
|
||||||
|
|
||||||
public class DeltaLinkImpl extends AbstractAnnotatedObject implements DeltaLink {
|
public class DeltaLinkImpl extends AbstractAnnotatedObject implements DeltaLink {
|
||||||
|
|
||||||
private static final long serialVersionUID = 581329273399308799L;
|
|
||||||
|
|
||||||
private URI source;
|
private URI source;
|
||||||
|
|
||||||
private String relationship;
|
private String relationship;
|
||||||
|
|
||||||
private URI target;
|
private URI target;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -31,20 +31,15 @@ import org.apache.olingo.commons.api.domain.ODataOperation;
|
||||||
*/
|
*/
|
||||||
public class EntityImpl extends AbstractODataObject implements Entity {
|
public class EntityImpl extends AbstractODataObject implements Entity {
|
||||||
|
|
||||||
private static final long serialVersionUID = 2127764552600969783L;
|
|
||||||
|
|
||||||
private String eTag;
|
private String eTag;
|
||||||
|
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
private Link readLink;
|
private Link readLink;
|
||||||
|
|
||||||
private Link editLink;
|
private Link editLink;
|
||||||
|
|
||||||
private final List<Link> associationLinks = new ArrayList<Link>();
|
private final List<Link> associationLinks = new ArrayList<Link>();
|
||||||
|
|
||||||
private final List<Link> navigationLinks = new ArrayList<Link>();
|
private final List<Link> navigationLinks = new ArrayList<Link>();
|
||||||
|
|
||||||
private final List<Link> mediaEditLinks = new ArrayList<Link>();
|
private final List<Link> mediaEditLinks = new ArrayList<Link>();
|
||||||
|
|
||||||
private final List<ODataOperation> operations = new ArrayList<ODataOperation>();
|
private final List<ODataOperation> operations = new ArrayList<ODataOperation>();
|
||||||
|
@ -52,9 +47,7 @@ public class EntityImpl extends AbstractODataObject implements Entity {
|
||||||
private final List<Property> properties = new ArrayList<Property>();
|
private final List<Property> properties = new ArrayList<Property>();
|
||||||
|
|
||||||
private URI mediaContentSource;
|
private URI mediaContentSource;
|
||||||
|
|
||||||
private String mediaContentType;
|
private String mediaContentType;
|
||||||
|
|
||||||
private String mediaETag;
|
private String mediaETag;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -26,8 +26,6 @@ import org.apache.olingo.commons.api.data.EntitySet;
|
||||||
|
|
||||||
public class EntitySetImpl extends AbstractODataObject implements EntitySet {
|
public class EntitySetImpl extends AbstractODataObject implements EntitySet {
|
||||||
|
|
||||||
private static final long serialVersionUID = -9159884750819150969L;
|
|
||||||
|
|
||||||
private Integer count;
|
private Integer count;
|
||||||
|
|
||||||
private final List<Entity> entities = new ArrayList<Entity>();
|
private final List<Entity> entities = new ArrayList<Entity>();
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
/*
|
||||||
|
* 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.commons.core.data;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.URI;
|
||||||
|
|
||||||
|
import org.apache.olingo.commons.api.Constants;
|
||||||
|
import org.apache.olingo.commons.api.data.ResWrap;
|
||||||
|
import org.apache.olingo.commons.api.data.v3.LinkCollection;
|
||||||
|
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||||
|
import org.apache.olingo.commons.api.op.ODataDeserializerException;
|
||||||
|
import org.apache.olingo.commons.core.data.v3.LinkCollectionImpl;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonFactory;
|
||||||
|
import com.fasterxml.jackson.core.JsonParser;
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
|
public class JSONLinkCollectionDeserializer extends JsonDeserializer {
|
||||||
|
|
||||||
|
public JSONLinkCollectionDeserializer(final ODataServiceVersion version, final boolean serverMode) {
|
||||||
|
super(version, serverMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ResWrap<LinkCollection> doDeserialize(final JsonParser parser) throws IOException {
|
||||||
|
|
||||||
|
final ObjectNode tree = parser.getCodec().readTree(parser);
|
||||||
|
|
||||||
|
final LinkCollectionImpl links = new LinkCollectionImpl();
|
||||||
|
|
||||||
|
if (tree.hasNonNull("odata.metadata")) {
|
||||||
|
links.setMetadata(URI.create(tree.get("odata.metadata").textValue()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tree.hasNonNull(Constants.JSON_URL)) {
|
||||||
|
links.getLinks().add(URI.create(tree.get(Constants.JSON_URL).textValue()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tree.hasNonNull(Constants.VALUE)) {
|
||||||
|
for (final JsonNode item : tree.get(Constants.VALUE)) {
|
||||||
|
final URI uri = URI.create(item.get(Constants.JSON_URL).textValue());
|
||||||
|
links.getLinks().add(uri);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tree.hasNonNull(jsonNextLink)) {
|
||||||
|
links.setNext(URI.create(tree.get(jsonNextLink).textValue()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ResWrap<LinkCollection>((URI) null, null, links);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResWrap<LinkCollection> toLinkCollection(InputStream input) throws ODataDeserializerException {
|
||||||
|
try {
|
||||||
|
JsonParser parser = new JsonFactory(new ObjectMapper()).createParser(input);
|
||||||
|
return doDeserialize(parser);
|
||||||
|
} catch (final IOException e) {
|
||||||
|
throw new ODataDeserializerException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -102,7 +102,7 @@ public class JsonSerializer implements ODataSerializer {
|
||||||
} else if (obj instanceof Entity) {
|
} else if (obj instanceof Entity) {
|
||||||
new JSONEntitySerializer(version, serverMode).doContainerSerialize((ResWrap<Entity>) container, json);
|
new JSONEntitySerializer(version, serverMode).doContainerSerialize((ResWrap<Entity>) container, json);
|
||||||
} else if (obj instanceof Property) {
|
} else if (obj instanceof Property) {
|
||||||
new JSONPropertySerializer(version, serverMode).doSerialize((Property) obj, json);
|
new JSONPropertySerializer(version, serverMode).doContainerSerialize((ResWrap<Property>) container, json);
|
||||||
} else if (obj instanceof Link) {
|
} else if (obj instanceof Link) {
|
||||||
link((Link) obj, json);
|
link((Link) obj, json);
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,20 +24,12 @@ import org.apache.olingo.commons.api.data.Link;
|
||||||
|
|
||||||
public class LinkImpl extends AbstractAnnotatedObject implements Link {
|
public class LinkImpl extends AbstractAnnotatedObject implements Link {
|
||||||
|
|
||||||
private static final long serialVersionUID = -3449344217160035501L;
|
|
||||||
|
|
||||||
private String title;
|
private String title;
|
||||||
|
|
||||||
private String rel;
|
private String rel;
|
||||||
|
|
||||||
private String href;
|
private String href;
|
||||||
|
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
private String mediaETag;
|
private String mediaETag;
|
||||||
|
|
||||||
private Entity entity;
|
private Entity entity;
|
||||||
|
|
||||||
private EntitySet entitySet;
|
private EntitySet entitySet;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -23,12 +23,8 @@ import org.apache.olingo.commons.api.data.Value;
|
||||||
|
|
||||||
public class PropertyImpl extends AbstractAnnotatedObject implements Property {
|
public class PropertyImpl extends AbstractAnnotatedObject implements Property {
|
||||||
|
|
||||||
private static final long serialVersionUID = -7175704800169997060L;
|
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
private Value value;
|
private Value value;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,118 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.commons.core.data.v3;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
||||||
import java.net.URI;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import org.apache.olingo.commons.api.data.v3.LinkCollection;
|
|
||||||
import org.apache.olingo.commons.core.data.AbstractPayloadObject;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Link from an entity, represented via JSON.
|
|
||||||
*/
|
|
||||||
public class JSONLinkCollectionImpl extends AbstractPayloadObject implements LinkCollection {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = -5006368367235783907L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* JSON link URL representation.
|
|
||||||
*/
|
|
||||||
static class JSONLinkURL extends AbstractPayloadObject {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 5365055617973271468L;
|
|
||||||
|
|
||||||
private URI url;
|
|
||||||
|
|
||||||
public URI getUrl() {
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUrl(final URI url) {
|
|
||||||
this.url = url;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@JsonProperty(value = "odata.metadata", required = false)
|
|
||||||
private URI metadata;
|
|
||||||
|
|
||||||
@JsonProperty(required = false)
|
|
||||||
private URI url;
|
|
||||||
|
|
||||||
@JsonProperty(value = "value", required = false)
|
|
||||||
private final List<JSONLinkURL> links = new ArrayList<JSONLinkURL>();
|
|
||||||
|
|
||||||
@JsonProperty(value = "odata.nextLink", required = false)
|
|
||||||
private String next;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the metadata URI.
|
|
||||||
*/
|
|
||||||
public URI getMetadata() {
|
|
||||||
return metadata;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the metadata URI.
|
|
||||||
*
|
|
||||||
* @param metadata metadata URI.
|
|
||||||
*/
|
|
||||||
public void setMetadata(final URI metadata) {
|
|
||||||
this.metadata = metadata;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc }
|
|
||||||
*/
|
|
||||||
@JsonIgnore
|
|
||||||
@Override
|
|
||||||
public List<URI> getLinks() {
|
|
||||||
final List<URI> result = new ArrayList<URI>();
|
|
||||||
|
|
||||||
if (this.url == null) {
|
|
||||||
for (JSONLinkURL link : links) {
|
|
||||||
result.add(link.getUrl());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
result.add(this.url);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc }
|
|
||||||
*/
|
|
||||||
@JsonIgnore
|
|
||||||
@Override
|
|
||||||
public void setNext(final URI next) {
|
|
||||||
this.next = next == null ? null : next.toASCIIString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc }
|
|
||||||
*/
|
|
||||||
@JsonIgnore
|
|
||||||
@Override
|
|
||||||
public URI getNext() {
|
|
||||||
return next == null ? null : URI.create(next);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -21,9 +21,11 @@ package org.apache.olingo.commons.core.data.v3;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.apache.olingo.commons.api.data.v3.LinkCollection;
|
|
||||||
|
|
||||||
public class LinkCollectionImpl implements LinkCollection {
|
import org.apache.olingo.commons.api.data.v3.LinkCollection;
|
||||||
|
import org.apache.olingo.commons.core.data.AbstractAnnotatedObject;
|
||||||
|
|
||||||
|
public class LinkCollectionImpl extends AbstractAnnotatedObject implements LinkCollection {
|
||||||
|
|
||||||
private final List<URI> links = new ArrayList<URI>();
|
private final List<URI> links = new ArrayList<URI>();
|
||||||
private URI next;
|
private URI next;
|
||||||
|
|
|
@ -27,12 +27,8 @@ import org.apache.olingo.commons.core.data.EntitySetImpl;
|
||||||
|
|
||||||
public class DeltaImpl extends EntitySetImpl implements Delta {
|
public class DeltaImpl extends EntitySetImpl implements Delta {
|
||||||
|
|
||||||
private static final long serialVersionUID = 4576771708961553195L;
|
|
||||||
|
|
||||||
private final List<DeletedEntity> deletedEntities = new ArrayList<DeletedEntity>();
|
private final List<DeletedEntity> deletedEntities = new ArrayList<DeletedEntity>();
|
||||||
|
|
||||||
private final List<DeltaLink> addedLinks = new ArrayList<DeltaLink>();
|
private final List<DeltaLink> addedLinks = new ArrayList<DeltaLink>();
|
||||||
|
|
||||||
private final List<DeltaLink> deletedLinks = new ArrayList<DeltaLink>();
|
private final List<DeltaLink> deletedLinks = new ArrayList<DeltaLink>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -51,12 +51,12 @@ public abstract class AbstractODataDeserializer {
|
||||||
protected final ODataServiceVersion version;
|
protected final ODataServiceVersion version;
|
||||||
protected final ODataDeserializer deserializer;
|
protected final ODataDeserializer deserializer;
|
||||||
|
|
||||||
public AbstractODataDeserializer(final ODataServiceVersion version, final Format format) {
|
public AbstractODataDeserializer(final ODataServiceVersion version, final boolean serverMode, final Format format) {
|
||||||
this.version = version;
|
this.version = version;
|
||||||
if (format == ODataFormat.XML || format == ODataPubFormat.ATOM) {
|
if (format == ODataFormat.XML || format == ODataPubFormat.ATOM) {
|
||||||
deserializer = new AtomDeserializer(version);
|
deserializer = new AtomDeserializer(version);
|
||||||
} else {
|
} else {
|
||||||
deserializer = new JsonDeserializer(version, false);
|
deserializer = new JsonDeserializer(version, serverMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,52 +18,26 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.olingo.server.core;
|
package org.apache.olingo.server.core;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URI;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import org.apache.olingo.commons.api.ODataRuntimeException;
|
import org.apache.olingo.commons.api.ODataRuntimeException;
|
||||||
import org.apache.olingo.commons.api.data.ContextURL;
|
|
||||||
import org.apache.olingo.commons.api.data.Entity;
|
|
||||||
import org.apache.olingo.commons.api.data.EntitySet;
|
|
||||||
import org.apache.olingo.commons.api.data.Property;
|
|
||||||
import org.apache.olingo.commons.api.data.ResWrap;
|
|
||||||
import org.apache.olingo.commons.api.edm.Edm;
|
import org.apache.olingo.commons.api.edm.Edm;
|
||||||
import org.apache.olingo.commons.api.edm.FullQualifiedName;
|
|
||||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||||
import org.apache.olingo.commons.api.format.ContentType;
|
|
||||||
import org.apache.olingo.commons.api.http.HttpContentType;
|
import org.apache.olingo.commons.api.http.HttpContentType;
|
||||||
import org.apache.olingo.commons.api.http.HttpMethod;
|
|
||||||
import org.apache.olingo.commons.api.http.HttpHeader;
|
import org.apache.olingo.commons.api.http.HttpHeader;
|
||||||
import org.apache.olingo.commons.core.data.EntityImpl;
|
import org.apache.olingo.commons.api.http.HttpMethod;
|
||||||
import org.apache.olingo.commons.core.data.EntitySetImpl;
|
|
||||||
import org.apache.olingo.commons.core.data.PrimitiveValueImpl;
|
|
||||||
import org.apache.olingo.commons.core.data.PropertyImpl;
|
|
||||||
import org.apache.olingo.commons.core.op.InjectableSerializerProvider;
|
|
||||||
import org.apache.olingo.server.api.OData;
|
import org.apache.olingo.server.api.OData;
|
||||||
import org.apache.olingo.server.api.ODataRequest;
|
import org.apache.olingo.server.api.ODataRequest;
|
||||||
import org.apache.olingo.server.api.ODataResponse;
|
import org.apache.olingo.server.api.ODataResponse;
|
||||||
import org.apache.olingo.server.api.processor.DefaultProcessor;
|
import org.apache.olingo.server.api.processor.*;
|
||||||
import org.apache.olingo.server.api.processor.EntityProcessor;
|
|
||||||
import org.apache.olingo.server.api.processor.EntitySetProcessor;
|
|
||||||
import org.apache.olingo.server.api.processor.MetadataProcessor;
|
|
||||||
import org.apache.olingo.server.api.processor.Processor;
|
|
||||||
import org.apache.olingo.server.api.processor.ServiceDocumentProcessor;
|
|
||||||
import org.apache.olingo.server.api.serializer.ODataSerializer;
|
|
||||||
import org.apache.olingo.server.api.uri.UriInfo;
|
import org.apache.olingo.server.api.uri.UriInfo;
|
||||||
import org.apache.olingo.server.api.uri.UriResource;
|
import org.apache.olingo.server.api.uri.UriResource;
|
||||||
import org.apache.olingo.server.api.uri.UriResourceNavigation;
|
import org.apache.olingo.server.api.uri.UriResourceNavigation;
|
||||||
import org.apache.olingo.server.api.uri.UriResourcePartTyped;
|
import org.apache.olingo.server.api.uri.UriResourcePartTyped;
|
||||||
import org.apache.olingo.server.core.serializer.utils.CircleStreamBuffer;
|
|
||||||
import org.apache.olingo.server.core.uri.parser.Parser;
|
import org.apache.olingo.server.core.uri.parser.Parser;
|
||||||
import org.apache.olingo.server.core.uri.validator.UriValidator;
|
import org.apache.olingo.server.core.uri.validator.UriValidator;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude.Include;
|
import java.util.HashMap;
|
||||||
import com.fasterxml.jackson.databind.InjectableValues;
|
import java.util.List;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import java.util.Map;
|
||||||
|
|
||||||
public class ODataHandler {
|
public class ODataHandler {
|
||||||
|
|
||||||
|
@ -134,39 +108,6 @@ public class ODataHandler {
|
||||||
UriResource lastPathSegment = uriInfo.getUriResourceParts().get(lastPathSegmentIndex);
|
UriResource lastPathSegment = uriInfo.getUriResourceParts().get(lastPathSegmentIndex);
|
||||||
switch (lastPathSegment.getKind()) {
|
switch (lastPathSegment.getKind()) {
|
||||||
case entitySet:
|
case entitySet:
|
||||||
long time = System.nanoTime();
|
|
||||||
ResWrap<EntitySet> wrap = new ResWrap<EntitySet>(
|
|
||||||
ContextURL.getInstance(URI.create("dummyContextURL")), "dummyMetadataETag",
|
|
||||||
createEntitySet());
|
|
||||||
System.out.println((System.nanoTime() - time) / 1000 + " microseconds");
|
|
||||||
time = System.nanoTime();
|
|
||||||
CircleStreamBuffer buffer = new CircleStreamBuffer();
|
|
||||||
if (false) {
|
|
||||||
ObjectMapper mapper = new ObjectMapper().setSerializationInclusion(Include.NON_NULL);
|
|
||||||
mapper.setInjectableValues(new InjectableValues.Std()
|
|
||||||
.addValue(ODataServiceVersion.class, ODataServiceVersion.V40)
|
|
||||||
.addValue(Boolean.class, Boolean.TRUE));
|
|
||||||
mapper.setSerializerProvider(new InjectableSerializerProvider(mapper.getSerializerProvider(),
|
|
||||||
mapper.getSerializationConfig()
|
|
||||||
.withAttribute(ODataServiceVersion.class, ODataServiceVersion.V40)
|
|
||||||
.withAttribute(Boolean.class, Boolean.TRUE),
|
|
||||||
mapper.getSerializerFactory()));
|
|
||||||
try {
|
|
||||||
mapper.writeValue(buffer.getOutputStream(), wrap);
|
|
||||||
} catch (final IOException e) {}
|
|
||||||
response.setContent(buffer.getInputStream());
|
|
||||||
} else {
|
|
||||||
ODataSerializer serializer = odata.createSerializer(org.apache.olingo.server.api.serializer.ODataFormat.JSON);
|
|
||||||
response.setContent(serializer.entitySet(
|
|
||||||
edm.getEntityContainer(new FullQualifiedName("com.sap.odata.test1", "Container"))
|
|
||||||
.getEntitySet("ESAllPrim"),
|
|
||||||
wrap.getPayload(),
|
|
||||||
ContextURL.getInstance(URI.create("dummyContextURL"))));
|
|
||||||
}
|
|
||||||
System.out.println((System.nanoTime() - time) / 1000 + " microseconds");
|
|
||||||
response.setStatusCode(200);
|
|
||||||
response.setHeader("Content-Type", ContentType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
if (((UriResourcePartTyped) lastPathSegment).isCollection()) {
|
if (((UriResourcePartTyped) lastPathSegment).isCollection()) {
|
||||||
if (request.getMethod().equals(HttpMethod.GET)) {
|
if (request.getMethod().equals(HttpMethod.GET)) {
|
||||||
EntitySetProcessor esp = selectProcessor(EntitySetProcessor.class);
|
EntitySetProcessor esp = selectProcessor(EntitySetProcessor.class);
|
||||||
|
@ -240,34 +181,4 @@ public class ODataHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Entity createEntity() {
|
|
||||||
Entity entity = new EntityImpl();
|
|
||||||
Property property = new PropertyImpl();
|
|
||||||
property.setName("PropertyString");
|
|
||||||
property.setType("String"); //"dummyType");
|
|
||||||
property.setValue(new PrimitiveValueImpl("dummyValue"));
|
|
||||||
entity.getProperties().add(property);
|
|
||||||
Property propertyInt = new PropertyImpl();
|
|
||||||
propertyInt.setName("PropertyInt16");
|
|
||||||
// propertyInt.setType("Edm.Int32");
|
|
||||||
propertyInt.setValue(new PrimitiveValueImpl("042"));
|
|
||||||
entity.getProperties().add(propertyInt);
|
|
||||||
Property propertyGuid = new PropertyImpl();
|
|
||||||
propertyGuid.setName("PropertyGuid");
|
|
||||||
propertyGuid.setType("Edm.Guid");
|
|
||||||
propertyGuid.setValue(new PrimitiveValueImpl(UUID.randomUUID().toString()));
|
|
||||||
entity.getProperties().add(propertyGuid);
|
|
||||||
return entity;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected EntitySet createEntitySet() {
|
|
||||||
EntitySet entitySet = new EntitySetImpl();
|
|
||||||
entitySet.setCount(4242);
|
|
||||||
entitySet.setNext(URI.create("nextLinkURI"));
|
|
||||||
for (int i = 0; i < 1000; i++) {
|
|
||||||
entitySet.getEntities().add(createEntity());
|
|
||||||
}
|
|
||||||
return entitySet;
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -121,6 +121,17 @@
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.olingo</groupId>
|
||||||
|
<artifactId>olingo-commons-api</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.olingo</groupId>
|
||||||
|
<artifactId>olingo-commons-core</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
<artifactId>slf4j-simple</artifactId>
|
<artifactId>slf4j-simple</artifactId>
|
||||||
|
@ -140,6 +151,11 @@
|
||||||
<artifactId>commons-io</artifactId>
|
<artifactId>commons-io</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.olingo</groupId>
|
||||||
|
<artifactId>core</artifactId>
|
||||||
|
<version>0.1.0-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -29,6 +29,7 @@ import org.apache.olingo.commons.api.edm.Edm;
|
||||||
import org.apache.olingo.server.api.ODataHttpHandler;
|
import org.apache.olingo.server.api.ODataHttpHandler;
|
||||||
import org.apache.olingo.server.api.OData;
|
import org.apache.olingo.server.api.OData;
|
||||||
import org.apache.olingo.server.tecsvc.data.DataProvider;
|
import org.apache.olingo.server.tecsvc.data.DataProvider;
|
||||||
|
import org.apache.olingo.server.tecsvc.processor.SampleJsonProcessor;
|
||||||
import org.apache.olingo.server.tecsvc.processor.TechnicalProcessor;
|
import org.apache.olingo.server.tecsvc.processor.TechnicalProcessor;
|
||||||
import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
|
import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -56,7 +57,8 @@ public class TechnicalServlet extends HttpServlet {
|
||||||
|
|
||||||
ODataHttpHandler handler = odata.createHandler(edm);
|
ODataHttpHandler handler = odata.createHandler(edm);
|
||||||
|
|
||||||
handler.register(new TechnicalProcessor(dataProvider));
|
// handler.register(new TechnicalProcessor(dataProvider));
|
||||||
|
handler.register(new SampleJsonProcessor());
|
||||||
|
|
||||||
handler.process(req, resp);
|
handler.process(req, resp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,126 @@
|
||||||
|
/*
|
||||||
|
* 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.server.tecsvc.processor;
|
||||||
|
|
||||||
|
import org.apache.olingo.commons.api.data.ContextURL;
|
||||||
|
import org.apache.olingo.commons.api.data.Entity;
|
||||||
|
import org.apache.olingo.commons.api.data.EntitySet;
|
||||||
|
import org.apache.olingo.commons.api.data.Property;
|
||||||
|
import org.apache.olingo.commons.api.edm.Edm;
|
||||||
|
import org.apache.olingo.commons.api.edm.FullQualifiedName;
|
||||||
|
import org.apache.olingo.commons.api.format.ContentType;
|
||||||
|
import org.apache.olingo.commons.core.data.EntityImpl;
|
||||||
|
import org.apache.olingo.commons.core.data.EntitySetImpl;
|
||||||
|
import org.apache.olingo.commons.core.data.PrimitiveValueImpl;
|
||||||
|
import org.apache.olingo.commons.core.data.PropertyImpl;
|
||||||
|
import org.apache.olingo.server.api.OData;
|
||||||
|
import org.apache.olingo.server.api.ODataRequest;
|
||||||
|
import org.apache.olingo.server.api.ODataResponse;
|
||||||
|
import org.apache.olingo.server.api.processor.EntityProcessor;
|
||||||
|
import org.apache.olingo.server.api.processor.EntitySetProcessor;
|
||||||
|
import org.apache.olingo.server.api.serializer.ODataFormat;
|
||||||
|
import org.apache.olingo.server.api.serializer.ODataSerializer;
|
||||||
|
import org.apache.olingo.server.api.uri.UriInfo;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class SampleJsonProcessor implements EntitySetProcessor, EntityProcessor {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(SampleJsonProcessor.class);
|
||||||
|
|
||||||
|
private OData odata;
|
||||||
|
private Edm edm;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(OData odata, Edm edm) {
|
||||||
|
this.odata = odata;
|
||||||
|
this.edm = edm;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readEntitySet(ODataRequest request, ODataResponse response, UriInfo uriInfo, String format) {
|
||||||
|
long time = System.nanoTime();
|
||||||
|
|
||||||
|
EntitySet entitySet = createEntitySet();
|
||||||
|
|
||||||
|
LOG.info((System.nanoTime() - time) / 1000 + " microseconds");
|
||||||
|
time = System.nanoTime();
|
||||||
|
ODataSerializer serializer = odata.createSerializer(ODataFormat.JSON);
|
||||||
|
response.setContent(serializer.entitySet(
|
||||||
|
edm.getEntityContainer(new FullQualifiedName("com.sap.odata.test1", "Container"))
|
||||||
|
.getEntitySet("ESAllPrim"),
|
||||||
|
entitySet,
|
||||||
|
ContextURL.getInstance(URI.create("dummyContextURL"))));
|
||||||
|
LOG.info("Finished in " + (System.nanoTime() - time) / 1000 + " microseconds");
|
||||||
|
|
||||||
|
response.setStatusCode(200);
|
||||||
|
response.setHeader("Content-Type", ContentType.APPLICATION_JSON);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readEntity(ODataRequest request, ODataResponse response, UriInfo uriInfo, String format) {
|
||||||
|
long time = System.nanoTime();
|
||||||
|
Entity entity = createEntity();
|
||||||
|
|
||||||
|
LOG.info((System.nanoTime() - time) / 1000 + " microseconds");
|
||||||
|
time = System.nanoTime();
|
||||||
|
ODataSerializer serializer = odata.createSerializer(ODataFormat.JSON);
|
||||||
|
response.setContent(serializer.entity(
|
||||||
|
edm.getEntityContainer(new FullQualifiedName("com.sap.odata.test1", "Container"))
|
||||||
|
.getEntitySet("ESAllPrim").getEntityType(),
|
||||||
|
entity,
|
||||||
|
ContextURL.getInstance(URI.create("dummyContextURL"))));
|
||||||
|
LOG.info("Finished in " + (System.nanoTime() - time) / 1000 + " microseconds");
|
||||||
|
|
||||||
|
response.setStatusCode(200);
|
||||||
|
response.setHeader("Content-Type", ContentType.APPLICATION_JSON);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Entity createEntity() {
|
||||||
|
Entity entity = new EntityImpl();
|
||||||
|
Property property = new PropertyImpl();
|
||||||
|
property.setName("PropertyString");
|
||||||
|
property.setType("String"); //"dummyType");
|
||||||
|
property.setValue(new PrimitiveValueImpl("dummyValue"));
|
||||||
|
entity.getProperties().add(property);
|
||||||
|
Property propertyInt = new PropertyImpl();
|
||||||
|
propertyInt.setName("PropertyInt16");
|
||||||
|
// propertyInt.setType("Edm.Int32");
|
||||||
|
propertyInt.setValue(new PrimitiveValueImpl("42"));
|
||||||
|
entity.getProperties().add(propertyInt);
|
||||||
|
Property propertyGuid = new PropertyImpl();
|
||||||
|
propertyGuid.setName("PropertyGuid");
|
||||||
|
propertyGuid.setType("Edm.Guid");
|
||||||
|
propertyGuid.setValue(new PrimitiveValueImpl(UUID.randomUUID().toString()));
|
||||||
|
entity.getProperties().add(propertyGuid);
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected EntitySet createEntitySet() {
|
||||||
|
EntitySet entitySet = new EntitySetImpl();
|
||||||
|
entitySet.setCount(4242);
|
||||||
|
entitySet.setNext(URI.create("nextLinkURI"));
|
||||||
|
for (int i = 0; i < 1000; i++) {
|
||||||
|
entitySet.getEntities().add(createEntity());
|
||||||
|
}
|
||||||
|
return entitySet;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue