[OLINGO-575] Cleanup service version enum
This commit is contained in:
parent
3c36eaeaef
commit
a3789c7cce
|
@ -84,7 +84,7 @@ public abstract class AbstractService<C extends EdmEnabledODataClient> {
|
|||
IOUtils.closeQuietly(bais);
|
||||
}
|
||||
|
||||
final Edm edm = metadata == null ? null : new EdmClientImpl(version, metadata.getSchemaByNsOrAlias());
|
||||
final Edm edm = metadata == null ? null : new EdmClientImpl(metadata.getSchemaByNsOrAlias());
|
||||
//TODO: check runtime exception or not
|
||||
if(version.compareTo(ODataServiceVersion.V40) < 0){
|
||||
throw new ODataRuntimeException("Only OData V4 or higher supported.");
|
||||
|
|
|
@ -149,10 +149,10 @@ public abstract class AbstractServices {
|
|||
this.version = version;
|
||||
this.metadata = metadata;
|
||||
|
||||
atomDeserializer = new FITAtomDeserializer(version);
|
||||
jsonDeserializer = new JsonDeserializer(version, true);
|
||||
atomSerializer = new AtomSerializer(version, true);
|
||||
jsonSerializer = new JsonSerializer(version, true);
|
||||
atomDeserializer = new FITAtomDeserializer();
|
||||
jsonDeserializer = new JsonDeserializer(true);
|
||||
atomSerializer = new AtomSerializer(true);
|
||||
jsonSerializer = new JsonSerializer(true);
|
||||
|
||||
xml = new XMLUtilities(version, metadata);
|
||||
json = new JSONUtilities(version, metadata);
|
||||
|
@ -1827,7 +1827,7 @@ public abstract class AbstractServices {
|
|||
}
|
||||
|
||||
private String stringValue(final Property property) {
|
||||
EdmPrimitiveTypeKind kind = EdmPrimitiveTypeKind.valueOfFQN(version, property.getType());
|
||||
EdmPrimitiveTypeKind kind = EdmPrimitiveTypeKind.valueOfFQN(property.getType());
|
||||
try {
|
||||
return EdmPrimitiveTypeFactory.getInstance(kind)
|
||||
.valueToString(property.asPrimitive(), null, null,
|
||||
|
|
|
@ -18,24 +18,24 @@
|
|||
*/
|
||||
package org.apache.olingo.fit.serializer;
|
||||
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.core.serialization.AtomDeserializer;
|
||||
|
||||
import javax.xml.stream.XMLEventReader;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.CharsetDecoder;
|
||||
import java.nio.charset.CodingErrorAction;
|
||||
|
||||
import javax.xml.stream.XMLEventReader;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.core.serialization.AtomDeserializer;
|
||||
|
||||
public class FITAtomDeserializer extends AtomDeserializer {
|
||||
|
||||
private static final Charset ENCODING = Charset.forName(Constants.UTF8);
|
||||
|
||||
public FITAtomDeserializer(final ODataServiceVersion version) {
|
||||
super(version);
|
||||
public FITAtomDeserializer() {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -103,10 +103,10 @@ public abstract class AbstractUtilities {
|
|||
this.version = version;
|
||||
this.metadata = metadata;
|
||||
fsManager = FSManager.instance(version);
|
||||
atomDeserializer = new FITAtomDeserializer(version);
|
||||
jsonDeserializer = new JsonDeserializer(version, true);
|
||||
atomSerializer = new AtomSerializer(version, true);
|
||||
jsonSerializer = new JsonSerializer(version, true);
|
||||
atomDeserializer = new FITAtomDeserializer();
|
||||
jsonDeserializer = new JsonDeserializer(true);
|
||||
atomSerializer = new AtomSerializer(true);
|
||||
jsonSerializer = new JsonSerializer(true);
|
||||
}
|
||||
|
||||
public boolean isMediaContent(final String entityName) {
|
||||
|
@ -123,8 +123,8 @@ public abstract class AbstractUtilities {
|
|||
* @return
|
||||
*/
|
||||
protected abstract InputStream addLinks(
|
||||
final String entitySetName, final String entitykey, final InputStream is, final Set<String> links)
|
||||
throws Exception;
|
||||
final String entitySetName, final String entitykey, final InputStream is, final Set<String> links)
|
||||
throws Exception;
|
||||
|
||||
/**
|
||||
* Retrieve all entity link names.
|
||||
|
@ -144,7 +144,7 @@ public abstract class AbstractUtilities {
|
|||
* @return
|
||||
*/
|
||||
protected abstract NavigationLinks retrieveNavigationInfo(final String entitySetName, final InputStream is)
|
||||
throws Exception;
|
||||
throws Exception;
|
||||
|
||||
/**
|
||||
* Normalize navigation info and add edit link if missing.
|
||||
|
@ -156,20 +156,20 @@ public abstract class AbstractUtilities {
|
|||
* @return
|
||||
*/
|
||||
protected abstract InputStream normalizeLinks(
|
||||
final String entitySetName, final String entityKey, final InputStream is, final NavigationLinks links)
|
||||
throws Exception;
|
||||
final String entitySetName, final String entityKey, final InputStream is, final NavigationLinks links)
|
||||
throws Exception;
|
||||
|
||||
public InputStream saveSingleEntity(
|
||||
final String key,
|
||||
final String entitySetName,
|
||||
final InputStream is,
|
||||
final NavigationLinks links) throws Exception {
|
||||
final String key,
|
||||
final String entitySetName,
|
||||
final InputStream is,
|
||||
final NavigationLinks links) throws Exception {
|
||||
|
||||
// -----------------------------------------
|
||||
// 0. Get the path
|
||||
// -----------------------------------------
|
||||
final String path =
|
||||
entitySetName + File.separatorChar + Commons.getEntityKey(key) + File.separatorChar
|
||||
entitySetName + File.separatorChar + Commons.getEntityKey(key) + File.separatorChar
|
||||
+ Constants.get(version, ConstantKey.ENTITY);
|
||||
// -----------------------------------------
|
||||
|
||||
|
@ -196,10 +196,10 @@ public abstract class AbstractUtilities {
|
|||
}
|
||||
|
||||
public InputStream addOrReplaceEntity(
|
||||
final String key,
|
||||
final String entitySetName,
|
||||
final InputStream is,
|
||||
final Entity entry) throws Exception {
|
||||
final String key,
|
||||
final String entitySetName,
|
||||
final InputStream is,
|
||||
final Entity entry) throws Exception {
|
||||
|
||||
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
IOUtils.copy(is, bos);
|
||||
|
@ -214,7 +214,7 @@ public abstract class AbstractUtilities {
|
|||
try {
|
||||
linksToBeKept = new HashSet<String>(navigationProperties.keySet());
|
||||
} catch (NullPointerException e) {
|
||||
linksToBeKept = Collections.<String>emptySet();
|
||||
linksToBeKept = Collections.<String> emptySet();
|
||||
}
|
||||
|
||||
for (String availableLink : new HashSet<String>(linksToBeKept)) {
|
||||
|
@ -248,7 +248,7 @@ public abstract class AbstractUtilities {
|
|||
// 3. Normalize navigation info; add edit link; ... and save entity ....
|
||||
// -----------------------------------------
|
||||
final InputStream createdEntity = saveSingleEntity(
|
||||
entityKey, entitySetName, new ByteArrayInputStream(bos.toByteArray()), links);
|
||||
entityKey, entitySetName, new ByteArrayInputStream(bos.toByteArray()), links);
|
||||
// -----------------------------------------
|
||||
|
||||
bos.reset();
|
||||
|
@ -258,7 +258,7 @@ public abstract class AbstractUtilities {
|
|||
// 4. Add navigation links to be kept
|
||||
// -----------------------------------------
|
||||
final InputStream normalizedEntity =
|
||||
addLinks(entitySetName, entityKey, new ByteArrayInputStream(bos.toByteArray()), linksToBeKept);
|
||||
addLinks(entitySetName, entityKey, new ByteArrayInputStream(bos.toByteArray()), linksToBeKept);
|
||||
// -----------------------------------------
|
||||
|
||||
IOUtils.closeQuietly(bos);
|
||||
|
@ -267,8 +267,8 @@ public abstract class AbstractUtilities {
|
|||
// 5. save the entity
|
||||
// -----------------------------------------
|
||||
final FileObject fo = fsManager.putInMemory(
|
||||
normalizedEntity,
|
||||
fsManager.getAbsolutePath(path + Constants.get(version, ConstantKey.ENTITY), getDefaultFormat()));
|
||||
normalizedEntity,
|
||||
fsManager.getAbsolutePath(path + Constants.get(version, ConstantKey.ENTITY), getDefaultFormat()));
|
||||
// -----------------------------------------
|
||||
|
||||
// -----------------------------------------
|
||||
|
@ -282,17 +282,17 @@ public abstract class AbstractUtilities {
|
|||
|
||||
for (final Link link : entry.getNavigationLinks()) {
|
||||
final NavigationProperty navProp =
|
||||
navigationProperties == null ? null : navigationProperties.get(link.getTitle());
|
||||
navigationProperties == null ? null : navigationProperties.get(link.getTitle());
|
||||
if (navProp != null) {
|
||||
final String inlineEntitySetName = navProp.getTarget();
|
||||
if (link.getInlineEntity() != null) {
|
||||
final String inlineEntryKey = getDefaultEntryKey(inlineEntitySetName, link.getInlineEntity());
|
||||
|
||||
addOrReplaceEntity(
|
||||
inlineEntryKey,
|
||||
inlineEntitySetName,
|
||||
toInputStream(link.getInlineEntity()),
|
||||
link.getInlineEntity());
|
||||
inlineEntryKey,
|
||||
inlineEntitySetName,
|
||||
toInputStream(link.getInlineEntity()),
|
||||
link.getInlineEntity());
|
||||
|
||||
hrefs.add(inlineEntitySetName + "(" + inlineEntryKey + ")");
|
||||
} else if (link.getInlineEntitySet() != null) {
|
||||
|
@ -300,10 +300,10 @@ public abstract class AbstractUtilities {
|
|||
final String inlineEntryKey = getDefaultEntryKey(inlineEntitySetName, subentry);
|
||||
|
||||
addOrReplaceEntity(
|
||||
inlineEntryKey,
|
||||
inlineEntitySetName,
|
||||
toInputStream(subentry),
|
||||
subentry);
|
||||
inlineEntryKey,
|
||||
inlineEntitySetName,
|
||||
toInputStream(subentry),
|
||||
subentry);
|
||||
|
||||
hrefs.add(inlineEntitySetName + "(" + inlineEntryKey + ")");
|
||||
}
|
||||
|
@ -320,9 +320,9 @@ public abstract class AbstractUtilities {
|
|||
}
|
||||
|
||||
public void addMediaEntityValue(
|
||||
final String entitySetName,
|
||||
final String entityKey,
|
||||
final InputStream is) throws Exception {
|
||||
final String entitySetName,
|
||||
final String entityKey,
|
||||
final InputStream is) throws Exception {
|
||||
|
||||
// -----------------------------------------
|
||||
// 0. Get default entry key and path (N.B. operation will consume/close the stream; use a copy instead)
|
||||
|
@ -334,17 +334,17 @@ public abstract class AbstractUtilities {
|
|||
// 1. save the media entity value
|
||||
// -----------------------------------------
|
||||
fsManager.putInMemory(is, fsManager.getAbsolutePath(path
|
||||
+ Constants.get(version, ConstantKey.MEDIA_CONTENT_FILENAME), null));
|
||||
+ Constants.get(version, ConstantKey.MEDIA_CONTENT_FILENAME), null));
|
||||
IOUtils.closeQuietly(is);
|
||||
// -----------------------------------------
|
||||
}
|
||||
|
||||
public void putLinksInMemory(
|
||||
final String basePath,
|
||||
final String entitySetName,
|
||||
final String entityKey,
|
||||
final String linkName,
|
||||
final Collection<String> links) throws Exception {
|
||||
final String basePath,
|
||||
final String entitySetName,
|
||||
final String entityKey,
|
||||
final String linkName,
|
||||
final Collection<String> links) throws Exception {
|
||||
|
||||
final HashSet<String> uris = new HashSet<String>();
|
||||
|
||||
|
@ -355,8 +355,7 @@ public abstract class AbstractUtilities {
|
|||
try {
|
||||
final Map.Entry<String, List<String>> currents = extractLinkURIs(entitySetName, entityKey, linkName);
|
||||
uris.addAll(currents.getValue());
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
} catch (Exception ignore) {}
|
||||
}
|
||||
|
||||
uris.addAll(links);
|
||||
|
@ -365,20 +364,20 @@ public abstract class AbstractUtilities {
|
|||
}
|
||||
|
||||
public void putLinksInMemory(
|
||||
final String basePath, final String entitySetName, final String linkName, final Collection<String> uris)
|
||||
throws Exception {
|
||||
final String basePath, final String entitySetName, final String linkName, final Collection<String> uris)
|
||||
throws Exception {
|
||||
|
||||
fsManager.putInMemory(
|
||||
Commons.getLinksAsJSON(version, entitySetName, new SimpleEntry<String, Collection<String>>(linkName, uris)),
|
||||
Commons.getLinksPath(version, basePath, linkName, Accept.JSON_FULLMETA));
|
||||
Commons.getLinksAsJSON(version, entitySetName, new SimpleEntry<String, Collection<String>>(linkName, uris)),
|
||||
Commons.getLinksPath(version, basePath, linkName, Accept.JSON_FULLMETA));
|
||||
|
||||
fsManager.putInMemory(
|
||||
Commons.getLinksAsATOM(version, new SimpleEntry<String, Collection<String>>(linkName, uris)),
|
||||
Commons.getLinksPath(version, basePath, linkName, Accept.XML));
|
||||
Commons.getLinksAsATOM(version, new SimpleEntry<String, Collection<String>>(linkName, uris)),
|
||||
Commons.getLinksPath(version, basePath, linkName, Accept.XML));
|
||||
}
|
||||
|
||||
public Response createResponse(
|
||||
final String location, final InputStream entity, final String etag, final Accept accept) {
|
||||
final String location, final InputStream entity, final String etag, final Accept accept) {
|
||||
return createResponse(location, entity, etag, accept, null);
|
||||
}
|
||||
|
||||
|
@ -413,26 +412,26 @@ public abstract class AbstractUtilities {
|
|||
|
||||
public Response createBatchResponse(final InputStream stream) {
|
||||
final Response.ResponseBuilder builder = version.compareTo(ODataServiceVersion.V30) <= 0
|
||||
? Response.accepted(stream)
|
||||
: Response.ok(stream);
|
||||
? Response.accepted(stream)
|
||||
: Response.ok(stream);
|
||||
builder.header(Constants.get(version, ConstantKey.ODATA_SERVICE_VERSION), version.toString() + ";");
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
public Response createResponse(
|
||||
final InputStream entity,
|
||||
final String etag,
|
||||
final Accept accept,
|
||||
final Response.Status status) {
|
||||
final InputStream entity,
|
||||
final String etag,
|
||||
final Accept accept,
|
||||
final Response.Status status) {
|
||||
return createResponse(null, entity, etag, accept, status);
|
||||
}
|
||||
|
||||
public Response createResponse(
|
||||
final String location,
|
||||
final InputStream entity,
|
||||
final String etag,
|
||||
final Accept accept,
|
||||
final Response.Status status) {
|
||||
final String location,
|
||||
final InputStream entity,
|
||||
final String etag,
|
||||
final Accept accept,
|
||||
final Response.Status status) {
|
||||
|
||||
final Response.ResponseBuilder builder = Response.ok();
|
||||
if (version.compareTo(ODataServiceVersion.V30) <= 0) {
|
||||
|
@ -527,14 +526,14 @@ public abstract class AbstractUtilities {
|
|||
}
|
||||
|
||||
public EntitySet readEntitySet(final Accept accept, final InputStream entitySet)
|
||||
throws ODataDeserializerException {
|
||||
throws ODataDeserializerException {
|
||||
return (accept == Accept.ATOM || accept == Accept.XML ? atomDeserializer.toEntitySet(entitySet) : jsonDeserializer.
|
||||
toEntitySet(entitySet))
|
||||
.getPayload();
|
||||
toEntitySet(entitySet))
|
||||
.getPayload();
|
||||
}
|
||||
|
||||
public InputStream writeEntitySet(final Accept accept, final ResWrap<EntitySet> container)
|
||||
throws ODataSerializerException, IOException {
|
||||
throws ODataSerializerException, IOException {
|
||||
|
||||
final StringWriter writer = new StringWriter();
|
||||
if (accept == Accept.ATOM || accept == Accept.XML) {
|
||||
|
@ -549,19 +548,19 @@ public abstract class AbstractUtilities {
|
|||
}
|
||||
|
||||
public ResWrap<Entity> readContainerEntity(final Accept accept, final InputStream entity)
|
||||
throws ODataDeserializerException {
|
||||
throws ODataDeserializerException {
|
||||
return accept == Accept.ATOM || accept == Accept.XML
|
||||
? atomDeserializer.toEntity(entity)
|
||||
: jsonDeserializer.toEntity(entity);
|
||||
? atomDeserializer.toEntity(entity)
|
||||
: jsonDeserializer.toEntity(entity);
|
||||
}
|
||||
|
||||
public Entity readEntity(final Accept accept, final InputStream entity)
|
||||
throws IOException, ODataDeserializerException {
|
||||
throws IOException, ODataDeserializerException {
|
||||
return readContainerEntity(accept, entity).getPayload();
|
||||
}
|
||||
|
||||
public InputStream writeEntity(final Accept accept, final ResWrap<Entity> container)
|
||||
throws ODataSerializerException {
|
||||
throws ODataSerializerException {
|
||||
StringWriter writer = new StringWriter();
|
||||
|
||||
if (accept == Accept.ATOM || accept == Accept.XML) {
|
||||
|
@ -574,7 +573,7 @@ public abstract class AbstractUtilities {
|
|||
}
|
||||
|
||||
public InputStream writeProperty(final Accept accept, final Property property)
|
||||
throws ODataSerializerException {
|
||||
throws ODataSerializerException {
|
||||
|
||||
final StringWriter writer = new StringWriter();
|
||||
if (accept == Accept.XML || accept == Accept.ATOM) {
|
||||
|
@ -588,12 +587,12 @@ public abstract class AbstractUtilities {
|
|||
|
||||
public Property readProperty(final Accept accept, final InputStream property) throws ODataDeserializerException {
|
||||
return (Accept.ATOM == accept || Accept.XML == accept ? atomDeserializer.toProperty(property) : jsonDeserializer.
|
||||
toProperty(property))
|
||||
.getPayload();
|
||||
toProperty(property))
|
||||
.getPayload();
|
||||
}
|
||||
|
||||
public InputStream writeProperty(final Accept accept, final ResWrap<Property> container)
|
||||
throws ODataSerializerException {
|
||||
throws ODataSerializerException {
|
||||
|
||||
final StringWriter writer = new StringWriter();
|
||||
if (accept == Accept.XML || accept == Accept.ATOM) {
|
||||
|
@ -606,7 +605,7 @@ public abstract class AbstractUtilities {
|
|||
}
|
||||
|
||||
private String getDefaultEntryKey(final String entitySetName, final Entity entry, final String propertyName)
|
||||
throws IOException {
|
||||
throws IOException {
|
||||
|
||||
String res;
|
||||
if (entry.getProperty(propertyName) == null) {
|
||||
|
@ -639,7 +638,7 @@ public abstract class AbstractUtilities {
|
|||
} else {
|
||||
productID = (Integer) entity.getProperty("OrderID").asPrimitive();
|
||||
res = "OrderID=" + entity.getProperty("OrderID").asPrimitive()
|
||||
+ ",ProductID=" + entity.getProperty("ProductID").asPrimitive();
|
||||
+ ",ProductID=" + entity.getProperty("ProductID").asPrimitive();
|
||||
}
|
||||
Commons.SEQUENCE.put(entitySetName, productID);
|
||||
} else if ("Message".equals(entitySetName)) {
|
||||
|
@ -654,7 +653,7 @@ public abstract class AbstractUtilities {
|
|||
} else {
|
||||
messageId = (Integer) entity.getProperty("MessageId").asPrimitive();
|
||||
res = "FromUsername=" + entity.getProperty("FromUsername").asPrimitive()
|
||||
+ ",MessageId=" + entity.getProperty("MessageId").asPrimitive();
|
||||
+ ",MessageId=" + entity.getProperty("MessageId").asPrimitive();
|
||||
}
|
||||
Commons.SEQUENCE.put(entitySetName, messageId);
|
||||
} else if ("PersonDetails".equals(entitySetName)) {
|
||||
|
@ -701,7 +700,7 @@ public abstract class AbstractUtilities {
|
|||
productId = (Integer) entity.getProperty("ProductID").asPrimitive();
|
||||
productDetailId = (Integer) entity.getProperty("ProductDetailID").asPrimitive();
|
||||
res = "ProductID=" + entity.getProperty("ProductID").asPrimitive()
|
||||
+ ",ProductDetailID=" + entity.getProperty("ProductDetailID").asPrimitive();
|
||||
+ ",ProductDetailID=" + entity.getProperty("ProductDetailID").asPrimitive();
|
||||
}
|
||||
Commons.SEQUENCE.put(entitySetName, productDetailId);
|
||||
Commons.SEQUENCE.put("Products", productId);
|
||||
|
@ -723,7 +722,7 @@ public abstract class AbstractUtilities {
|
|||
|
||||
public String getLinksBasePath(final String entitySetName, final String entityId) {
|
||||
return entitySetName + File.separatorChar + Commons.getEntityKey(entityId) + File.separatorChar
|
||||
+ Constants.get(version, ConstantKey.LINKS_FILE_PATH) + File.separatorChar;
|
||||
+ Constants.get(version, ConstantKey.LINKS_FILE_PATH) + File.separatorChar;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -736,8 +735,8 @@ public abstract class AbstractUtilities {
|
|||
* @return a pair of ETag/links stream
|
||||
*/
|
||||
public LinkInfo readLinks(
|
||||
final String entitySetName, final String entityId, final String linkName, final Accept accept)
|
||||
throws Exception {
|
||||
final String entitySetName, final String entityId, final String linkName, final Accept accept)
|
||||
throws Exception {
|
||||
|
||||
final String basePath = getLinksBasePath(entitySetName, entityId);
|
||||
|
||||
|
@ -751,16 +750,16 @@ public abstract class AbstractUtilities {
|
|||
}
|
||||
|
||||
public InputStream putMediaInMemory(
|
||||
final String entitySetName, final String entityId, final InputStream value)
|
||||
throws IOException {
|
||||
final String entitySetName, final String entityId, final InputStream value)
|
||||
throws IOException {
|
||||
return putMediaInMemory(entitySetName, entityId, null, value);
|
||||
}
|
||||
|
||||
public InputStream putMediaInMemory(
|
||||
final String entitySetName, final String entityId, final String name, final InputStream value)
|
||||
throws IOException {
|
||||
final String entitySetName, final String entityId, final String name, final InputStream value)
|
||||
throws IOException {
|
||||
final FileObject fo = fsManager.putInMemory(value, fsManager.getAbsolutePath(
|
||||
Commons.getEntityBasePath(entitySetName, entityId)
|
||||
Commons.getEntityBasePath(entitySetName, entityId)
|
||||
+ (name == null ? Constants.get(version, ConstantKey.MEDIA_CONTENT_FILENAME) : name), null));
|
||||
|
||||
return fo.getContent().getInputStream();
|
||||
|
@ -771,14 +770,14 @@ public abstract class AbstractUtilities {
|
|||
}
|
||||
|
||||
public Map.Entry<String, InputStream> readMediaEntity(
|
||||
final String entitySetName, final String entityId, final String name) {
|
||||
final String entitySetName, final String entityId, final String name) {
|
||||
final String basePath = Commons.getEntityBasePath(entitySetName, entityId);
|
||||
return new SimpleEntry<String, InputStream>(basePath, fsManager.readFile(basePath
|
||||
+ (name == null ? Constants.get(version, ConstantKey.MEDIA_CONTENT_FILENAME) : name)));
|
||||
+ (name == null ? Constants.get(version, ConstantKey.MEDIA_CONTENT_FILENAME) : name)));
|
||||
}
|
||||
|
||||
public Map.Entry<String, InputStream> readEntity(
|
||||
final String entitySetName, final String entityId, final Accept accept) {
|
||||
final String entitySetName, final String entityId, final Accept accept) {
|
||||
|
||||
if (accept == Accept.XML || accept == Accept.TEXT) {
|
||||
throw new UnsupportedMediaTypeException("Unsupported media type");
|
||||
|
@ -786,14 +785,14 @@ public abstract class AbstractUtilities {
|
|||
|
||||
final String basePath = Commons.getEntityBasePath(entitySetName, entityId);
|
||||
return new SimpleEntry<String, InputStream>(basePath,
|
||||
fsManager.readFile(basePath + Constants.get(version, ConstantKey.ENTITY), accept));
|
||||
fsManager.readFile(basePath + Constants.get(version, ConstantKey.ENTITY), accept));
|
||||
}
|
||||
|
||||
public InputStream expandEntity(
|
||||
final String entitySetName,
|
||||
final String entityId,
|
||||
final String linkName)
|
||||
throws Exception {
|
||||
final String entitySetName,
|
||||
final String entityId,
|
||||
final String linkName)
|
||||
throws Exception {
|
||||
|
||||
// --------------------------------
|
||||
// 0. Retrieve all 'linkName' navigation link uris (NotFoundException if missing)
|
||||
|
@ -807,18 +806,18 @@ public abstract class AbstractUtilities {
|
|||
final Map<String, NavigationProperty> navigationProperties = metadata.getNavigationProperties(entitySetName);
|
||||
|
||||
return readEntities(
|
||||
links.getValue(),
|
||||
linkName,
|
||||
links.getKey(),
|
||||
navigationProperties.get(linkName).isEntitySet());
|
||||
links.getValue(),
|
||||
linkName,
|
||||
links.getKey(),
|
||||
navigationProperties.get(linkName).isEntitySet());
|
||||
}
|
||||
|
||||
public InputStream expandEntity(
|
||||
final String entitySetName,
|
||||
final String entityId,
|
||||
final InputStream entity,
|
||||
final String linkName)
|
||||
throws Exception {
|
||||
final String entitySetName,
|
||||
final String entityId,
|
||||
final InputStream entity,
|
||||
final String linkName)
|
||||
throws Exception {
|
||||
// --------------------------------
|
||||
// 2. Retrieve expanded object (entry or feed)
|
||||
// --------------------------------
|
||||
|
@ -827,14 +826,14 @@ public abstract class AbstractUtilities {
|
|||
}
|
||||
|
||||
public InputStream deleteProperty(
|
||||
final String entitySetName,
|
||||
final String entityId,
|
||||
final List<String> path,
|
||||
final Accept accept) throws Exception {
|
||||
final String entitySetName,
|
||||
final String entityId,
|
||||
final List<String> path,
|
||||
final Accept accept) throws Exception {
|
||||
final String basePath = Commons.getEntityBasePath(entitySetName, entityId);
|
||||
|
||||
final Accept acceptType = accept == null || Accept.TEXT == accept
|
||||
? Accept.XML : accept.getExtension().equals(Accept.JSON.getExtension()) ? Accept.JSON_FULLMETA : accept;
|
||||
? Accept.XML : accept.getExtension().equals(Accept.JSON.getExtension()) ? Accept.JSON_FULLMETA : accept;
|
||||
|
||||
// read atom
|
||||
InputStream stream = fsManager.readFile(basePath + Constants.get(version, ConstantKey.ENTITY), acceptType);
|
||||
|
@ -844,44 +843,44 @@ public abstract class AbstractUtilities {
|
|||
|
||||
// save atom
|
||||
fsManager.putInMemory(stream,
|
||||
fsManager.getAbsolutePath(basePath + Constants.get(version, ConstantKey.ENTITY), acceptType));
|
||||
fsManager.getAbsolutePath(basePath + Constants.get(version, ConstantKey.ENTITY), acceptType));
|
||||
|
||||
return fsManager.readFile(basePath + Constants.get(version, ConstantKey.ENTITY), acceptType);
|
||||
}
|
||||
|
||||
public abstract InputStream readEntities(
|
||||
final List<String> links, final String linkName, final String next, final boolean forceFeed)
|
||||
throws Exception;
|
||||
final List<String> links, final String linkName, final String next, final boolean forceFeed)
|
||||
throws Exception;
|
||||
|
||||
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;
|
||||
throws Exception;
|
||||
|
||||
protected abstract Accept getDefaultFormat();
|
||||
|
||||
protected abstract Map<String, InputStream> getChanges(final InputStream src) throws Exception;
|
||||
|
||||
public abstract InputStream addEditLink(
|
||||
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(
|
||||
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(
|
||||
final InputStream src, final InputStream replacement, final List<String> path, final boolean justValue)
|
||||
throws Exception;
|
||||
final InputStream src, final InputStream replacement, final List<String> path, final boolean justValue)
|
||||
throws Exception;
|
||||
|
||||
protected abstract InputStream deleteProperty(final InputStream src, final List<String> path)
|
||||
throws Exception;
|
||||
throws Exception;
|
||||
|
||||
public abstract Map.Entry<String, List<String>> extractLinkURIs(final InputStream is)
|
||||
throws Exception;
|
||||
throws Exception;
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -118,13 +118,13 @@ public class FSManager {
|
|||
ByteArrayOutputStream content = new ByteArrayOutputStream();
|
||||
OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
|
||||
|
||||
new AtomSerializer(version, true).write(writer, container);
|
||||
new AtomSerializer(true).write(writer, container);
|
||||
writer.flush();
|
||||
|
||||
putInMemory(new ByteArrayInputStream(content.toByteArray()), getAbsolutePath(relativePath, Accept.ATOM));
|
||||
content.reset();
|
||||
|
||||
new JsonSerializer(version, true).write(writer, container);
|
||||
new JsonSerializer(true).write(writer, container);
|
||||
writer.flush();
|
||||
|
||||
putInMemory(new ByteArrayInputStream(content.toByteArray()), getAbsolutePath(relativePath, Accept.JSON_FULLMETA));
|
||||
|
|
|
@ -126,14 +126,14 @@ public class ODataClientImpl implements ODataClient {
|
|||
|
||||
@Override
|
||||
public ClientODataDeserializer getDeserializer(final ODataFormat format) {
|
||||
return new ClientODataDeserializerImpl(getServiceVersion(), false, format);
|
||||
return new ClientODataDeserializerImpl(false, format);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ODataSerializer getSerializer(final ODataFormat format) {
|
||||
return format == ODataFormat.ATOM || format == ODataFormat.XML ?
|
||||
new AtomSerializer(getServiceVersion()) :
|
||||
new JsonSerializer(getServiceVersion(), false, format);
|
||||
new AtomSerializer() :
|
||||
new JsonSerializer(false, format);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -27,7 +27,6 @@ import org.apache.commons.lang3.StringUtils;
|
|||
import org.apache.olingo.client.api.data.ServiceDocument;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.api.serialization.ODataDeserializerException;
|
||||
import org.apache.olingo.commons.core.serialization.JsonDeserializer;
|
||||
|
||||
|
@ -39,8 +38,8 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
|
|||
|
||||
public class JSONServiceDocumentDeserializer extends JsonDeserializer {
|
||||
|
||||
public JSONServiceDocumentDeserializer(final ODataServiceVersion version, final boolean serverMode) {
|
||||
super(version, serverMode);
|
||||
public JSONServiceDocumentDeserializer(final boolean serverMode) {
|
||||
super(serverMode);
|
||||
}
|
||||
|
||||
protected ResWrap<ServiceDocument> doDeserialize(final JsonParser parser) throws IOException {
|
||||
|
|
|
@ -25,7 +25,6 @@ import java.net.URI;
|
|||
import org.apache.olingo.client.api.data.ServiceDocument;
|
||||
import org.apache.olingo.client.core.uri.URIUtils;
|
||||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.api.serialization.ODataDeserializerException;
|
||||
import org.apache.olingo.commons.core.serialization.JsonDeserializer;
|
||||
|
||||
|
@ -36,8 +35,8 @@ import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser;
|
|||
|
||||
public class XMLServiceDocumentDeserializer extends JsonDeserializer {
|
||||
|
||||
public XMLServiceDocumentDeserializer(final ODataServiceVersion version, final boolean serverMode) {
|
||||
super(version, serverMode);
|
||||
public XMLServiceDocumentDeserializer(final boolean serverMode) {
|
||||
super(serverMode);
|
||||
}
|
||||
|
||||
private String getName(final JsonParser jp) throws IOException {
|
||||
|
|
|
@ -57,21 +57,16 @@ import org.apache.olingo.commons.api.edm.EdmSchema;
|
|||
import org.apache.olingo.commons.api.edm.EdmTerm;
|
||||
import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
|
||||
import org.apache.olingo.commons.api.edm.FullQualifiedName;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.core.edm.AbstractEdm;
|
||||
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
|
||||
|
||||
public class EdmClientImpl extends AbstractEdm {
|
||||
|
||||
private final ODataServiceVersion version;
|
||||
|
||||
private final List<Schema> xmlSchemas;
|
||||
|
||||
private final Map<String, Schema> xmlSchemaByNamespace;
|
||||
|
||||
public EdmClientImpl(final ODataServiceVersion version, final Map<String, Schema> xmlSchemas) {
|
||||
this.version = version;
|
||||
|
||||
public EdmClientImpl(final Map<String, Schema> xmlSchemas) {
|
||||
this.xmlSchemaByNamespace = xmlSchemas;
|
||||
|
||||
this.xmlSchemas = new ArrayList<Schema>();
|
||||
|
@ -100,7 +95,7 @@ public class EdmClientImpl extends AbstractEdm {
|
|||
protected Map<String, EdmSchema> createSchemas() {
|
||||
final Map<String, EdmSchema> _schemas = new LinkedHashMap<String, EdmSchema>(xmlSchemas.size());
|
||||
for (Schema schema : xmlSchemas) {
|
||||
_schemas.put(schema.getNamespace(), new EdmSchemaImpl(version, this, xmlSchemas, schema));
|
||||
_schemas.put(schema.getNamespace(), new EdmSchemaImpl(this, xmlSchemas, schema));
|
||||
}
|
||||
return _schemas;
|
||||
}
|
||||
|
@ -128,7 +123,7 @@ public class EdmClientImpl extends AbstractEdm {
|
|||
if (schema != null) {
|
||||
final EnumType xmlEnumType = schema.getEnumType(enumName.getName());
|
||||
if (xmlEnumType != null) {
|
||||
result = new EdmEnumTypeImpl(version, this, enumName, xmlEnumType);
|
||||
result = new EdmEnumTypeImpl(this, enumName, xmlEnumType);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -144,7 +139,7 @@ public class EdmClientImpl extends AbstractEdm {
|
|||
final TypeDefinition xmlTypeDefinition = ((Schema) schema).
|
||||
getTypeDefinition(typeDefinitionName.getName());
|
||||
if (xmlTypeDefinition != null) {
|
||||
result = new EdmTypeDefinitionImpl(version, this, typeDefinitionName, xmlTypeDefinition);
|
||||
result = new EdmTypeDefinitionImpl(this, typeDefinitionName, xmlTypeDefinition);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -34,7 +34,6 @@ import org.apache.olingo.commons.api.edm.EdmMember;
|
|||
import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
|
||||
import org.apache.olingo.commons.api.edm.FullQualifiedName;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.core.edm.AbstractEdmEnumType;
|
||||
import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
|
||||
|
||||
|
@ -54,7 +53,7 @@ public class EdmEnumTypeImpl extends AbstractEdmEnumType {
|
|||
|
||||
private final Map<String, EdmMember> members;
|
||||
|
||||
public EdmEnumTypeImpl(final ODataServiceVersion version, final Edm edm, final FullQualifiedName fqn,
|
||||
public EdmEnumTypeImpl(final Edm edm, final FullQualifiedName fqn,
|
||||
final EnumType xmlEnumType) {
|
||||
|
||||
super(edm, fqn, xmlEnumType.isFlags());
|
||||
|
@ -63,7 +62,7 @@ public class EdmEnumTypeImpl extends AbstractEdmEnumType {
|
|||
this.underlyingType = EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Int32);
|
||||
} else {
|
||||
final EdmPrimitiveTypeKind underlyingTipeKind =
|
||||
EdmPrimitiveTypeKind.valueOfFQN(version, xmlEnumType.getUnderlyingType());
|
||||
EdmPrimitiveTypeKind.valueOfFQN(xmlEnumType.getUnderlyingType());
|
||||
if (!ArrayUtils.contains(VALID_UNDERLYING_TYPES, underlyingTipeKind)) {
|
||||
throw new EdmException("Not allowed as underlying type: " + underlyingTipeKind);
|
||||
}
|
||||
|
|
|
@ -46,12 +46,10 @@ import org.apache.olingo.commons.api.edm.EdmFunction;
|
|||
import org.apache.olingo.commons.api.edm.EdmTerm;
|
||||
import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
|
||||
import org.apache.olingo.commons.api.edm.FullQualifiedName;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.core.edm.AbstractEdmSchema;
|
||||
|
||||
public class EdmSchemaImpl extends AbstractEdmSchema {
|
||||
|
||||
private final ODataServiceVersion version;
|
||||
|
||||
private final Edm edm;
|
||||
|
||||
|
@ -63,12 +61,10 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
|
|||
|
||||
private List<EdmEntityContainer> entityContainers;
|
||||
|
||||
public EdmSchemaImpl(final ODataServiceVersion version, final Edm edm,
|
||||
final List<Schema> xmlSchemas, final Schema schema) {
|
||||
public EdmSchemaImpl(final Edm edm, final List<Schema> xmlSchemas, final Schema schema) {
|
||||
|
||||
super(schema.getNamespace(), schema.getAlias());
|
||||
|
||||
this.version = version;
|
||||
this.edm = edm;
|
||||
this.xmlSchemas = xmlSchemas;
|
||||
this.schema = schema;
|
||||
|
@ -133,7 +129,7 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
|
|||
if (providerTypeDefinitions != null) {
|
||||
for (TypeDefinition def : providerTypeDefinitions) {
|
||||
typeDefinitions.add(
|
||||
new EdmTypeDefinitionImpl(version, edm, new FullQualifiedName(namespace, def.getName()), def));
|
||||
new EdmTypeDefinitionImpl(edm, new FullQualifiedName(namespace, def.getName()), def));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -147,7 +143,7 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
|
|||
if (providerEnumTypes != null) {
|
||||
for (EnumType enumType : providerEnumTypes) {
|
||||
enumTypes.add(
|
||||
new EdmEnumTypeImpl(version, edm, new FullQualifiedName(namespace, enumType.getName()), enumType));
|
||||
new EdmEnumTypeImpl(edm, new FullQualifiedName(namespace, enumType.getName()), enumType));
|
||||
}
|
||||
}
|
||||
return enumTypes;
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
/*
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
@ -28,7 +28,6 @@ import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
|
|||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
|
||||
import org.apache.olingo.commons.api.edm.EdmTerm;
|
||||
import org.apache.olingo.commons.api.edm.FullQualifiedName;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.api.edm.geo.SRID;
|
||||
import org.apache.olingo.commons.core.edm.AbstractEdmTypeDefinition;
|
||||
import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
|
||||
|
@ -42,14 +41,14 @@ public class EdmTypeDefinitionImpl extends AbstractEdmTypeDefinition {
|
|||
|
||||
private final EdmAnnotationHelper helper;
|
||||
|
||||
public EdmTypeDefinitionImpl(final ODataServiceVersion version, final Edm edm,
|
||||
final FullQualifiedName typeDefinitionName, final TypeDefinition typeDefinition) {
|
||||
public EdmTypeDefinitionImpl(final Edm edm, final FullQualifiedName typeDefinitionName,
|
||||
final TypeDefinition typeDefinition) {
|
||||
|
||||
super(edm, typeDefinitionName);
|
||||
this.typeDefinition = typeDefinition;
|
||||
try {
|
||||
this.edmPrimitiveTypeInstance = EdmPrimitiveTypeFactory.getInstance(
|
||||
EdmPrimitiveTypeKind.valueOfFQN(version, typeDefinition.getUnderlyingType()));
|
||||
EdmPrimitiveTypeKind.valueOfFQN(typeDefinition.getUnderlyingType()));
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new EdmException("Invalid underlying type: " + typeDefinition.getUnderlyingType(), e);
|
||||
}
|
||||
|
|
|
@ -58,20 +58,16 @@ import com.fasterxml.jackson.dataformat.xml.XmlMapper;
|
|||
|
||||
public class ClientODataDeserializerImpl implements ClientODataDeserializer {
|
||||
|
||||
private final ODataServiceVersion version;
|
||||
|
||||
private final ODataDeserializer deserializer;
|
||||
|
||||
private final ODataFormat format;
|
||||
|
||||
public ClientODataDeserializerImpl(final ODataServiceVersion version, final boolean serverMode,
|
||||
final ODataFormat format) {
|
||||
this.version = version;
|
||||
public ClientODataDeserializerImpl(final boolean serverMode, final ODataFormat format) {
|
||||
this.format = format;
|
||||
if (format == ODataFormat.XML || format == ODataFormat.ATOM) {
|
||||
deserializer = new AtomDeserializer(version);
|
||||
deserializer = new AtomDeserializer();
|
||||
} else {
|
||||
deserializer = new JsonDeserializer(version, serverMode);
|
||||
deserializer = new JsonDeserializer(serverMode);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -96,7 +92,7 @@ public class ClientODataDeserializerImpl implements ClientODataDeserializer {
|
|||
new XmlFactory(new InputFactoryImpl(), new OutputFactoryImpl()), new JacksonXmlModule());
|
||||
|
||||
xmlMapper.setInjectableValues(new InjectableValues.Std().
|
||||
addValue(ODataServiceVersion.class, version).
|
||||
addValue(ODataServiceVersion.class, ODataServiceVersion.V40).
|
||||
addValue(Boolean.class, Boolean.FALSE));
|
||||
|
||||
xmlMapper.addHandler(new DeserializationProblemHandler() {
|
||||
|
@ -126,16 +122,16 @@ public class ClientODataDeserializerImpl implements ClientODataDeserializer {
|
|||
@Override
|
||||
public ResWrap<ServiceDocument> toServiceDocument(final InputStream input) throws ODataDeserializerException {
|
||||
return format == ODataFormat.XML ?
|
||||
new XMLServiceDocumentDeserializer(version, false).toServiceDocument(input) :
|
||||
new JSONServiceDocumentDeserializer(version, false).toServiceDocument(input);
|
||||
new XMLServiceDocumentDeserializer(false).toServiceDocument(input) :
|
||||
new JSONServiceDocumentDeserializer(false).toServiceDocument(input);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResWrap<Delta> toDelta(final InputStream input) throws ODataDeserializerException {
|
||||
try {
|
||||
return format == ODataFormat.ATOM ?
|
||||
new AtomDeserializer(version).delta(input) :
|
||||
new JsonDeltaDeserializer(version, false).toDelta(input);
|
||||
new AtomDeserializer().delta(input) :
|
||||
new JsonDeltaDeserializer(false).toDelta(input);
|
||||
} catch (XMLStreamException e) {
|
||||
throw new ODataDeserializerException(e);
|
||||
} catch (final EdmPrimitiveTypeException e) {
|
||||
|
|
|
@ -355,7 +355,7 @@ public class ODataBinderImpl implements ODataBinder {
|
|||
annotations(value.asComplex(), lcValueResource);
|
||||
links(value.asComplex(), lcValueResource);
|
||||
valueResource = lcValueResource;
|
||||
|
||||
|
||||
} else if (value.isCollection()) {
|
||||
final ODataCollectionValue<? extends ODataValue> _value = value.asCollection();
|
||||
ArrayList<Object> lcValueResource = new ArrayList<Object>();
|
||||
|
@ -450,7 +450,7 @@ public class ODataBinderImpl implements ODataBinder {
|
|||
if (linkType == null) {
|
||||
linkType = link.getType() == null ?
|
||||
ODataLinkType.ENTITY_NAVIGATION :
|
||||
ODataLinkType.fromString(client.getServiceVersion(), link.getRel(), link.getType());
|
||||
ODataLinkType.fromString(link.getRel(), link.getType());
|
||||
}
|
||||
|
||||
odataLinked.addLink(linkType == ODataLinkType.ENTITY_NAVIGATION ?
|
||||
|
@ -474,7 +474,7 @@ public class ODataBinderImpl implements ODataBinder {
|
|||
|
||||
private ODataInlineEntity createODataInlineEntity(final Entity inlineEntity,
|
||||
final URI uri, final String title, final String metadataETag) {
|
||||
return new ODataInlineEntity(client.getServiceVersion(), uri, ODataLinkType.ENTITY_NAVIGATION, title,
|
||||
return new ODataInlineEntity(uri, ODataLinkType.ENTITY_NAVIGATION, title,
|
||||
getODataEntity(new ResWrap<Entity>(
|
||||
inlineEntity.getBaseURI() == null ? null : inlineEntity.getBaseURI(), metadataETag,
|
||||
inlineEntity)));
|
||||
|
@ -482,7 +482,7 @@ public class ODataBinderImpl implements ODataBinder {
|
|||
|
||||
private ODataInlineEntitySet createODataInlineEntitySet(final EntitySet inlineEntitySet,
|
||||
final URI uri, final String title, final String metadataETag) {
|
||||
return new ODataInlineEntitySet(client.getServiceVersion(), uri, ODataLinkType.ENTITY_SET_NAVIGATION, title,
|
||||
return new ODataInlineEntitySet(uri, ODataLinkType.ENTITY_SET_NAVIGATION, title,
|
||||
getODataEntitySet(new ResWrap<EntitySet>(
|
||||
inlineEntitySet.getBaseURI() == null ? null : inlineEntitySet.getBaseURI(), metadataETag,
|
||||
inlineEntitySet)));
|
||||
|
@ -777,7 +777,7 @@ public class ODataBinderImpl implements ODataBinder {
|
|||
|| EdmPrimitiveTypeKind.Geography.getFullQualifiedName().equals(type)
|
||||
|| EdmPrimitiveTypeKind.Geometry.getFullQualifiedName().equals(type)
|
||||
? valuable.asGeospatial().getEdmPrimitiveTypeKind()
|
||||
: EdmPrimitiveTypeKind.valueOfFQN(client.getServiceVersion(), type.toString())).
|
||||
: EdmPrimitiveTypeKind.valueOfFQN(type.toString())).
|
||||
build();
|
||||
} else if (valuable.isPrimitive() || valuable.getValueType() == null) {
|
||||
// fixes non-string values treated as string when no type information is available at de-serialization level
|
||||
|
@ -803,7 +803,7 @@ public class ODataBinderImpl implements ODataBinder {
|
|||
setValue(valuable.asPrimitive()).
|
||||
setType(type == null || !EdmPrimitiveType.EDM_NAMESPACE.equals(type.getNamespace())
|
||||
? null
|
||||
: EdmPrimitiveTypeKind.valueOfFQN(client.getServiceVersion(), type.toString())).
|
||||
: EdmPrimitiveTypeKind.valueOfFQN(type.toString())).
|
||||
build();
|
||||
} else if (valuable.isComplex()) {
|
||||
final ODataComplexValue cValue = (ODataComplexValue) client.getObjectFactory().
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
@ -67,18 +67,18 @@ public class ODataReaderImpl implements ODataReader {
|
|||
|
||||
@Override
|
||||
public Edm readMetadata(final Map<String, Schema> xmlSchemas) {
|
||||
return new EdmClientImpl(client.getServiceVersion(), xmlSchemas);
|
||||
return new EdmClientImpl(xmlSchemas);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ODataServiceDocument readServiceDocument(final InputStream input, final ODataFormat format)
|
||||
throws ODataDeserializerException {
|
||||
return client.getBinder().getODataServiceDocument(
|
||||
client.getDeserializer(format).toServiceDocument(input).getPayload());
|
||||
client.getDeserializer(format).toServiceDocument(input).getPayload());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ODataError readError(final InputStream inputStream, final ODataFormat format )
|
||||
public ODataError readError(final InputStream inputStream, final ODataFormat format)
|
||||
throws ODataDeserializerException {
|
||||
return client.getDeserializer(format).toError(inputStream);
|
||||
}
|
||||
|
@ -91,55 +91,55 @@ public class ODataReaderImpl implements ODataReader {
|
|||
try {
|
||||
if (ODataEntitySetIterator.class.isAssignableFrom(reference)) {
|
||||
res = new ResWrap<T>(
|
||||
(URI) null,
|
||||
null,
|
||||
reference.cast(new ODataEntitySetIterator<ODataEntitySet, ODataEntity>(
|
||||
client, src, ODataFormat.fromString(format))));
|
||||
(URI) null,
|
||||
null,
|
||||
reference.cast(new ODataEntitySetIterator<ODataEntitySet, ODataEntity>(
|
||||
client, src, ODataFormat.fromString(format))));
|
||||
} else if (ODataEntitySet.class.isAssignableFrom(reference)) {
|
||||
final ResWrap<EntitySet> resource = client.getDeserializer(ODataFormat.fromString(format))
|
||||
.toEntitySet(src);
|
||||
res = new ResWrap<T>(
|
||||
resource.getContextURL(),
|
||||
resource.getMetadataETag(),
|
||||
reference.cast(client.getBinder().getODataEntitySet(resource)));
|
||||
resource.getContextURL(),
|
||||
resource.getMetadataETag(),
|
||||
reference.cast(client.getBinder().getODataEntitySet(resource)));
|
||||
} else if (ODataEntity.class.isAssignableFrom(reference)) {
|
||||
final ResWrap<Entity> container = client.getDeserializer(ODataFormat.fromString(format)).toEntity(src);
|
||||
res = new ResWrap<T>(
|
||||
container.getContextURL(),
|
||||
container.getMetadataETag(),
|
||||
reference.cast(client.getBinder().getODataEntity(container)));
|
||||
container.getContextURL(),
|
||||
container.getMetadataETag(),
|
||||
reference.cast(client.getBinder().getODataEntity(container)));
|
||||
} else if (ODataProperty.class.isAssignableFrom(reference)) {
|
||||
final ResWrap<Property> container = client.getDeserializer(ODataFormat.fromString(format)).toProperty(src);
|
||||
res = new ResWrap<T>(
|
||||
container.getContextURL(),
|
||||
container.getMetadataETag(),
|
||||
reference.cast(client.getBinder().getODataProperty(container)));
|
||||
container.getContextURL(),
|
||||
container.getMetadataETag(),
|
||||
reference.cast(client.getBinder().getODataProperty(container)));
|
||||
} else if (ODataValue.class.isAssignableFrom(reference)) {
|
||||
res = new ResWrap<T>(
|
||||
(URI) null,
|
||||
null,
|
||||
reference.cast(client.getObjectFactory().newPrimitiveValueBuilder().
|
||||
setType(ODataFormat.fromString(format) == ODataFormat.TEXT_PLAIN
|
||||
? EdmPrimitiveTypeKind.String : EdmPrimitiveTypeKind.Stream).
|
||||
setValue(IOUtils.toString(src)) // TODO: set correct value
|
||||
.build()));
|
||||
(URI) null,
|
||||
null,
|
||||
reference.cast(client.getObjectFactory().newPrimitiveValueBuilder().
|
||||
setType(ODataFormat.fromString(format) == ODataFormat.TEXT_PLAIN
|
||||
? EdmPrimitiveTypeKind.String : EdmPrimitiveTypeKind.Stream).
|
||||
setValue(IOUtils.toString(src)) // TODO: set correct value
|
||||
.build()));
|
||||
} else if (XMLMetadata.class.isAssignableFrom(reference)) {
|
||||
res = new ResWrap<T>(
|
||||
(URI) null,
|
||||
null,
|
||||
reference.cast(readMetadata(src)));
|
||||
(URI) null,
|
||||
null,
|
||||
reference.cast(readMetadata(src)));
|
||||
} else if (ODataServiceDocument.class.isAssignableFrom(reference)) {
|
||||
final ResWrap<ServiceDocument> resource =
|
||||
client.getDeserializer(ODataFormat.fromString(format)).toServiceDocument(src);
|
||||
client.getDeserializer(ODataFormat.fromString(format)).toServiceDocument(src);
|
||||
res = new ResWrap<T>(
|
||||
resource.getContextURL(),
|
||||
resource.getMetadataETag(),
|
||||
reference.cast(client.getBinder().getODataServiceDocument(resource.getPayload())));
|
||||
resource.getContextURL(),
|
||||
resource.getMetadataETag(),
|
||||
reference.cast(client.getBinder().getODataServiceDocument(resource.getPayload())));
|
||||
} else if (ODataError.class.isAssignableFrom(reference)) {
|
||||
res = new ResWrap<T>(
|
||||
(URI) null,
|
||||
null,
|
||||
reference.cast(readError(src, ODataFormat.fromString(format))));
|
||||
(URI) null,
|
||||
null,
|
||||
reference.cast(readError(src, ODataFormat.fromString(format))));
|
||||
} else {
|
||||
throw new IllegalArgumentException("Invalid reference type " + reference);
|
||||
}
|
||||
|
@ -154,6 +154,7 @@ public class ODataReaderImpl implements ODataReader {
|
|||
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ODataEntitySet readEntitySet(final InputStream input, final ODataFormat format)
|
||||
throws ODataDeserializerException {
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
@ -51,8 +51,8 @@ public class URIEscapeTest {
|
|||
|
||||
@Test
|
||||
public void _enum() throws UnsupportedEncodingException {
|
||||
final EdmEnumType pattern = new EdmEnumTypeImpl(ODataServiceVersion.V40,
|
||||
null, new FullQualifiedName("Sales", "Pattern"), new EnumTypeImpl());
|
||||
final EdmEnumType pattern =
|
||||
new EdmEnumTypeImpl(null, new FullQualifiedName("Sales", "Pattern"), new EnumTypeImpl());
|
||||
|
||||
assertEquals("Sales.Pattern'Yellow'", URIUtils.escape(ODataServiceVersion.V40, pattern.toUriLiteral("Yellow")));
|
||||
}
|
||||
|
@ -63,8 +63,8 @@ public class URIEscapeTest {
|
|||
calendar.clear();
|
||||
calendar.set(2014, 6, 11, 12, 30, 04);
|
||||
|
||||
assertEquals(URLEncoder.encode("2014-07-11T12:30:04+01:00", Constants.UTF8),
|
||||
URIUtils.escape(ODataServiceVersion.V40, calendar));
|
||||
assertEquals(URLEncoder.encode("2014-07-11T12:30:04+01:00", Constants.UTF8),
|
||||
URIUtils.escape(ODataServiceVersion.V40, calendar));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -74,18 +74,18 @@ public class URIEscapeTest {
|
|||
point.setY(64.1);
|
||||
|
||||
assertEquals(URLEncoder.encode("geography'SRID=4326;Point(142.1 64.1)'", Constants.UTF8),
|
||||
URIUtils.escape(ODataServiceVersion.V40, point));
|
||||
URIUtils.escape(ODataServiceVersion.V40, point));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void collection() {
|
||||
assertEquals("[\"red\",\"green\"]",
|
||||
URIUtils.escape(ODataServiceVersion.V40, Arrays.asList(new String[] {"red", "green"})));
|
||||
URIUtils.escape(ODataServiceVersion.V40, Arrays.asList(new String[] { "red", "green" })));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void complex() {
|
||||
assertEquals("{\"Name\":\"Value\"}",
|
||||
URIUtils.escape(ODataServiceVersion.V40, Collections.singletonMap("Name", "Value")));
|
||||
URIUtils.escape(ODataServiceVersion.V40, Collections.singletonMap("Name", "Value")));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,23 +1,30 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.olingo.client.core.uri.v4;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.Calendar;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import org.apache.olingo.client.api.ODataClient;
|
||||
import org.apache.olingo.client.api.uri.FilterArgFactory;
|
||||
import org.apache.olingo.client.api.uri.FilterFactory;
|
||||
|
@ -28,16 +35,8 @@ import org.apache.olingo.client.core.edm.xml.EnumTypeImpl;
|
|||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.edm.EdmEnumType;
|
||||
import org.apache.olingo.commons.api.edm.FullQualifiedName;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.Calendar;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class FilterFactoryTest extends AbstractTest {
|
||||
|
||||
@Override
|
||||
|
@ -55,8 +54,8 @@ public class FilterFactoryTest extends AbstractTest {
|
|||
|
||||
@Test
|
||||
public void has() {
|
||||
final EdmEnumType pattern = new EdmEnumTypeImpl(ODataServiceVersion.V40,
|
||||
null, new FullQualifiedName("Sales", "Pattern"), new EnumTypeImpl());
|
||||
final EdmEnumType pattern =
|
||||
new EdmEnumTypeImpl(null, new FullQualifiedName("Sales", "Pattern"), new EnumTypeImpl());
|
||||
final URIFilter filter = getFilterFactory().has(getFilterArgFactory().property("style"), pattern, "Yellow");
|
||||
|
||||
assertEquals("(style has Sales.Pattern'Yellow')", filter.build());
|
||||
|
@ -65,7 +64,7 @@ public class FilterFactoryTest extends AbstractTest {
|
|||
@Test
|
||||
public void contains() {
|
||||
final URIFilter filter = getFilterFactory().match(getFilterArgFactory().contains(
|
||||
getFilterArgFactory().property("CompanyName"), getFilterArgFactory().literal("Alfreds")));
|
||||
getFilterArgFactory().property("CompanyName"), getFilterArgFactory().literal("Alfreds")));
|
||||
|
||||
assertEquals("contains(CompanyName,'Alfreds')", filter.build());
|
||||
}
|
||||
|
@ -73,8 +72,8 @@ public class FilterFactoryTest extends AbstractTest {
|
|||
@Test
|
||||
public void maxdatetime() {
|
||||
final URIFilter filter = getFilterFactory().eq(
|
||||
getFilterArgFactory().property("EndTime"),
|
||||
getFilterArgFactory().maxdatetime());
|
||||
getFilterArgFactory().property("EndTime"),
|
||||
getFilterArgFactory().maxdatetime());
|
||||
|
||||
assertEquals("(EndTime eq maxdatetime())", filter.build());
|
||||
}
|
||||
|
@ -82,8 +81,8 @@ public class FilterFactoryTest extends AbstractTest {
|
|||
@Test
|
||||
public void any() {
|
||||
final URIFilter filter = getFilterFactory().match(
|
||||
getFilterArgFactory().any(getFilterArgFactory().property("Items"),
|
||||
getFilterFactory().gt("d:d/Quantity", 100)));
|
||||
getFilterArgFactory().any(getFilterArgFactory().property("Items"),
|
||||
getFilterFactory().gt("d:d/Quantity", 100)));
|
||||
|
||||
assertEquals("Items/any(d:d/Quantity gt 100)", filter.build());
|
||||
}
|
||||
|
@ -96,7 +95,7 @@ public class FilterFactoryTest extends AbstractTest {
|
|||
|
||||
final URIFilter filter = getFilterFactory().ge("OrderDate", calendar);
|
||||
assertEquals("(OrderDate ge " + URLEncoder.encode("2011-03-08T14:21:12-08:00", Constants.UTF8) + ")",
|
||||
filter.build());
|
||||
filter.build());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
@ -40,7 +40,6 @@ import org.apache.olingo.commons.api.domain.ODataComplexValue;
|
|||
import org.apache.olingo.commons.api.domain.ODataEntity;
|
||||
import org.apache.olingo.commons.api.domain.ODataValue;
|
||||
import org.apache.olingo.commons.api.edm.FullQualifiedName;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.api.format.ODataFormat;
|
||||
import org.junit.Test;
|
||||
|
||||
|
@ -66,33 +65,32 @@ public class JSONTest extends AbstractTest {
|
|||
}
|
||||
|
||||
private void cleanup(final ObjectNode node) {
|
||||
final ODataServiceVersion version = getClient().getServiceVersion();
|
||||
if (node.has(Constants.JSON_CONTEXT)) {
|
||||
node.remove(Constants.JSON_CONTEXT);
|
||||
}
|
||||
if (node.has(version.getJsonName(ODataServiceVersion.JsonKey.ETAG))) {
|
||||
node.remove(version.getJsonName(ODataServiceVersion.JsonKey.ETAG));
|
||||
if (node.has(Constants.JSON_ETAG)) {
|
||||
node.remove(Constants.JSON_ETAG);
|
||||
}
|
||||
if (node.has(version.getJsonName(ODataServiceVersion.JsonKey.TYPE))) {
|
||||
node.remove(version.getJsonName(ODataServiceVersion.JsonKey.TYPE));
|
||||
if (node.has(Constants.JSON_TYPE)) {
|
||||
node.remove(Constants.JSON_TYPE);
|
||||
}
|
||||
if (node.has(version.getJsonName(ODataServiceVersion.JsonKey.EDIT_LINK))) {
|
||||
node.remove(version.getJsonName(ODataServiceVersion.JsonKey.EDIT_LINK));
|
||||
if (node.has(Constants.JSON_EDIT_LINK)) {
|
||||
node.remove(Constants.JSON_EDIT_LINK);
|
||||
}
|
||||
if (node.has(version.getJsonName(ODataServiceVersion.JsonKey.READ_LINK))) {
|
||||
node.remove(version.getJsonName(ODataServiceVersion.JsonKey.READ_LINK));
|
||||
if (node.has(Constants.JSON_READ_LINK)) {
|
||||
node.remove(Constants.JSON_READ_LINK);
|
||||
}
|
||||
if (node.has(version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_EDIT_LINK))) {
|
||||
node.remove(version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_EDIT_LINK));
|
||||
if (node.has(Constants.JSON_MEDIA_EDIT_LINK)) {
|
||||
node.remove(Constants.JSON_MEDIA_EDIT_LINK);
|
||||
}
|
||||
if (node.has(version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_READ_LINK))) {
|
||||
node.remove(version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_READ_LINK));
|
||||
if (node.has(Constants.JSON_MEDIA_READ_LINK)) {
|
||||
node.remove(Constants.JSON_MEDIA_READ_LINK);
|
||||
}
|
||||
if (node.has(version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_CONTENT_TYPE))) {
|
||||
node.remove(version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_CONTENT_TYPE));
|
||||
if (node.has(Constants.JSON_MEDIA_CONTENT_TYPE)) {
|
||||
node.remove(Constants.JSON_MEDIA_CONTENT_TYPE);
|
||||
}
|
||||
if (node.has(version.getJsonName(ODataServiceVersion.JsonKey.COUNT))) {
|
||||
node.remove(version.getJsonName(ODataServiceVersion.JsonKey.COUNT));
|
||||
if (node.has(Constants.JSON_COUNT)) {
|
||||
node.remove(Constants.JSON_COUNT);
|
||||
}
|
||||
final List<String> toRemove = new ArrayList<String>();
|
||||
for (final Iterator<Map.Entry<String, JsonNode>> itor = node.fields(); itor.hasNext();) {
|
||||
|
@ -100,11 +98,11 @@ public class JSONTest extends AbstractTest {
|
|||
|
||||
final String key = field.getKey();
|
||||
if (key.charAt(0) == '#'
|
||||
|| key.endsWith(version.getJsonName(ODataServiceVersion.JsonKey.TYPE))
|
||||
|| key.endsWith(version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_EDIT_LINK))
|
||||
|| key.endsWith(version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_CONTENT_TYPE))
|
||||
|| key.endsWith(version.getJsonName(ODataServiceVersion.JsonKey.ASSOCIATION_LINK))
|
||||
|| key.endsWith(version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_ETAG))) {
|
||||
|| key.endsWith(Constants.JSON_TYPE)
|
||||
|| key.endsWith(Constants.JSON_MEDIA_EDIT_LINK)
|
||||
|| key.endsWith(Constants.JSON_MEDIA_CONTENT_TYPE)
|
||||
|| key.endsWith(Constants.JSON_ASSOCIATION_LINK)
|
||||
|| key.endsWith(Constants.JSON_MEDIA_ETAG)) {
|
||||
|
||||
toRemove.add(key);
|
||||
} else if (field.getValue().isObject()) {
|
||||
|
@ -123,8 +121,7 @@ public class JSONTest extends AbstractTest {
|
|||
|
||||
protected void assertSimilar(final String filename, final String actual) throws Exception {
|
||||
final JsonNode expected = OBJECT_MAPPER.readTree(IOUtils.toString(getClass().getResourceAsStream(filename)).
|
||||
replace(getClient().getServiceVersion().getJsonName(ODataServiceVersion.JsonKey.NAVIGATION_LINK),
|
||||
Constants.JSON_BIND_LINK_SUFFIX));
|
||||
replace(Constants.JSON_NAVIGATION_LINK, Constants.JSON_BIND_LINK_SUFFIX));
|
||||
cleanup((ObjectNode) expected);
|
||||
final ObjectNode actualNode = (ObjectNode) OBJECT_MAPPER.readTree(new ByteArrayInputStream(actual.getBytes()));
|
||||
cleanup(actualNode);
|
||||
|
@ -134,7 +131,7 @@ public class JSONTest extends AbstractTest {
|
|||
protected void entitySet(final String filename, final ODataFormat format) throws Exception {
|
||||
final StringWriter writer = new StringWriter();
|
||||
getClient().getSerializer(format).write(writer, getClient().getDeserializer(format).toEntitySet(
|
||||
getClass().getResourceAsStream(filename + "." + getSuffix(format))).getPayload());
|
||||
getClass().getResourceAsStream(filename + "." + getSuffix(format))).getPayload());
|
||||
|
||||
assertSimilar(filename + "." + getSuffix(format), writer.toString());
|
||||
}
|
||||
|
@ -148,7 +145,7 @@ public class JSONTest extends AbstractTest {
|
|||
protected void entity(final String filename, final ODataFormat format) throws Exception {
|
||||
final StringWriter writer = new StringWriter();
|
||||
getClient().getSerializer(format).write(writer, getClient().getDeserializer(format).toEntity(
|
||||
getClass().getResourceAsStream(filename + "." + getSuffix(format))).getPayload());
|
||||
getClass().getResourceAsStream(filename + "." + getSuffix(format))).getPayload());
|
||||
|
||||
assertSimilar(filename + "." + getSuffix(format), writer.toString());
|
||||
}
|
||||
|
@ -175,7 +172,7 @@ public class JSONTest extends AbstractTest {
|
|||
protected void property(final String filename, final ODataFormat format) throws Exception {
|
||||
final StringWriter writer = new StringWriter();
|
||||
getClient().getSerializer(format).write(writer, getClient().getDeserializer(format).
|
||||
toProperty(getClass().getResourceAsStream(filename + "." + getSuffix(format))).getPayload());
|
||||
toProperty(getClass().getResourceAsStream(filename + "." + getSuffix(format))).getPayload());
|
||||
|
||||
assertSimilar(filename + "." + getSuffix(format), writer.toString());
|
||||
}
|
||||
|
@ -191,12 +188,12 @@ public class JSONTest extends AbstractTest {
|
|||
@Test
|
||||
public void crossjoin() throws Exception {
|
||||
assertNotNull(getClient().getDeserializer(ODataFormat.JSON_FULL_METADATA).toEntitySet(
|
||||
getClass().getResourceAsStream("crossjoin.json")));
|
||||
getClass().getResourceAsStream("crossjoin.json")));
|
||||
}
|
||||
|
||||
protected void delta(final String filename, final ODataFormat format) throws Exception {
|
||||
final Delta delta = getClient().getDeserializer(format).toDelta(
|
||||
getClass().getResourceAsStream(filename + "." + getSuffix(format))).getPayload();
|
||||
getClass().getResourceAsStream(filename + "." + getSuffix(format))).getPayload();
|
||||
assertNotNull(delta);
|
||||
assertNotNull(delta.getDeltaLink());
|
||||
assertEquals(5, delta.getCount(), 0);
|
||||
|
@ -229,32 +226,32 @@ public class JSONTest extends AbstractTest {
|
|||
@Test
|
||||
public void issueOLINGO390() throws Exception {
|
||||
final ODataEntity message = getClient().getObjectFactory().
|
||||
newEntity(new FullQualifiedName("Microsoft.Exchange.Services.OData.Model.Message"));
|
||||
newEntity(new FullQualifiedName("Microsoft.Exchange.Services.OData.Model.Message"));
|
||||
|
||||
final ODataComplexValue toRecipient = getClient().getObjectFactory().
|
||||
newComplexValue("Microsoft.Exchange.Services.OData.Model.Recipient");
|
||||
newComplexValue("Microsoft.Exchange.Services.OData.Model.Recipient");
|
||||
toRecipient.add(getClient().getObjectFactory().newPrimitiveProperty("Name",
|
||||
getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("challen_olingo_client")));
|
||||
getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("challen_olingo_client")));
|
||||
toRecipient.add(getClient().getObjectFactory().newPrimitiveProperty("Address",
|
||||
getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("challenh@microsoft.com")));
|
||||
getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("challenh@microsoft.com")));
|
||||
final ODataCollectionValue<ODataValue> toRecipients = getClient().getObjectFactory().
|
||||
newCollectionValue("Microsoft.Exchange.Services.OData.Model.Recipient");
|
||||
newCollectionValue("Microsoft.Exchange.Services.OData.Model.Recipient");
|
||||
toRecipients.add(toRecipient);
|
||||
message.getProperties().add(getClient().getObjectFactory().newCollectionProperty("ToRecipients", toRecipients));
|
||||
|
||||
final ODataComplexValue body =
|
||||
getClient().getObjectFactory().newComplexValue("Microsoft.Exchange.Services.OData.Model.ItemBody");
|
||||
getClient().getObjectFactory().newComplexValue("Microsoft.Exchange.Services.OData.Model.ItemBody");
|
||||
body.add(getClient().getObjectFactory().newPrimitiveProperty("Content",
|
||||
getClient().getObjectFactory().newPrimitiveValueBuilder().
|
||||
getClient().getObjectFactory().newPrimitiveValueBuilder().
|
||||
buildString("this is a simple email body content")));
|
||||
body.add(getClient().getObjectFactory().newEnumProperty("ContentType",
|
||||
getClient().getObjectFactory().newEnumValue("Microsoft.Exchange.Services.OData.Model.BodyType", "text")));
|
||||
getClient().getObjectFactory().newEnumValue("Microsoft.Exchange.Services.OData.Model.BodyType", "text")));
|
||||
message.getProperties().add(getClient().getObjectFactory().newComplexProperty("Body", body));
|
||||
|
||||
final String actual = IOUtils.toString(getClient().getWriter().writeEntity(message, ODataFormat.JSON));
|
||||
final JsonNode expected = OBJECT_MAPPER.readTree(IOUtils.toString(getClass().getResourceAsStream("olingo390.json")).
|
||||
replace(getClient().getServiceVersion().getJsonName(ODataServiceVersion.JsonKey.NAVIGATION_LINK),
|
||||
Constants.JSON_BIND_LINK_SUFFIX));
|
||||
final JsonNode expected =
|
||||
OBJECT_MAPPER.readTree(IOUtils.toString(getClass().getResourceAsStream("olingo390.json")).
|
||||
replace(Constants.JSON_NAVIGATION_LINK, Constants.JSON_BIND_LINK_SUFFIX));
|
||||
final ObjectNode actualNode = (ObjectNode) OBJECT_MAPPER.readTree(new ByteArrayInputStream(actual.getBytes()));
|
||||
assertEquals(expected, actualNode);
|
||||
}
|
||||
|
|
|
@ -34,6 +34,23 @@ public interface Constants {
|
|||
public final static Integer DEFAULT_PRECISION = 40;
|
||||
|
||||
public final static Integer DEFAULT_SCALE = 25;
|
||||
|
||||
// Common Namespaces
|
||||
public final static String NS_BASE = "http://docs.oasis-open.org/odata/ns/";
|
||||
|
||||
public final static String NS_DATASERVICES = "http://docs.oasis-open.org/odata/ns/data";
|
||||
|
||||
public final static String NS_METADATA = "http://docs.oasis-open.org/odata/ns/metadata";
|
||||
|
||||
public final static String NS_SCHEME = "http://docs.oasis-open.org/odata/ns/scheme";
|
||||
|
||||
public final static String NS_NAVIGATION_LINK_REL = "http://docs.oasis-open.org/odata/ns/related/";
|
||||
|
||||
public final static String NS_ASSOCIATION_LINK_REL = "http://docs.oasis-open.org/odata/ns/relatedlinks/";
|
||||
|
||||
public final static String NS_MEDIA_EDIT_LINK_REL = "http://docs.oasis-open.org/odata/ns/edit-media/";
|
||||
|
||||
public final static String NS_DELTA_LINK_REL = "http://docs.oasis-open.org/odata/ns/delta";
|
||||
|
||||
// XML namespaces and prefixes
|
||||
public final static String NS_ATOM = "http://www.w3.org/2005/Atom";
|
||||
|
@ -54,6 +71,7 @@ public interface Constants {
|
|||
|
||||
public final static String SRS_URLPREFIX = "http://www.opengis.net/def/crs/EPSG/0/";
|
||||
|
||||
|
||||
// Link rel(s)
|
||||
public static final String EDIT_LINK_REL = "edit";
|
||||
|
||||
|
|
|
@ -18,8 +18,6 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.api.domain;
|
||||
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
/**
|
||||
|
@ -38,10 +36,9 @@ public class ODataInlineEntity extends ODataLink {
|
|||
* @param title title.
|
||||
* @param entity entity.
|
||||
*/
|
||||
public ODataInlineEntity(final ODataServiceVersion version,
|
||||
final URI uri, final ODataLinkType type, final String title, final ODataEntity entity) {
|
||||
public ODataInlineEntity(final URI uri, final ODataLinkType type, final String title, final ODataEntity entity) {
|
||||
|
||||
super(version, uri, type, title);
|
||||
super(uri, type, title);
|
||||
this.entity = entity;
|
||||
}
|
||||
|
||||
|
@ -55,10 +52,10 @@ public class ODataInlineEntity extends ODataLink {
|
|||
* @param title title.
|
||||
* @param entity entity.
|
||||
*/
|
||||
public ODataInlineEntity(final ODataServiceVersion version, final URI baseURI, final String href,
|
||||
final ODataLinkType type, final String title, final ODataEntity entity) {
|
||||
public ODataInlineEntity(final URI baseURI, final String href, final ODataLinkType type, final String title,
|
||||
final ODataEntity entity) {
|
||||
|
||||
super(version, baseURI, href, type, title);
|
||||
super(baseURI, href, type, title);
|
||||
this.entity = entity;
|
||||
}
|
||||
|
||||
|
|
|
@ -18,8 +18,6 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.api.domain;
|
||||
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
/**
|
||||
|
@ -32,33 +30,31 @@ public class ODataInlineEntitySet extends ODataLink {
|
|||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param version OData service version.
|
||||
* @param uri edit link.
|
||||
* @param type type.
|
||||
* @param title title.
|
||||
* @param entitySet entity set.
|
||||
*/
|
||||
public ODataInlineEntitySet(final ODataServiceVersion version, final URI uri, final ODataLinkType type,
|
||||
public ODataInlineEntitySet(final URI uri, final ODataLinkType type,
|
||||
final String title, final ODataEntitySet entitySet) {
|
||||
|
||||
super(version, uri, type, title);
|
||||
super(uri, type, title);
|
||||
this.entitySet = entitySet;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param version OData service version.
|
||||
* @param baseURI base URI.
|
||||
* @param href href.
|
||||
* @param type type.
|
||||
* @param title title.
|
||||
* @param entitySet entity set.
|
||||
*/
|
||||
public ODataInlineEntitySet(final ODataServiceVersion version, final URI baseURI, final String href,
|
||||
public ODataInlineEntitySet(final URI baseURI, final String href,
|
||||
final ODataLinkType type, final String title, final ODataEntitySet entitySet) {
|
||||
|
||||
super(version, baseURI, href, type, title);
|
||||
super(baseURI, href, type, title);
|
||||
this.entitySet = entitySet;
|
||||
}
|
||||
|
||||
|
|
|
@ -22,28 +22,21 @@ import java.net.URI;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
|
||||
/**
|
||||
* OData link.
|
||||
*/
|
||||
public class ODataLink extends ODataItem implements ODataAnnotatable{
|
||||
public class ODataLink extends ODataItem implements ODataAnnotatable {
|
||||
|
||||
public static class Builder {
|
||||
|
||||
protected ODataServiceVersion version;
|
||||
|
||||
protected URI uri;
|
||||
|
||||
protected ODataLinkType type;
|
||||
|
||||
protected String title;
|
||||
|
||||
public Builder setVersion(final ODataServiceVersion version) {
|
||||
this.version = version;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setURI(final URI uri) {
|
||||
this.uri = uri;
|
||||
return this;
|
||||
|
@ -65,7 +58,7 @@ public class ODataLink extends ODataItem implements ODataAnnotatable{
|
|||
}
|
||||
|
||||
public ODataLink build() {
|
||||
return new ODataLink(version, uri, type, title);
|
||||
return new ODataLink(uri, type, title);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -108,7 +101,7 @@ public class ODataLink extends ODataItem implements ODataAnnotatable{
|
|||
protected String mediaETag;
|
||||
|
||||
private final List<ODataAnnotation> annotations = new ArrayList<ODataAnnotation>();
|
||||
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
|
@ -117,7 +110,7 @@ public class ODataLink extends ODataItem implements ODataAnnotatable{
|
|||
* @param type type.
|
||||
* @param title title.
|
||||
*/
|
||||
public ODataLink(final ODataServiceVersion version, final URI uri, final ODataLinkType type, final String title) {
|
||||
public ODataLink(final URI uri, final ODataLinkType type, final String title) {
|
||||
super(title);
|
||||
|
||||
link = uri;
|
||||
|
@ -125,17 +118,17 @@ public class ODataLink extends ODataItem implements ODataAnnotatable{
|
|||
|
||||
switch (this.type) {
|
||||
case ASSOCIATION:
|
||||
rel = version.getNamespace(ODataServiceVersion.NamespaceKey.ASSOCIATION_LINK_REL) + title;
|
||||
rel = Constants.NS_ASSOCIATION_LINK_REL + title;
|
||||
break;
|
||||
|
||||
case ENTITY_NAVIGATION:
|
||||
case ENTITY_SET_NAVIGATION:
|
||||
rel = version.getNamespace(ODataServiceVersion.NamespaceKey.NAVIGATION_LINK_REL) + title;
|
||||
rel = Constants.NS_NAVIGATION_LINK_REL + title;
|
||||
break;
|
||||
|
||||
case MEDIA_EDIT:
|
||||
default:
|
||||
rel = version.getNamespace(ODataServiceVersion.NamespaceKey.MEDIA_EDIT_LINK_REL) + title;
|
||||
rel = Constants.NS_MEDIA_EDIT_LINK_REL + title;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -149,10 +142,9 @@ public class ODataLink extends ODataItem implements ODataAnnotatable{
|
|||
* @param type type.
|
||||
* @param title title.
|
||||
*/
|
||||
protected ODataLink(final ODataServiceVersion version,
|
||||
final URI baseURI, final String href, final ODataLinkType type, final String title) {
|
||||
protected ODataLink(final URI baseURI, final String href, final ODataLinkType type, final String title) {
|
||||
|
||||
this(version, getURI(baseURI, href), type, title);
|
||||
this(getURI(baseURI, href), type, title);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -189,7 +181,7 @@ public class ODataLink extends ODataItem implements ODataAnnotatable{
|
|||
public String getMediaETag() {
|
||||
return mediaETag;
|
||||
}
|
||||
|
||||
|
||||
public List<ODataAnnotation> getAnnotations() {
|
||||
return annotations;
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
package org.apache.olingo.commons.api.domain;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.format.ContentType;
|
||||
|
||||
/**
|
||||
|
@ -42,13 +42,13 @@ public enum ODataLinkType {
|
|||
/**
|
||||
* Media-edit link.
|
||||
*/
|
||||
MEDIA_EDIT("*/*"),
|
||||
|
||||
MEDIA_EDIT("*/*"),
|
||||
|
||||
/**
|
||||
* Entity binding link.
|
||||
*/
|
||||
ENTITY_BINDING(ContentType.APPLICATION_XML),
|
||||
|
||||
|
||||
/**
|
||||
* Entity collection binding link.
|
||||
*/
|
||||
|
@ -78,9 +78,8 @@ public enum ODataLinkType {
|
|||
* @param type type.
|
||||
* @return <code>ODataLinkType</code> object.
|
||||
*/
|
||||
public static ODataLinkType fromString(final ODataServiceVersion version, final String rel, final String type) {
|
||||
if (StringUtils.isNotBlank(rel)
|
||||
&& rel.startsWith(version.getNamespace(ODataServiceVersion.NamespaceKey.MEDIA_EDIT_LINK_REL))) {
|
||||
public static ODataLinkType fromString(final String rel, final String type) {
|
||||
if (StringUtils.isNotBlank(rel) && rel.startsWith(Constants.NS_MEDIA_EDIT_LINK_REL)) {
|
||||
|
||||
return MEDIA_EDIT.setType(StringUtils.isBlank(type) ? "*/*" : type);
|
||||
}
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.api.edm;
|
||||
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
|
||||
public enum EdmPrimitiveTypeKind {
|
||||
|
||||
|
@ -86,8 +85,8 @@ public enum EdmPrimitiveTypeKind {
|
|||
* @param fqn full-qualified type name.
|
||||
* @return <tt>EdmPrimitiveTypeKind</tt> object.
|
||||
*/
|
||||
public static EdmPrimitiveTypeKind valueOfFQN(final ODataServiceVersion version, final FullQualifiedName fqn) {
|
||||
return valueOfFQN(version, fqn.toString());
|
||||
public static EdmPrimitiveTypeKind valueOfFQN(final FullQualifiedName fqn) {
|
||||
return valueOfFQN(fqn.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -98,18 +97,12 @@ public enum EdmPrimitiveTypeKind {
|
|||
* @param fqn string value type.
|
||||
* @return <tt>EdmPrimitiveTypeKind</tt> object.
|
||||
*/
|
||||
public static EdmPrimitiveTypeKind valueOfFQN(final ODataServiceVersion version, final String fqn) {
|
||||
if (version == null) {
|
||||
throw new IllegalArgumentException("No OData protocol version provided");
|
||||
}
|
||||
public static EdmPrimitiveTypeKind valueOfFQN(final String fqn) {
|
||||
if (!fqn.startsWith(EdmPrimitiveType.EDM_NAMESPACE + ".")) {
|
||||
throw new IllegalArgumentException(fqn + " does not look like an Edm primitive type");
|
||||
}
|
||||
|
||||
final EdmPrimitiveTypeKind kind = valueOf(fqn.substring(4));
|
||||
// if (!kind.versions.contains(version)) {
|
||||
// throw new IllegalArgumentException(kind + " not allowed in " + version);
|
||||
// }
|
||||
return kind;
|
||||
}
|
||||
|
||||
|
|
|
@ -18,10 +18,6 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.api.edm.constants;
|
||||
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
@ -35,86 +31,6 @@ public enum ODataServiceVersion {
|
|||
V30("3.0"),
|
||||
V40("4.0");
|
||||
|
||||
public enum NamespaceKey {
|
||||
DATASERVICES, METADATA, SCHEME,
|
||||
NAVIGATION_LINK_REL, ASSOCIATION_LINK_REL, MEDIA_EDIT_LINK_REL, DELTA_LINK_REL
|
||||
}
|
||||
|
||||
private static final Map<NamespaceKey, String> V30_NAMESPACES = new HashMap<NamespaceKey, String>() {
|
||||
private static final long serialVersionUID = 3109256773218160485L;
|
||||
private static final String BASE = "http://schemas.microsoft.com/ado/2007/08/dataservices";
|
||||
{
|
||||
put(NamespaceKey.DATASERVICES, BASE);
|
||||
put(NamespaceKey.METADATA, BASE + "/metadata");
|
||||
put(NamespaceKey.SCHEME, BASE + "/scheme");
|
||||
put(NamespaceKey.NAVIGATION_LINK_REL, BASE + "/related/");
|
||||
put(NamespaceKey.ASSOCIATION_LINK_REL, BASE + "/relatedlinks/");
|
||||
put(NamespaceKey.MEDIA_EDIT_LINK_REL, BASE + "/edit-media/");
|
||||
}
|
||||
};
|
||||
|
||||
private static final Map<NamespaceKey, String> V40_NAMESPACES = new HashMap<NamespaceKey, String>() {
|
||||
private static final long serialVersionUID = 3109256773218160485L;
|
||||
private static final String BASE = "http://docs.oasis-open.org/odata/ns/";
|
||||
{
|
||||
put(NamespaceKey.DATASERVICES, BASE + "data");
|
||||
put(NamespaceKey.METADATA, BASE + "metadata");
|
||||
put(NamespaceKey.SCHEME, BASE + "scheme");
|
||||
put(NamespaceKey.NAVIGATION_LINK_REL, BASE + "related/");
|
||||
put(NamespaceKey.ASSOCIATION_LINK_REL, BASE + "relatedlinks/");
|
||||
put(NamespaceKey.MEDIA_EDIT_LINK_REL, BASE + "edit-media/");
|
||||
put(NamespaceKey.DELTA_LINK_REL, BASE + "delta");
|
||||
}
|
||||
};
|
||||
|
||||
public enum JsonKey {
|
||||
TYPE, ID, ETAG,
|
||||
READ_LINK, EDIT_LINK, MEDIA_READ_LINK, MEDIA_EDIT_LINK, MEDIA_CONTENT_TYPE, MEDIA_ETAG,
|
||||
ASSOCIATION_LINK, NAVIGATION_LINK,
|
||||
COUNT, NEXT_LINK, DELTA_LINK, ERROR
|
||||
}
|
||||
|
||||
private static final Map<JsonKey, String> V30_JSON = new HashMap<JsonKey, String>() {
|
||||
private static final long serialVersionUID = 3109256773218160485L;
|
||||
{
|
||||
put(JsonKey.TYPE, "odata.type");
|
||||
put(JsonKey.ID, "odata.id");
|
||||
put(JsonKey.ETAG, "odata.etag");
|
||||
put(JsonKey.READ_LINK, "odata.readLink");
|
||||
put(JsonKey.EDIT_LINK, "odata.editLink");
|
||||
put(JsonKey.MEDIA_READ_LINK, "odata.mediaReadLink");
|
||||
put(JsonKey.MEDIA_EDIT_LINK, "odata.mediaEditLink");
|
||||
put(JsonKey.MEDIA_CONTENT_TYPE, "odata.mediaContentType");
|
||||
put(JsonKey.MEDIA_ETAG, "odata.mediaEtag");
|
||||
put(JsonKey.ASSOCIATION_LINK, "@odata.associationLinkUrl");
|
||||
put(JsonKey.NAVIGATION_LINK, "@odata.navigationLinkUrl");
|
||||
put(JsonKey.COUNT, "odata.count");
|
||||
put(JsonKey.NEXT_LINK, "odata.nextLink");
|
||||
put(JsonKey.ERROR, "odata.error");
|
||||
}
|
||||
};
|
||||
|
||||
private static final Map<JsonKey, String> V40_JSON = new HashMap<JsonKey, String>() {
|
||||
private static final long serialVersionUID = 3109256773218160485L;
|
||||
{
|
||||
put(JsonKey.TYPE, Constants.JSON_TYPE);
|
||||
put(JsonKey.ID, Constants.JSON_ID);
|
||||
put(JsonKey.ETAG, Constants.JSON_ETAG);
|
||||
put(JsonKey.READ_LINK, Constants.JSON_READ_LINK);
|
||||
put(JsonKey.EDIT_LINK, Constants.JSON_EDIT_LINK);
|
||||
put(JsonKey.MEDIA_READ_LINK, Constants.JSON_MEDIA_READ_LINK);
|
||||
put(JsonKey.MEDIA_EDIT_LINK, Constants.JSON_MEDIA_EDIT_LINK);
|
||||
put(JsonKey.MEDIA_CONTENT_TYPE, Constants.JSON_MEDIA_CONTENT_TYPE);
|
||||
put(JsonKey.MEDIA_ETAG, Constants.JSON_MEDIA_ETAG);
|
||||
put(JsonKey.ASSOCIATION_LINK, Constants.JSON_ASSOCIATION_LINK);
|
||||
put(JsonKey.NAVIGATION_LINK, Constants.JSON_NAVIGATION_LINK);
|
||||
put(JsonKey.COUNT, Constants.JSON_COUNT);
|
||||
put(JsonKey.NEXT_LINK, Constants.JSON_NEXT_LINK);
|
||||
put(JsonKey.DELTA_LINK, Constants.JSON_DELTA_LINK);
|
||||
put(JsonKey.ERROR, Constants.JSON_ERROR);
|
||||
}
|
||||
};
|
||||
|
||||
private static final Pattern DATASERVICEVERSIONPATTERN = Pattern.compile("(\\p{Digit}+\\.\\p{Digit}+)(:?;.*)?");
|
||||
|
||||
/**
|
||||
|
@ -169,14 +85,6 @@ public enum ODataServiceVersion {
|
|||
this.version = version;
|
||||
}
|
||||
|
||||
public String getNamespace(final NamespaceKey key) {
|
||||
return this == V10 || this == V20 ? null : this == V30 ? V30_NAMESPACES.get(key) : V40_NAMESPACES.get(key);
|
||||
}
|
||||
|
||||
public String getJsonName(final JsonKey key) {
|
||||
return this == V10 || this == V20 ? null : this == V30 ? V30_JSON.get(key) : V40_JSON.get(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return version;
|
||||
|
|
|
@ -48,12 +48,12 @@ public class ODataObjectFactoryImpl implements ODataObjectFactory {
|
|||
|
||||
@Override
|
||||
public ODataInlineEntitySet newDeepInsertEntitySet(final String name, final ODataEntitySet entitySet) {
|
||||
return new ODataInlineEntitySet(version, null, ODataLinkType.ENTITY_SET_NAVIGATION, name, entitySet);
|
||||
return new ODataInlineEntitySet(null, ODataLinkType.ENTITY_SET_NAVIGATION, name, entitySet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ODataInlineEntity newDeepInsertEntity(final String name, final ODataEntity entity) {
|
||||
return new ODataInlineEntity(version, null, ODataLinkType.ENTITY_NAVIGATION, name, entity);
|
||||
return new ODataInlineEntity(null, ODataLinkType.ENTITY_NAVIGATION, name, entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -85,25 +85,25 @@ public class ODataObjectFactoryImpl implements ODataObjectFactory {
|
|||
|
||||
@Override
|
||||
public ODataLink newEntityNavigationLink(final String name, final URI link) {
|
||||
return new ODataLink.Builder().setVersion(version).setURI(link).
|
||||
return new ODataLink.Builder().setURI(link).
|
||||
setType(ODataLinkType.ENTITY_NAVIGATION).setTitle(name).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ODataLink newEntitySetNavigationLink(final String name, final URI link) {
|
||||
return new ODataLink.Builder().setVersion(version).setURI(link).
|
||||
return new ODataLink.Builder().setURI(link).
|
||||
setType(ODataLinkType.ENTITY_SET_NAVIGATION).setTitle(name).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ODataLink newAssociationLink(final String name, final URI link) {
|
||||
return new ODataLink.Builder().setVersion(version).setURI(link).
|
||||
return new ODataLink.Builder().setURI(link).
|
||||
setType(ODataLinkType.ASSOCIATION).setTitle(name).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ODataLink newMediaEditLink(final String name, final URI link) {
|
||||
return new ODataLink.Builder().setVersion(version).setURI(link).
|
||||
return new ODataLink.Builder().setURI(link).
|
||||
setType(ODataLinkType.MEDIA_EDIT).setTitle(name).build();
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,6 @@ import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
|
|||
import org.apache.olingo.commons.api.edm.EdmType;
|
||||
import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
|
||||
import org.apache.olingo.commons.api.edm.FullQualifiedName;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
|
||||
|
||||
public class EdmTypeInfo {
|
||||
|
@ -156,19 +155,17 @@ public class EdmTypeInfo {
|
|||
return deserialize.toString();
|
||||
}
|
||||
|
||||
public String external(final ODataServiceVersion version) {
|
||||
public String external() {
|
||||
final StringBuilder serialize = new StringBuilder();
|
||||
|
||||
if (isCollection()) {
|
||||
if (version.compareTo(ODataServiceVersion.V40) >= 0) {
|
||||
serialize.append('#');
|
||||
}
|
||||
serialize.append('#');
|
||||
serialize.append("Collection(");
|
||||
}
|
||||
|
||||
if (isPrimitiveType() && version.compareTo(ODataServiceVersion.V40) >= 0) {
|
||||
if (isPrimitiveType()) {
|
||||
serialize.append(getFullQualifiedName().getName());
|
||||
} else {
|
||||
}else{
|
||||
serialize.append(getFullQualifiedName().toString());
|
||||
}
|
||||
|
||||
|
@ -176,7 +173,7 @@ public class EdmTypeInfo {
|
|||
serialize.append(")");
|
||||
}
|
||||
|
||||
if (version.compareTo(ODataServiceVersion.V40) >= 0 && !isPrimitiveType() && !isCollection()) {
|
||||
if (!isPrimitiveType() && !isCollection()) {
|
||||
serialize.insert(0, '#');
|
||||
}
|
||||
|
||||
|
|
|
@ -18,21 +18,18 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.core.serialization;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.QName;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.stream.XMLStreamWriter;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
|
||||
abstract class AbstractAtomDealer {
|
||||
|
||||
protected static final String TYPE_TEXT = "text";
|
||||
|
||||
protected final ODataServiceVersion version;
|
||||
|
||||
protected final String namespaceMetadata;
|
||||
protected final String namespaceData;
|
||||
|
||||
|
@ -59,11 +56,9 @@ abstract class AbstractAtomDealer {
|
|||
protected final QName errorMessageQName;
|
||||
protected final QName errorTargetQName;
|
||||
|
||||
public AbstractAtomDealer(final ODataServiceVersion version) {
|
||||
this.version = version;
|
||||
|
||||
namespaceMetadata = version.getNamespace(ODataServiceVersion.NamespaceKey.METADATA);
|
||||
namespaceData = version.getNamespace(ODataServiceVersion.NamespaceKey.DATASERVICES);
|
||||
public AbstractAtomDealer() {
|
||||
namespaceMetadata = Constants.NS_METADATA;
|
||||
namespaceData = Constants.NS_DATASERVICES;
|
||||
|
||||
etagQName = new QName(namespaceMetadata, Constants.ATOM_ATTR_ETAG);
|
||||
metadataEtagQName = new QName(namespaceMetadata, Constants.ATOM_ATTR_METADATAETAG);
|
||||
|
@ -72,8 +67,7 @@ abstract class AbstractAtomDealer {
|
|||
propertiesQName = new QName(namespaceMetadata, Constants.PROPERTIES);
|
||||
typeQName = new QName(namespaceMetadata, Constants.ATTR_TYPE);
|
||||
nullQName = new QName(namespaceMetadata, Constants.ATTR_NULL);
|
||||
elementQName = new QName(version.compareTo(ODataServiceVersion.V40) < 0 ? namespaceData : namespaceMetadata,
|
||||
Constants.ELEM_ELEMENT);
|
||||
elementQName = new QName(namespaceMetadata, Constants.ELEM_ELEMENT);
|
||||
countQName = new QName(namespaceMetadata, Constants.ATOM_ELEM_COUNT);
|
||||
uriQName = new QName(namespaceData, Constants.ELEM_URI);
|
||||
nextQName = new QName(namespaceData, Constants.NEXT_LINK_REL);
|
||||
|
@ -95,9 +89,8 @@ abstract class AbstractAtomDealer {
|
|||
protected void namespaces(final XMLStreamWriter writer) throws XMLStreamException {
|
||||
writer.writeNamespace(StringUtils.EMPTY, Constants.NS_ATOM);
|
||||
writer.writeNamespace(XMLConstants.XML_NS_PREFIX, XMLConstants.XML_NS_URI);
|
||||
writer.writeNamespace(Constants.PREFIX_METADATA, version.getNamespace(ODataServiceVersion.NamespaceKey.METADATA));
|
||||
writer.writeNamespace(Constants.PREFIX_DATASERVICES,
|
||||
version.getNamespace(ODataServiceVersion.NamespaceKey.DATASERVICES));
|
||||
writer.writeNamespace(Constants.PREFIX_METADATA, Constants.NS_METADATA);
|
||||
writer.writeNamespace(Constants.PREFIX_DATASERVICES, Constants.NS_DATASERVICES);
|
||||
writer.writeNamespace(Constants.PREFIX_GML, Constants.NS_GML);
|
||||
writer.writeNamespace(Constants.PREFIX_GEORSS, Constants.NS_GEORSS);
|
||||
}
|
||||
|
|
|
@ -52,8 +52,6 @@ import org.apache.olingo.commons.api.domain.ODataPropertyType;
|
|||
import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
|
||||
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.NamespaceKey;
|
||||
import org.apache.olingo.commons.api.edm.geo.Geospatial;
|
||||
import org.apache.olingo.commons.api.format.ContentType;
|
||||
import org.apache.olingo.commons.api.serialization.ODataDeserializer;
|
||||
|
@ -82,8 +80,7 @@ public class AtomDeserializer extends AbstractAtomDealer implements ODataDeseria
|
|||
return FACTORY.createXMLEventReader(input);
|
||||
}
|
||||
|
||||
public AtomDeserializer(final ODataServiceVersion version) {
|
||||
super(version);
|
||||
public AtomDeserializer() {
|
||||
geoDeserializer = new AtomGeoValueDeserializer();
|
||||
}
|
||||
|
||||
|
@ -97,8 +94,8 @@ public class AtomDeserializer extends AbstractAtomDealer implements ODataDeseria
|
|||
final XMLEvent event = reader.nextEvent();
|
||||
|
||||
if (event.isStartElement() && typeInfo != null && typeInfo.getPrimitiveTypeKind().isGeospatial()) {
|
||||
final EdmPrimitiveTypeKind geoType = EdmPrimitiveTypeKind.valueOfFQN(
|
||||
version, typeInfo.getFullQualifiedName().toString());
|
||||
final EdmPrimitiveTypeKind geoType =
|
||||
EdmPrimitiveTypeKind.valueOfFQN(typeInfo.getFullQualifiedName().toString());
|
||||
value = geoDeserializer.deserialize(reader, event.asStartElement(), geoType);
|
||||
}
|
||||
|
||||
|
@ -153,13 +150,11 @@ public class AtomDeserializer extends AbstractAtomDealer implements ODataDeseria
|
|||
link.setType(type.getValue());
|
||||
}
|
||||
|
||||
if (link.getRel().startsWith(
|
||||
version.getNamespace(ODataServiceVersion.NamespaceKey.NAVIGATION_LINK_REL))) {
|
||||
if (link.getRel().startsWith(Constants.NS_NAVIGATION_LINK_REL)) {
|
||||
|
||||
((ComplexValue) value).getNavigationLinks().add(link);
|
||||
inline(reader, event.asStartElement(), link);
|
||||
} else if (link.getRel().startsWith(
|
||||
version.getNamespace(ODataServiceVersion.NamespaceKey.ASSOCIATION_LINK_REL))) {
|
||||
} else if (link.getRel().startsWith(Constants.NS_ASSOCIATION_LINK_REL)) {
|
||||
|
||||
((Valuable) value).asComplex().getAssociationLinks().add(link);
|
||||
}
|
||||
|
@ -267,7 +262,7 @@ public class AtomDeserializer extends AbstractAtomDealer implements ODataDeseria
|
|||
|
||||
final PropertyImpl property = new PropertyImpl();
|
||||
|
||||
if (ODataServiceVersion.V40 == version && propertyValueQName.equals(start.getName())) {
|
||||
if (propertyValueQName.equals(start.getName())) {
|
||||
// retrieve name from context
|
||||
final Attribute context = start.getAttributeByName(contextQName);
|
||||
if (context != null) {
|
||||
|
@ -468,7 +463,7 @@ public class AtomDeserializer extends AbstractAtomDealer implements ODataDeseria
|
|||
delta.setNext(URI.create(href.getValue()));
|
||||
}
|
||||
}
|
||||
if (ODataServiceVersion.V40.getNamespace(NamespaceKey.DELTA_LINK_REL).equals(rel.getValue())) {
|
||||
if (Constants.NS_DELTA_LINK_REL.equals(rel.getValue())) {
|
||||
final Attribute href = event.asStartElement().getAttributeByName(QName.valueOf(Constants.ATTR_HREF));
|
||||
if (href != null) {
|
||||
delta.setDeltaLink(URI.create(href.getValue()));
|
||||
|
@ -644,17 +639,14 @@ public class AtomDeserializer extends AbstractAtomDealer implements ODataDeseria
|
|||
if (mediaETag != null) {
|
||||
entity.setMediaETag(mediaETag.getValue());
|
||||
}
|
||||
} else if (link.getRel().startsWith(
|
||||
version.getNamespace(ODataServiceVersion.NamespaceKey.NAVIGATION_LINK_REL))) {
|
||||
} else if (link.getRel().startsWith(Constants.NS_NAVIGATION_LINK_REL)) {
|
||||
|
||||
entity.getNavigationLinks().add(link);
|
||||
inline(reader, event.asStartElement(), link);
|
||||
} else if (link.getRel().startsWith(
|
||||
version.getNamespace(ODataServiceVersion.NamespaceKey.ASSOCIATION_LINK_REL))) {
|
||||
} else if (link.getRel().startsWith(Constants.NS_ASSOCIATION_LINK_REL)) {
|
||||
|
||||
entity.getAssociationLinks().add(link);
|
||||
} else if (link.getRel().startsWith(
|
||||
version.getNamespace(ODataServiceVersion.NamespaceKey.MEDIA_EDIT_LINK_REL))) {
|
||||
} else if (link.getRel().startsWith(Constants.NS_MEDIA_EDIT_LINK_REL)) {
|
||||
|
||||
final Attribute metag = event.asStartElement().getAttributeByName(etagQName);
|
||||
if (metag != null) {
|
||||
|
@ -777,7 +769,7 @@ public class AtomDeserializer extends AbstractAtomDealer implements ODataDeseria
|
|||
entitySet.setNext(URI.create(href.getValue()));
|
||||
}
|
||||
}
|
||||
if (ODataServiceVersion.V40.getNamespace(NamespaceKey.DELTA_LINK_REL).equals(rel.getValue())) {
|
||||
if (Constants.NS_DELTA_LINK_REL.equals(rel.getValue())) {
|
||||
final Attribute href = event.asStartElement().getAttributeByName(QName.valueOf(Constants.ATTR_HREF));
|
||||
if (href != null) {
|
||||
entitySet.setDeltaLink(URI.create(href.getValue()));
|
||||
|
|
|
@ -42,8 +42,6 @@ import org.apache.olingo.commons.api.data.ValueType;
|
|||
import org.apache.olingo.commons.api.domain.ODataOperation;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
|
||||
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.NamespaceKey;
|
||||
import org.apache.olingo.commons.api.edm.geo.Geospatial;
|
||||
import org.apache.olingo.commons.api.format.ContentType;
|
||||
import org.apache.olingo.commons.api.serialization.ODataSerializer;
|
||||
|
@ -65,12 +63,11 @@ public class AtomSerializer extends AbstractAtomDealer implements ODataSerialize
|
|||
|
||||
private final boolean serverMode;
|
||||
|
||||
public AtomSerializer(final ODataServiceVersion version) {
|
||||
this(version, false);
|
||||
public AtomSerializer() {
|
||||
this(false);
|
||||
}
|
||||
|
||||
public AtomSerializer(final ODataServiceVersion version, final boolean serverMode) {
|
||||
super(version);
|
||||
public AtomSerializer(final boolean serverMode) {
|
||||
geoSerializer = new AtomGeoValueSerializer();
|
||||
this.serverMode = serverMode;
|
||||
}
|
||||
|
@ -79,11 +76,7 @@ public class AtomSerializer extends AbstractAtomDealer implements ODataSerialize
|
|||
final ValueType valueType, final EdmPrimitiveTypeKind kind, final List<?> value)
|
||||
throws XMLStreamException, EdmPrimitiveTypeException {
|
||||
for (Object item : value) {
|
||||
if (version.compareTo(ODataServiceVersion.V40) < 0) {
|
||||
writer.writeStartElement(Constants.PREFIX_DATASERVICES, Constants.ELEM_ELEMENT, namespaceData);
|
||||
} else {
|
||||
writer.writeStartElement(Constants.PREFIX_METADATA, Constants.ELEM_ELEMENT, namespaceMetadata);
|
||||
}
|
||||
writer.writeStartElement(Constants.PREFIX_METADATA, Constants.ELEM_ELEMENT, namespaceMetadata);
|
||||
value(writer, valueType, kind, item);
|
||||
writer.writeEndElement();
|
||||
}
|
||||
|
@ -126,22 +119,19 @@ public class AtomSerializer extends AbstractAtomDealer implements ODataSerialize
|
|||
public void property(final XMLStreamWriter writer, final Property property, final boolean standalone)
|
||||
throws XMLStreamException, EdmPrimitiveTypeException {
|
||||
|
||||
if (version.compareTo(ODataServiceVersion.V40) >= 0 && standalone) {
|
||||
if (standalone) {
|
||||
writer.writeStartElement(Constants.PREFIX_METADATA, Constants.VALUE, namespaceData);
|
||||
namespaces(writer);
|
||||
} else {
|
||||
writer.writeStartElement(Constants.PREFIX_DATASERVICES, property.getName(), namespaceData);
|
||||
}
|
||||
|
||||
if (standalone) {
|
||||
namespaces(writer);
|
||||
}
|
||||
|
||||
EdmTypeInfo typeInfo = null;
|
||||
if (StringUtils.isNotBlank(property.getType())) {
|
||||
typeInfo = new EdmTypeInfo.Builder().setTypeExpression(property.getType()).build();
|
||||
if (!EdmPrimitiveTypeKind.String.getFullQualifiedName().toString().equals(typeInfo.internal())) {
|
||||
writer.writeAttribute(Constants.PREFIX_METADATA, namespaceMetadata,
|
||||
Constants.ATTR_TYPE, typeInfo.external(version));
|
||||
Constants.ATTR_TYPE, typeInfo.external());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -260,7 +250,7 @@ public class AtomSerializer extends AbstractAtomDealer implements ODataSerialize
|
|||
typeInfo = new EdmTypeInfo.Builder().setTypeExpression(annotation.getType()).build();
|
||||
if (!EdmPrimitiveTypeKind.String.getFullQualifiedName().toString().equals(typeInfo.internal())) {
|
||||
writer.writeAttribute(Constants.PREFIX_METADATA, namespaceMetadata,
|
||||
Constants.ATTR_TYPE, typeInfo.external(version));
|
||||
Constants.ATTR_TYPE, typeInfo.external());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -287,10 +277,10 @@ public class AtomSerializer extends AbstractAtomDealer implements ODataSerialize
|
|||
}
|
||||
|
||||
writer.writeStartElement(Constants.ATOM_ELEM_CATEGORY);
|
||||
writer.writeAttribute(Constants.ATOM_ATTR_SCHEME, version.getNamespace(ODataServiceVersion.NamespaceKey.SCHEME));
|
||||
writer.writeAttribute(Constants.ATOM_ATTR_SCHEME, Constants.NS_SCHEME);
|
||||
if (StringUtils.isNotBlank(entity.getType())) {
|
||||
writer.writeAttribute(Constants.ATOM_ATTR_TERM,
|
||||
new EdmTypeInfo.Builder().setTypeExpression(entity.getType()).build().external(version));
|
||||
new EdmTypeInfo.Builder().setTypeExpression(entity.getType()).build().external());
|
||||
}
|
||||
writer.writeEndElement();
|
||||
|
||||
|
@ -447,7 +437,7 @@ public class AtomSerializer extends AbstractAtomDealer implements ODataSerialize
|
|||
}
|
||||
if (entitySet.getDeltaLink() != null) {
|
||||
final LinkImpl next = new LinkImpl();
|
||||
next.setRel(ODataServiceVersion.V40.getNamespace(NamespaceKey.DELTA_LINK_REL));
|
||||
next.setRel(Constants.NS_DELTA_LINK_REL);
|
||||
next.setHref(entitySet.getDeltaLink().toASCIIString());
|
||||
|
||||
links(writer, Collections.<Link> singletonList(next));
|
||||
|
@ -526,7 +516,7 @@ public class AtomSerializer extends AbstractAtomDealer implements ODataSerialize
|
|||
writer.writeStartDocument();
|
||||
|
||||
writer.writeStartElement(Constants.ATTR_METADATA, Constants.ATTR_REF);
|
||||
writer.writeNamespace(Constants.ATTR_METADATA, version.getNamespace(NamespaceKey.METADATA));
|
||||
writer.writeNamespace(Constants.ATTR_METADATA, Constants.NS_METADATA);
|
||||
writer.writeAttribute(Constants.ATTR_METADATA, Constants.CONTEXT, container.getContextURL().toASCIIString());
|
||||
writer.writeAttribute(Constants.ATOM_ATTR_ID, container.getPayload().toASCIIString());
|
||||
writer.writeEndElement();
|
||||
|
|
|
@ -18,31 +18,30 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.core.serialization;
|
||||
|
||||
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;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.ContextURL;
|
||||
import org.apache.olingo.commons.api.data.Delta;
|
||||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.api.serialization.ODataDeserializerException;
|
||||
import org.apache.olingo.commons.core.data.DeletedEntityImpl;
|
||||
import org.apache.olingo.commons.core.data.DeltaImpl;
|
||||
import org.apache.olingo.commons.core.data.DeltaLinkImpl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
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 JsonDeltaDeserializer extends JsonDeserializer {
|
||||
|
||||
public JsonDeltaDeserializer(final ODataServiceVersion version, final boolean serverMode) {
|
||||
super(version, serverMode);
|
||||
public JsonDeltaDeserializer(final boolean serverMode) {
|
||||
super(serverMode);
|
||||
}
|
||||
|
||||
protected ResWrap<Delta> doDeserialize(final JsonParser parser) throws IOException {
|
||||
|
@ -68,7 +67,7 @@ public class JsonDeltaDeserializer extends JsonDeserializer {
|
|||
}
|
||||
|
||||
if (tree.hasNonNull(Constants.VALUE)) {
|
||||
JsonEntityDeserializer entityDeserializer = new JsonEntityDeserializer(version, serverMode);
|
||||
JsonEntityDeserializer entityDeserializer = new JsonEntityDeserializer(serverMode);
|
||||
for (JsonNode jsonNode : tree.get(Constants.VALUE)) {
|
||||
final ObjectNode item = (ObjectNode) jsonNode;
|
||||
final ContextURL itemContextURL = item.hasNonNull(Constants.JSON_CONTEXT) ?
|
||||
|
|
|
@ -18,43 +18,6 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.core.serialization;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonFactory;
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.core.ObjectCodec;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.Annotatable;
|
||||
import org.apache.olingo.commons.api.data.Annotation;
|
||||
import org.apache.olingo.commons.api.data.Entity;
|
||||
import org.apache.olingo.commons.api.data.EntitySet;
|
||||
import org.apache.olingo.commons.api.data.Linked;
|
||||
import org.apache.olingo.commons.api.data.ComplexValue;
|
||||
import org.apache.olingo.commons.api.data.Property;
|
||||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.data.Valuable;
|
||||
import org.apache.olingo.commons.api.data.ValueType;
|
||||
import org.apache.olingo.commons.api.domain.ODataError;
|
||||
import org.apache.olingo.commons.api.domain.ODataLinkType;
|
||||
import org.apache.olingo.commons.api.domain.ODataPropertyType;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.api.edm.geo.Geospatial;
|
||||
import org.apache.olingo.commons.api.serialization.ODataDeserializer;
|
||||
import org.apache.olingo.commons.api.serialization.ODataDeserializerException;
|
||||
import org.apache.olingo.commons.core.data.AnnotationImpl;
|
||||
import org.apache.olingo.commons.core.data.EntitySetImpl;
|
||||
import org.apache.olingo.commons.core.data.LinkImpl;
|
||||
import org.apache.olingo.commons.core.data.ComplexValueImpl;
|
||||
import org.apache.olingo.commons.core.data.PropertyImpl;
|
||||
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.AbstractMap.SimpleEntry;
|
||||
|
@ -67,72 +30,89 @@ import java.util.Set;
|
|||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.Annotatable;
|
||||
import org.apache.olingo.commons.api.data.Annotation;
|
||||
import org.apache.olingo.commons.api.data.ComplexValue;
|
||||
import org.apache.olingo.commons.api.data.Entity;
|
||||
import org.apache.olingo.commons.api.data.EntitySet;
|
||||
import org.apache.olingo.commons.api.data.Linked;
|
||||
import org.apache.olingo.commons.api.data.Property;
|
||||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.data.Valuable;
|
||||
import org.apache.olingo.commons.api.data.ValueType;
|
||||
import org.apache.olingo.commons.api.domain.ODataError;
|
||||
import org.apache.olingo.commons.api.domain.ODataLinkType;
|
||||
import org.apache.olingo.commons.api.domain.ODataPropertyType;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
|
||||
import org.apache.olingo.commons.api.edm.geo.Geospatial;
|
||||
import org.apache.olingo.commons.api.serialization.ODataDeserializer;
|
||||
import org.apache.olingo.commons.api.serialization.ODataDeserializerException;
|
||||
import org.apache.olingo.commons.core.data.AnnotationImpl;
|
||||
import org.apache.olingo.commons.core.data.ComplexValueImpl;
|
||||
import org.apache.olingo.commons.core.data.EntitySetImpl;
|
||||
import org.apache.olingo.commons.core.data.LinkImpl;
|
||||
import org.apache.olingo.commons.core.data.PropertyImpl;
|
||||
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonFactory;
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.core.ObjectCodec;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
|
||||
public class JsonDeserializer implements ODataDeserializer {
|
||||
|
||||
protected final Pattern CUSTOM_ANNOTATION = Pattern.compile("(.+)@(.+)\\.(.+)");
|
||||
|
||||
protected final ODataServiceVersion version;
|
||||
|
||||
protected final boolean serverMode;
|
||||
|
||||
protected String jsonType;
|
||||
protected String jsonType = Constants.JSON_TYPE;
|
||||
|
||||
protected String jsonId;
|
||||
protected String jsonId = Constants.JSON_ID;
|
||||
|
||||
protected String jsonETag;
|
||||
protected String jsonETag = Constants.JSON_ETAG;
|
||||
|
||||
protected String jsonReadLink;
|
||||
protected String jsonReadLink = Constants.JSON_READ_LINK;
|
||||
|
||||
protected String jsonEditLink;
|
||||
protected String jsonEditLink = Constants.JSON_EDIT_LINK;
|
||||
|
||||
protected String jsonMediaEditLink;
|
||||
protected String jsonMediaEditLink = Constants.JSON_MEDIA_EDIT_LINK;
|
||||
|
||||
protected String jsonMediaReadLink;
|
||||
protected String jsonMediaReadLink = Constants.JSON_MEDIA_READ_LINK;
|
||||
|
||||
protected String jsonMediaContentType;
|
||||
protected String jsonMediaContentType = Constants.JSON_MEDIA_CONTENT_TYPE;
|
||||
|
||||
protected String jsonMediaETag;
|
||||
protected String jsonMediaETag = Constants.JSON_MEDIA_ETAG;
|
||||
|
||||
protected String jsonAssociationLink;
|
||||
protected String jsonAssociationLink = Constants.JSON_ASSOCIATION_LINK;
|
||||
|
||||
protected String jsonNavigationLink;
|
||||
protected String jsonNavigationLink = Constants.JSON_NAVIGATION_LINK;
|
||||
|
||||
protected String jsonCount;
|
||||
protected String jsonCount = Constants.JSON_COUNT;
|
||||
|
||||
protected String jsonNextLink;
|
||||
protected String jsonNextLink = Constants.JSON_NEXT_LINK;
|
||||
|
||||
protected String jsonDeltaLink;
|
||||
protected String jsonDeltaLink = Constants.JSON_DELTA_LINK;
|
||||
|
||||
protected String jsonError;
|
||||
protected String jsonError = Constants.JSON_ERROR;
|
||||
|
||||
private JsonGeoValueDeserializer geoDeserializer;
|
||||
|
||||
private JsonParser parser;
|
||||
|
||||
public JsonDeserializer(final ODataServiceVersion version, final boolean serverMode) {
|
||||
this.version = version;
|
||||
public JsonDeserializer(final boolean serverMode) {
|
||||
this.serverMode = serverMode;
|
||||
|
||||
jsonType = version.getJsonName(ODataServiceVersion.JsonKey.TYPE);
|
||||
jsonId = version.getJsonName(ODataServiceVersion.JsonKey.ID);
|
||||
jsonETag = version.getJsonName(ODataServiceVersion.JsonKey.ETAG);
|
||||
jsonReadLink = version.getJsonName(ODataServiceVersion.JsonKey.READ_LINK);
|
||||
jsonEditLink = version.getJsonName(ODataServiceVersion.JsonKey.EDIT_LINK);
|
||||
jsonMediaReadLink = version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_READ_LINK);
|
||||
jsonMediaEditLink = version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_EDIT_LINK);
|
||||
jsonMediaContentType = version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_CONTENT_TYPE);
|
||||
jsonMediaETag = version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_ETAG);
|
||||
jsonAssociationLink = version.getJsonName(ODataServiceVersion.JsonKey.ASSOCIATION_LINK);
|
||||
jsonNavigationLink = version.getJsonName(ODataServiceVersion.JsonKey.NAVIGATION_LINK);
|
||||
jsonCount = version.getJsonName(ODataServiceVersion.JsonKey.COUNT);
|
||||
jsonNextLink = version.getJsonName(ODataServiceVersion.JsonKey.NEXT_LINK);
|
||||
jsonDeltaLink = version.getJsonName(ODataServiceVersion.JsonKey.DELTA_LINK);
|
||||
jsonError = version.getJsonName(ODataServiceVersion.JsonKey.ERROR);
|
||||
}
|
||||
|
||||
private JsonGeoValueDeserializer getGeoDeserializer() {
|
||||
if (geoDeserializer == null) {
|
||||
geoDeserializer = new JsonGeoValueDeserializer(version);
|
||||
geoDeserializer = new JsonGeoValueDeserializer();
|
||||
}
|
||||
return geoDeserializer;
|
||||
}
|
||||
|
@ -151,7 +131,7 @@ public class JsonDeserializer implements ODataDeserializer {
|
|||
final String entityNamePrefix = name.substring(0, name.indexOf(suffix));
|
||||
if (tree.has(entityNamePrefix)) {
|
||||
final JsonNode inline = tree.path(entityNamePrefix);
|
||||
JsonEntityDeserializer entityDeserializer = new JsonEntityDeserializer(version, serverMode);
|
||||
JsonEntityDeserializer entityDeserializer = new JsonEntityDeserializer(serverMode);
|
||||
|
||||
if (inline instanceof ObjectNode) {
|
||||
link.setType(ODataLinkType.ENTITY_NAVIGATION.toString());
|
||||
|
@ -186,7 +166,7 @@ public class JsonDeserializer implements ODataDeserializer {
|
|||
if (field.getKey().endsWith(jsonNavigationLink)) {
|
||||
final LinkImpl link = new LinkImpl();
|
||||
link.setTitle(getTitle(field));
|
||||
link.setRel(version.getNamespace(ODataServiceVersion.NamespaceKey.NAVIGATION_LINK_REL) + getTitle(field));
|
||||
link.setRel(Constants.NS_NAVIGATION_LINK_REL + getTitle(field));
|
||||
|
||||
if (field.getValue().isValueNode()) {
|
||||
link.setHref(field.getValue().textValue());
|
||||
|
@ -200,7 +180,7 @@ public class JsonDeserializer implements ODataDeserializer {
|
|||
} else if (field.getKey().endsWith(jsonAssociationLink)) {
|
||||
final LinkImpl link = new LinkImpl();
|
||||
link.setTitle(getTitle(field));
|
||||
link.setRel(version.getNamespace(ODataServiceVersion.NamespaceKey.ASSOCIATION_LINK_REL) + getTitle(field));
|
||||
link.setRel(Constants.NS_ASSOCIATION_LINK_REL + getTitle(field));
|
||||
link.setHref(field.getValue().textValue());
|
||||
link.setType(ODataLinkType.ASSOCIATION.toString());
|
||||
linked.getAssociationLinks().add(link);
|
||||
|
@ -220,7 +200,7 @@ public class JsonDeserializer implements ODataDeserializer {
|
|||
|
||||
final LinkImpl link = new LinkImpl();
|
||||
link.setTitle(getTitle(field));
|
||||
link.setRel(version.getNamespace(ODataServiceVersion.NamespaceKey.NAVIGATION_LINK_REL) + getTitle(field));
|
||||
link.setRel(Constants.NS_NAVIGATION_LINK_REL + getTitle(field));
|
||||
link.setHref(field.getValue().textValue());
|
||||
link.setType(ODataLinkType.ENTITY_NAVIGATION.toString());
|
||||
linked.getNavigationLinks().add(link);
|
||||
|
@ -232,7 +212,7 @@ public class JsonDeserializer implements ODataDeserializer {
|
|||
|
||||
final LinkImpl link = new LinkImpl();
|
||||
link.setTitle(getTitle(field));
|
||||
link.setRel(version.getNamespace(ODataServiceVersion.NamespaceKey.NAVIGATION_LINK_REL) + getTitle(field));
|
||||
link.setRel(Constants.NS_NAVIGATION_LINK_REL + getTitle(field));
|
||||
link.setHref(node.asText());
|
||||
link.setType(ODataLinkType.ENTITY_SET_NAVIGATION.toString());
|
||||
linked.getNavigationLinks().add(link);
|
||||
|
@ -438,7 +418,7 @@ public class JsonDeserializer implements ODataDeserializer {
|
|||
public ResWrap<EntitySet> toEntitySet(final InputStream input) throws ODataDeserializerException {
|
||||
try {
|
||||
parser = new JsonFactory(new ObjectMapper()).createParser(input);
|
||||
return new JsonEntitySetDeserializer(version, serverMode).doDeserialize(parser);
|
||||
return new JsonEntitySetDeserializer(serverMode).doDeserialize(parser);
|
||||
} catch (final IOException e) {
|
||||
throw new ODataDeserializerException(e);
|
||||
}
|
||||
|
@ -448,7 +428,7 @@ public class JsonDeserializer implements ODataDeserializer {
|
|||
public ResWrap<Entity> toEntity(final InputStream input) throws ODataDeserializerException {
|
||||
try {
|
||||
parser = new JsonFactory(new ObjectMapper()).createParser(input);
|
||||
return new JsonEntityDeserializer(version, serverMode).doDeserialize(parser);
|
||||
return new JsonEntityDeserializer(serverMode).doDeserialize(parser);
|
||||
} catch (final IOException e) {
|
||||
throw new ODataDeserializerException(e);
|
||||
}
|
||||
|
@ -458,7 +438,7 @@ public class JsonDeserializer implements ODataDeserializer {
|
|||
public ResWrap<Property> toProperty(final InputStream input) throws ODataDeserializerException {
|
||||
try {
|
||||
parser = new JsonFactory(new ObjectMapper()).createParser(input);
|
||||
return new JsonPropertyDeserializer(version, serverMode).doDeserialize(parser);
|
||||
return new JsonPropertyDeserializer(serverMode).doDeserialize(parser);
|
||||
} catch (final IOException e) {
|
||||
throw new ODataDeserializerException(e);
|
||||
}
|
||||
|
@ -468,7 +448,7 @@ public class JsonDeserializer implements ODataDeserializer {
|
|||
public ODataError toError(final InputStream input) throws ODataDeserializerException {
|
||||
try {
|
||||
parser = new JsonFactory(new ObjectMapper()).createParser(input);
|
||||
return new JsonODataErrorDeserializer(version, serverMode).doDeserialize(parser);
|
||||
return new JsonODataErrorDeserializer(serverMode).doDeserialize(parser);
|
||||
} catch (final IOException e) {
|
||||
throw new ODataDeserializerException(e);
|
||||
}
|
||||
|
|
|
@ -18,25 +18,6 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.core.serialization;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParseException;
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.Annotation;
|
||||
import org.apache.olingo.commons.api.data.Entity;
|
||||
import org.apache.olingo.commons.api.data.Link;
|
||||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.domain.ODataLinkType;
|
||||
import org.apache.olingo.commons.api.domain.ODataOperation;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.core.data.AnnotationImpl;
|
||||
import org.apache.olingo.commons.core.data.EntityImpl;
|
||||
import org.apache.olingo.commons.core.data.LinkImpl;
|
||||
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.ArrayList;
|
||||
|
@ -48,6 +29,25 @@ import java.util.Map;
|
|||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.Annotation;
|
||||
import org.apache.olingo.commons.api.data.Entity;
|
||||
import org.apache.olingo.commons.api.data.Link;
|
||||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.domain.ODataLinkType;
|
||||
import org.apache.olingo.commons.api.domain.ODataOperation;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
|
||||
import org.apache.olingo.commons.core.data.AnnotationImpl;
|
||||
import org.apache.olingo.commons.core.data.EntityImpl;
|
||||
import org.apache.olingo.commons.core.data.LinkImpl;
|
||||
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParseException;
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
|
||||
/**
|
||||
* Reads JSON string into an entity.
|
||||
* <br/>
|
||||
|
@ -55,8 +55,8 @@ import java.util.regex.Matcher;
|
|||
*/
|
||||
public class JsonEntityDeserializer extends JsonDeserializer {
|
||||
|
||||
public JsonEntityDeserializer(final ODataServiceVersion version, final boolean serverMode) {
|
||||
super(version, serverMode);
|
||||
public JsonEntityDeserializer(final boolean serverMode) {
|
||||
super(serverMode);
|
||||
}
|
||||
|
||||
protected ResWrap<Entity> doDeserialize(final JsonParser parser) throws IOException {
|
||||
|
@ -154,7 +154,7 @@ public class JsonEntityDeserializer extends JsonDeserializer {
|
|||
if (field.getKey().endsWith(getJSONAnnotation(jsonMediaEditLink))) {
|
||||
final LinkImpl link = new LinkImpl();
|
||||
link.setTitle(getTitle(field));
|
||||
link.setRel(version.getNamespace(ODataServiceVersion.NamespaceKey.MEDIA_EDIT_LINK_REL) + getTitle(field));
|
||||
link.setRel(Constants.NS_MEDIA_EDIT_LINK_REL + getTitle(field));
|
||||
link.setHref(field.getValue().textValue());
|
||||
link.setType(ODataLinkType.MEDIA_EDIT.toString());
|
||||
entity.getMediaEditLinks().add(link);
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
* 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.serialization;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.Annotation;
|
||||
|
@ -28,22 +29,22 @@ import org.apache.olingo.commons.api.data.Property;
|
|||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.domain.ODataOperation;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.api.format.ODataFormat;
|
||||
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
|
||||
import java.io.IOException;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
|
||||
/**
|
||||
* Writes out JSON string from an entity.
|
||||
*/
|
||||
public class JsonEntitySerializer extends JsonSerializer {
|
||||
|
||||
public JsonEntitySerializer(final ODataServiceVersion version, final boolean serverMode) {
|
||||
super(version, serverMode);
|
||||
public JsonEntitySerializer(final boolean serverMode) {
|
||||
super(serverMode);
|
||||
}
|
||||
|
||||
public JsonEntitySerializer(ODataServiceVersion version, boolean serverMode, ODataFormat format) {
|
||||
super(version, serverMode, format);
|
||||
public JsonEntitySerializer(boolean serverMode, ODataFormat format) {
|
||||
super(serverMode, format);
|
||||
}
|
||||
|
||||
protected void doSerialize(final Entity entity, final JsonGenerator jgen)
|
||||
|
@ -61,26 +62,24 @@ public class JsonEntitySerializer extends JsonSerializer {
|
|||
|
||||
if (serverMode) {
|
||||
if (container.getContextURL() != null) {
|
||||
jgen.writeStringField(version.compareTo(ODataServiceVersion.V40) >= 0
|
||||
? Constants.JSON_CONTEXT : Constants.JSON_METADATA,
|
||||
container.getContextURL().toASCIIString());
|
||||
jgen.writeStringField(Constants.JSON_CONTEXT, container.getContextURL().toASCIIString());
|
||||
}
|
||||
if (version.compareTo(ODataServiceVersion.V40) >= 0 && StringUtils.isNotBlank(container.getMetadataETag())) {
|
||||
if (StringUtils.isNotBlank(container.getMetadataETag())) {
|
||||
jgen.writeStringField(Constants.JSON_METADATA_ETAG, container.getMetadataETag());
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(entity.getETag())) {
|
||||
jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.ETAG), entity.getETag());
|
||||
jgen.writeStringField(Constants.JSON_ETAG, entity.getETag());
|
||||
}
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(entity.getType()) && format != ODataFormat.JSON_NO_METADATA) {
|
||||
jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.TYPE),
|
||||
new EdmTypeInfo.Builder().setTypeExpression(entity.getType()).build().external(version));
|
||||
jgen.writeStringField(Constants.JSON_TYPE,
|
||||
new EdmTypeInfo.Builder().setTypeExpression(entity.getType()).build().external());
|
||||
}
|
||||
|
||||
if (entity.getId() != null && format != ODataFormat.JSON_NO_METADATA) {
|
||||
jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.ID), entity.getId().toASCIIString());
|
||||
jgen.writeStringField(Constants.JSON_ID, entity.getId().toASCIIString());
|
||||
}
|
||||
|
||||
for (Annotation annotation : entity.getAnnotations()) {
|
||||
|
@ -92,12 +91,12 @@ public class JsonEntitySerializer extends JsonSerializer {
|
|||
}
|
||||
|
||||
if (serverMode && entity.getEditLink() != null && StringUtils.isNotBlank(entity.getEditLink().getHref())) {
|
||||
jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.EDIT_LINK),
|
||||
entity.getEditLink().getHref());
|
||||
jgen.writeStringField(Constants.JSON_EDIT_LINK,
|
||||
entity.getEditLink().getHref());
|
||||
|
||||
if (entity.isMediaEntity()) {
|
||||
jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_READ_LINK),
|
||||
entity.getEditLink().getHref() + "/$value");
|
||||
jgen.writeStringField(Constants.JSON_MEDIA_READ_LINK,
|
||||
entity.getEditLink().getHref() + "/$value");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -107,7 +106,7 @@ public class JsonEntitySerializer extends JsonSerializer {
|
|||
|
||||
for (Link link : entity.getMediaEditLinks()) {
|
||||
if (link.getTitle() == null) {
|
||||
jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_EDIT_LINK), link.getHref());
|
||||
jgen.writeStringField(Constants.JSON_MEDIA_EDIT_LINK, link.getHref());
|
||||
}
|
||||
|
||||
if (link.getInlineEntity() != null) {
|
||||
|
|
|
@ -18,23 +18,23 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.core.serialization;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.Annotation;
|
||||
import org.apache.olingo.commons.api.data.EntitySet;
|
||||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.core.data.AnnotationImpl;
|
||||
import org.apache.olingo.commons.core.data.EntitySetImpl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
|
||||
/**
|
||||
* Reads JSON string into an entity set.
|
||||
|
@ -43,8 +43,8 @@ import java.util.Map;
|
|||
*/
|
||||
public class JsonEntitySetDeserializer extends JsonDeserializer {
|
||||
|
||||
public JsonEntitySetDeserializer(final ODataServiceVersion version, final boolean serverMode) {
|
||||
super(version, serverMode);
|
||||
public JsonEntitySetDeserializer(final boolean serverMode) {
|
||||
super(serverMode);
|
||||
}
|
||||
|
||||
protected ResWrap<EntitySet> doDeserialize(final JsonParser parser) throws IOException {
|
||||
|
@ -93,7 +93,7 @@ public class JsonEntitySetDeserializer extends JsonDeserializer {
|
|||
}
|
||||
|
||||
if (tree.hasNonNull(Constants.VALUE)) {
|
||||
final JsonEntityDeserializer entityDeserializer = new JsonEntityDeserializer(version, serverMode);
|
||||
final JsonEntityDeserializer entityDeserializer = new JsonEntityDeserializer(serverMode);
|
||||
for (JsonNode jsonNode : tree.get(Constants.VALUE)) {
|
||||
entitySet.getEntities().add(
|
||||
entityDeserializer.doDeserialize(jsonNode.traverse(parser.getCodec())).getPayload());
|
||||
|
|
|
@ -18,7 +18,9 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.core.serialization;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.Annotation;
|
||||
|
@ -26,15 +28,13 @@ import org.apache.olingo.commons.api.data.Entity;
|
|||
import org.apache.olingo.commons.api.data.EntitySet;
|
||||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
|
||||
public class JsonEntitySetSerializer extends JsonSerializer {
|
||||
|
||||
public JsonEntitySetSerializer(final ODataServiceVersion version, final boolean serverMode) {
|
||||
super(version, serverMode);
|
||||
public JsonEntitySetSerializer(final boolean serverMode) {
|
||||
super(serverMode);
|
||||
}
|
||||
|
||||
protected void doSerialize(final EntitySet entitySet, final JsonGenerator jgen)
|
||||
|
@ -51,12 +51,10 @@ public class JsonEntitySetSerializer extends JsonSerializer {
|
|||
|
||||
if (serverMode) {
|
||||
if (container.getContextURL() != null) {
|
||||
jgen.writeStringField(version.compareTo(ODataServiceVersion.V40) >= 0
|
||||
? Constants.JSON_CONTEXT : Constants.JSON_METADATA,
|
||||
container.getContextURL().toASCIIString());
|
||||
jgen.writeStringField(Constants.JSON_CONTEXT, container.getContextURL().toASCIIString());
|
||||
}
|
||||
|
||||
if (version.compareTo(ODataServiceVersion.V40) >= 0 && StringUtils.isNotBlank(container.getMetadataETag())) {
|
||||
if (StringUtils.isNotBlank(container.getMetadataETag())) {
|
||||
jgen.writeStringField(
|
||||
Constants.JSON_METADATA_ETAG,
|
||||
container.getMetadataETag());
|
||||
|
@ -64,17 +62,17 @@ public class JsonEntitySetSerializer extends JsonSerializer {
|
|||
}
|
||||
|
||||
if (entitySet.getId() != null) {
|
||||
jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.ID), entitySet.getId().toASCIIString());
|
||||
jgen.writeStringField(Constants.JSON_ID, entitySet.getId().toASCIIString());
|
||||
}
|
||||
jgen.writeNumberField(version.getJsonName(ODataServiceVersion.JsonKey.COUNT),
|
||||
jgen.writeNumberField(Constants.JSON_COUNT,
|
||||
entitySet.getCount() == null ? entitySet.getEntities().size() : entitySet.getCount());
|
||||
if (serverMode) {
|
||||
if (entitySet.getNext() != null) {
|
||||
jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.NEXT_LINK),
|
||||
jgen.writeStringField(Constants.JSON_NEXT_LINK,
|
||||
entitySet.getNext().toASCIIString());
|
||||
}
|
||||
if (entitySet.getDeltaLink() != null) {
|
||||
jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.DELTA_LINK),
|
||||
jgen.writeStringField(Constants.JSON_DELTA_LINK,
|
||||
entitySet.getDeltaLink().toASCIIString());
|
||||
}
|
||||
}
|
||||
|
@ -84,7 +82,7 @@ public class JsonEntitySetSerializer extends JsonSerializer {
|
|||
}
|
||||
|
||||
jgen.writeArrayFieldStart(Constants.VALUE);
|
||||
final JsonEntitySerializer entitySerializer = new JsonEntitySerializer(version, serverMode);
|
||||
final JsonEntitySerializer entitySerializer = new JsonEntitySerializer(serverMode);
|
||||
for (Entity entity : entitySet.getEntities()) {
|
||||
entitySerializer.doSerialize(entity, jgen);
|
||||
}
|
||||
|
|
|
@ -18,12 +18,15 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.core.serialization;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.GeoUtils;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.api.edm.geo.Geospatial;
|
||||
import org.apache.olingo.commons.api.edm.geo.GeospatialCollection;
|
||||
import org.apache.olingo.commons.api.edm.geo.LineString;
|
||||
|
@ -36,19 +39,10 @@ import org.apache.olingo.commons.api.edm.geo.SRID;
|
|||
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
|
||||
import org.apache.olingo.commons.core.edm.primitivetype.EdmDouble;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
|
||||
class JsonGeoValueDeserializer {
|
||||
|
||||
private final ODataServiceVersion version;
|
||||
|
||||
public JsonGeoValueDeserializer(final ODataServiceVersion version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
private Point point(final Iterator<JsonNode> itor, final EdmPrimitiveTypeKind type, final SRID srid) {
|
||||
Point point = null;
|
||||
|
||||
|
@ -208,7 +202,7 @@ class JsonGeoValueDeserializer {
|
|||
final int yIdx = nodeType.indexOf('y');
|
||||
nodeType = nodeType.substring(yIdx + 1);
|
||||
}
|
||||
actualType = EdmPrimitiveTypeKind.valueOfFQN(version, typeInfo.getFullQualifiedName().toString() + nodeType);
|
||||
actualType = EdmPrimitiveTypeKind.valueOfFQN(typeInfo.getFullQualifiedName().toString() + nodeType);
|
||||
} else {
|
||||
actualType = typeInfo.getPrimitiveTypeKind();
|
||||
}
|
||||
|
|
|
@ -18,24 +18,24 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.core.serialization;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.domain.ODataError;
|
||||
import org.apache.olingo.commons.api.domain.ODataErrorDetail;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.domain.ODataError;
|
||||
import org.apache.olingo.commons.api.domain.ODataErrorDetail;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
|
||||
public class JsonODataErrorDeserializer extends JsonDeserializer {
|
||||
|
||||
public JsonODataErrorDeserializer(final ODataServiceVersion version, final boolean serverMode) {
|
||||
super(version, serverMode);
|
||||
public JsonODataErrorDeserializer(final boolean serverMode) {
|
||||
super(serverMode);
|
||||
}
|
||||
|
||||
protected ODataError doDeserialize(final JsonParser parser) throws IOException {
|
||||
|
@ -62,8 +62,7 @@ public class JsonODataErrorDeserializer extends JsonDeserializer {
|
|||
}
|
||||
if (errorNode.hasNonNull(Constants.ERROR_DETAILS)) {
|
||||
List<ODataErrorDetail> details = new ArrayList<ODataErrorDetail>();
|
||||
JsonODataErrorDetailDeserializer detailDeserializer =
|
||||
new JsonODataErrorDetailDeserializer(version, serverMode);
|
||||
JsonODataErrorDetailDeserializer detailDeserializer = new JsonODataErrorDetailDeserializer(serverMode);
|
||||
for (JsonNode jsonNode : errorNode.get(Constants.ERROR_DETAILS)) {
|
||||
details.add(detailDeserializer.doDeserialize(jsonNode.traverse(parser.getCodec()))
|
||||
.getPayload());
|
||||
|
|
|
@ -18,20 +18,20 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.core.serialization;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.domain.ODataErrorDetail;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
|
||||
import java.io.IOException;
|
||||
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.domain.ODataErrorDetail;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
|
||||
public class JsonODataErrorDetailDeserializer extends JsonDeserializer {
|
||||
|
||||
public JsonODataErrorDetailDeserializer(final ODataServiceVersion version, final boolean serverMode) {
|
||||
super(version, serverMode);
|
||||
public JsonODataErrorDetailDeserializer(final boolean serverMode) {
|
||||
super(serverMode);
|
||||
}
|
||||
|
||||
protected ResWrap<ODataErrorDetail> doDeserialize(final JsonParser parser) throws IOException {
|
||||
|
|
|
@ -18,9 +18,11 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.core.serialization;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.Annotation;
|
||||
|
@ -28,23 +30,21 @@ import org.apache.olingo.commons.api.data.Property;
|
|||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.data.ValueType;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.core.data.AnnotationImpl;
|
||||
import org.apache.olingo.commons.core.data.PropertyImpl;
|
||||
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
|
||||
/**
|
||||
* Parse JSON string into <tt>Property</tt>.
|
||||
*/
|
||||
public class JsonPropertyDeserializer extends JsonDeserializer {
|
||||
|
||||
public JsonPropertyDeserializer(final ODataServiceVersion version, final boolean serverMode) {
|
||||
super(version, serverMode);
|
||||
public JsonPropertyDeserializer(final boolean serverMode) {
|
||||
super(serverMode);
|
||||
}
|
||||
|
||||
protected ResWrap<Property> doDeserialize(final JsonParser parser) throws IOException {
|
||||
|
|
|
@ -18,26 +18,26 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.core.serialization;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.Annotation;
|
||||
import org.apache.olingo.commons.api.data.Property;
|
||||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
|
||||
/**
|
||||
* Writes out JSON string from <tt>PropertyImpl</tt>.
|
||||
*/
|
||||
public class JsonPropertySerializer extends JsonSerializer {
|
||||
|
||||
public JsonPropertySerializer(final ODataServiceVersion version, final boolean serverMode) {
|
||||
super(version, serverMode);
|
||||
public JsonPropertySerializer(final boolean serverMode) {
|
||||
super(serverMode);
|
||||
}
|
||||
|
||||
protected void doSerialize(final Property property, final JsonGenerator jgen)
|
||||
|
@ -53,14 +53,12 @@ public class JsonPropertySerializer extends JsonSerializer {
|
|||
jgen.writeStartObject();
|
||||
|
||||
if (serverMode && container.getContextURL() != null) {
|
||||
jgen.writeStringField(version.compareTo(ODataServiceVersion.V40) >= 0
|
||||
? Constants.JSON_CONTEXT : Constants.JSON_METADATA,
|
||||
container.getContextURL().toASCIIString());
|
||||
jgen.writeStringField(Constants.JSON_CONTEXT, container.getContextURL().toASCIIString());
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(property.getType())) {
|
||||
jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.TYPE),
|
||||
new EdmTypeInfo.Builder().setTypeExpression(property.getType()).build().external(version));
|
||||
jgen.writeStringField(Constants.JSON_TYPE,
|
||||
new EdmTypeInfo.Builder().setTypeExpression(property.getType()).build().external());
|
||||
}
|
||||
|
||||
for (Annotation annotation : property.getAnnotations()) {
|
||||
|
|
|
@ -1,51 +1,23 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
* 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.serialization;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonFactory;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.Annotatable;
|
||||
import org.apache.olingo.commons.api.data.Annotation;
|
||||
import org.apache.olingo.commons.api.data.Entity;
|
||||
import org.apache.olingo.commons.api.data.EntitySet;
|
||||
import org.apache.olingo.commons.api.data.Link;
|
||||
import org.apache.olingo.commons.api.data.Linked;
|
||||
import org.apache.olingo.commons.api.data.ComplexValue;
|
||||
import org.apache.olingo.commons.api.data.Property;
|
||||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.data.Valuable;
|
||||
import org.apache.olingo.commons.api.data.ValueType;
|
||||
import org.apache.olingo.commons.api.domain.ODataLinkType;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.apache.olingo.commons.api.edm.geo.Geospatial;
|
||||
import org.apache.olingo.commons.api.format.ODataFormat;
|
||||
import org.apache.olingo.commons.api.serialization.ODataSerializer;
|
||||
import org.apache.olingo.commons.api.serialization.ODataSerializerException;
|
||||
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
|
||||
import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.net.URI;
|
||||
|
@ -54,6 +26,33 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.olingo.commons.api.Constants;
|
||||
import org.apache.olingo.commons.api.data.Annotatable;
|
||||
import org.apache.olingo.commons.api.data.Annotation;
|
||||
import org.apache.olingo.commons.api.data.ComplexValue;
|
||||
import org.apache.olingo.commons.api.data.Entity;
|
||||
import org.apache.olingo.commons.api.data.EntitySet;
|
||||
import org.apache.olingo.commons.api.data.Link;
|
||||
import org.apache.olingo.commons.api.data.Linked;
|
||||
import org.apache.olingo.commons.api.data.Property;
|
||||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.data.Valuable;
|
||||
import org.apache.olingo.commons.api.data.ValueType;
|
||||
import org.apache.olingo.commons.api.domain.ODataLinkType;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
|
||||
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
|
||||
import org.apache.olingo.commons.api.edm.geo.Geospatial;
|
||||
import org.apache.olingo.commons.api.format.ODataFormat;
|
||||
import org.apache.olingo.commons.api.serialization.ODataSerializer;
|
||||
import org.apache.olingo.commons.api.serialization.ODataSerializerException;
|
||||
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
|
||||
import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonFactory;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
|
||||
public class JsonSerializer implements ODataSerializer {
|
||||
|
||||
private static final EdmPrimitiveTypeKind[] NUMBER_TYPES = {
|
||||
|
@ -65,18 +64,15 @@ public class JsonSerializer implements ODataSerializer {
|
|||
|
||||
private final JsonGeoValueSerializer geoSerializer = new JsonGeoValueSerializer();
|
||||
|
||||
protected ODataServiceVersion version;
|
||||
|
||||
protected boolean serverMode;
|
||||
|
||||
protected ODataFormat format;
|
||||
|
||||
public JsonSerializer(final ODataServiceVersion version, final boolean serverMode) {
|
||||
this(version, serverMode, ODataFormat.JSON_FULL_METADATA);
|
||||
public JsonSerializer(final boolean serverMode) {
|
||||
this(serverMode, ODataFormat.JSON_FULL_METADATA);
|
||||
}
|
||||
|
||||
public JsonSerializer(final ODataServiceVersion version, final boolean serverMode, ODataFormat format) {
|
||||
this.version = version;
|
||||
public JsonSerializer(final boolean serverMode, ODataFormat format) {
|
||||
this.serverMode = serverMode;
|
||||
this.format = format;
|
||||
}
|
||||
|
@ -86,11 +82,11 @@ public class JsonSerializer implements ODataSerializer {
|
|||
try {
|
||||
final JsonGenerator json = new JsonFactory().createGenerator(writer);
|
||||
if (obj instanceof EntitySet) {
|
||||
new JsonEntitySetSerializer(version, serverMode).doSerialize((EntitySet) obj, json);
|
||||
new JsonEntitySetSerializer(serverMode).doSerialize((EntitySet) obj, json);
|
||||
} else if (obj instanceof Entity) {
|
||||
new JsonEntitySerializer(version, serverMode, format).doSerialize((Entity) obj, json);
|
||||
new JsonEntitySerializer(serverMode, format).doSerialize((Entity) obj, json);
|
||||
} else if (obj instanceof Property) {
|
||||
new JsonPropertySerializer(version, serverMode).doSerialize((Property) obj, json);
|
||||
new JsonPropertySerializer(serverMode).doSerialize((Property) obj, json);
|
||||
} else if (obj instanceof Link) {
|
||||
link((Link) obj, json);
|
||||
}
|
||||
|
@ -102,12 +98,12 @@ public class JsonSerializer implements ODataSerializer {
|
|||
}
|
||||
}
|
||||
|
||||
private void reference(ResWrap<URI>container, JsonGenerator json) throws IOException {
|
||||
private void reference(ResWrap<URI> container, JsonGenerator json) throws IOException {
|
||||
json.writeStartObject();
|
||||
|
||||
|
||||
json.writeStringField(Constants.JSON_CONTEXT, container.getContextURL().toASCIIString());
|
||||
json.writeStringField(Constants.JSON_ID, container.getPayload().toASCIIString());
|
||||
|
||||
|
||||
json.writeEndObject();
|
||||
}
|
||||
|
||||
|
@ -118,14 +114,14 @@ public class JsonSerializer implements ODataSerializer {
|
|||
try {
|
||||
final JsonGenerator json = new JsonFactory().createGenerator(writer);
|
||||
if (obj instanceof EntitySet) {
|
||||
new JsonEntitySetSerializer(version, serverMode).doContainerSerialize((ResWrap<EntitySet>) container, json);
|
||||
new JsonEntitySetSerializer(serverMode).doContainerSerialize((ResWrap<EntitySet>) container, json);
|
||||
} else if (obj instanceof Entity) {
|
||||
new JsonEntitySerializer(version, serverMode).doContainerSerialize((ResWrap<Entity>) container, json);
|
||||
new JsonEntitySerializer(serverMode).doContainerSerialize((ResWrap<Entity>) container, json);
|
||||
} else if (obj instanceof Property) {
|
||||
new JsonPropertySerializer(version, serverMode).doContainerSerialize((ResWrap<Property>) container, json);
|
||||
new JsonPropertySerializer(serverMode).doContainerSerialize((ResWrap<Property>) container, json);
|
||||
} else if (obj instanceof Link) {
|
||||
link((Link) obj, json);
|
||||
} else if(obj instanceof URI) {
|
||||
} else if (obj instanceof URI) {
|
||||
reference((ResWrap<URI>) container, json);
|
||||
}
|
||||
json.flush();
|
||||
|
@ -143,7 +139,7 @@ public class JsonSerializer implements ODataSerializer {
|
|||
}
|
||||
|
||||
protected void links(final Linked linked, final JsonGenerator jgen)
|
||||
throws IOException, EdmPrimitiveTypeException {
|
||||
throws IOException, EdmPrimitiveTypeException {
|
||||
|
||||
if (serverMode) {
|
||||
serverLinks(linked, jgen);
|
||||
|
@ -153,7 +149,7 @@ public class JsonSerializer implements ODataSerializer {
|
|||
}
|
||||
|
||||
protected void clientLinks(final Linked linked, final JsonGenerator jgen)
|
||||
throws IOException, EdmPrimitiveTypeException {
|
||||
throws IOException, EdmPrimitiveTypeException {
|
||||
|
||||
final Map<String, List<String>> entitySetLinks = new HashMap<String, List<String>>();
|
||||
for (Link link : linked.getNavigationLinks()) {
|
||||
|
@ -163,7 +159,7 @@ public class JsonSerializer implements ODataSerializer {
|
|||
|
||||
ODataLinkType type = null;
|
||||
try {
|
||||
type = ODataLinkType.fromString(version, link.getRel(), link.getType());
|
||||
type = ODataLinkType.fromString(link.getRel(), link.getType());
|
||||
} catch (IllegalArgumentException e) {
|
||||
// ignore
|
||||
}
|
||||
|
@ -187,10 +183,10 @@ public class JsonSerializer implements ODataSerializer {
|
|||
|
||||
if (link.getInlineEntity() != null) {
|
||||
jgen.writeFieldName(link.getTitle());
|
||||
new JsonEntitySerializer(version, serverMode).doSerialize(link.getInlineEntity(), jgen);
|
||||
new JsonEntitySerializer(serverMode).doSerialize(link.getInlineEntity(), jgen);
|
||||
} else if (link.getInlineEntitySet() != null) {
|
||||
jgen.writeArrayFieldStart(link.getTitle());
|
||||
final JsonEntitySerializer entitySerializer = new JsonEntitySerializer(version, serverMode);
|
||||
final JsonEntitySerializer entitySerializer = new JsonEntitySerializer(serverMode);
|
||||
for (Entity subEntry : link.getInlineEntitySet().getEntities()) {
|
||||
entitySerializer.doSerialize(subEntry, jgen);
|
||||
}
|
||||
|
@ -214,8 +210,7 @@ public class JsonSerializer implements ODataSerializer {
|
|||
for (Link link : ((Entity) linked).getMediaEditLinks()) {
|
||||
if (StringUtils.isNotBlank(link.getHref())) {
|
||||
jgen.writeStringField(
|
||||
link.getTitle() + StringUtils.prependIfMissing(
|
||||
version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_EDIT_LINK), "@"),
|
||||
link.getTitle() + StringUtils.prependIfMissing(Constants.JSON_MEDIA_EDIT_LINK, "@"),
|
||||
link.getHref());
|
||||
}
|
||||
}
|
||||
|
@ -224,7 +219,7 @@ public class JsonSerializer implements ODataSerializer {
|
|||
for (Link link : linked.getAssociationLinks()) {
|
||||
if (StringUtils.isNotBlank(link.getHref())) {
|
||||
jgen.writeStringField(
|
||||
link.getTitle() + version.getJsonName(ODataServiceVersion.JsonKey.ASSOCIATION_LINK),
|
||||
link.getTitle() + Constants.JSON_ASSOCIATION_LINK,
|
||||
link.getHref());
|
||||
}
|
||||
}
|
||||
|
@ -236,16 +231,16 @@ public class JsonSerializer implements ODataSerializer {
|
|||
|
||||
if (StringUtils.isNotBlank(link.getHref())) {
|
||||
jgen.writeStringField(
|
||||
link.getTitle() + version.getJsonName(ODataServiceVersion.JsonKey.NAVIGATION_LINK),
|
||||
link.getTitle() + Constants.JSON_NAVIGATION_LINK,
|
||||
link.getHref());
|
||||
}
|
||||
|
||||
if (link.getInlineEntity() != null) {
|
||||
jgen.writeFieldName(link.getTitle());
|
||||
new JsonEntitySerializer(version, serverMode).doSerialize(link.getInlineEntity(), jgen);
|
||||
new JsonEntitySerializer(serverMode).doSerialize(link.getInlineEntity(), jgen);
|
||||
} else if (link.getInlineEntitySet() != null) {
|
||||
jgen.writeArrayFieldStart(link.getTitle());
|
||||
JsonEntitySerializer entitySerializer = new JsonEntitySerializer(version, serverMode);
|
||||
JsonEntitySerializer entitySerializer = new JsonEntitySerializer(serverMode);
|
||||
for (Entity subEntry : link.getInlineEntitySet().getEntities()) {
|
||||
entitySerializer.doSerialize(subEntry, jgen);
|
||||
}
|
||||
|
@ -255,36 +250,36 @@ public class JsonSerializer implements ODataSerializer {
|
|||
}
|
||||
|
||||
private void collection(final JsonGenerator jgen, final EdmTypeInfo typeInfo,
|
||||
final ValueType valueType, final List<?> value)
|
||||
final ValueType valueType, final List<?> value)
|
||||
throws IOException, EdmPrimitiveTypeException {
|
||||
|
||||
jgen.writeStartArray();
|
||||
|
||||
for (Object item : value) {
|
||||
final EdmTypeInfo itemTypeInfo = typeInfo == null
|
||||
? null
|
||||
: new EdmTypeInfo.Builder().setTypeExpression(typeInfo.getFullQualifiedName().toString()).build();
|
||||
? null
|
||||
: new EdmTypeInfo.Builder().setTypeExpression(typeInfo.getFullQualifiedName().toString()).build();
|
||||
switch (valueType) {
|
||||
case COLLECTION_PRIMITIVE:
|
||||
primitiveValue(jgen, itemTypeInfo, item);
|
||||
break;
|
||||
case COLLECTION_PRIMITIVE:
|
||||
primitiveValue(jgen, itemTypeInfo, item);
|
||||
break;
|
||||
|
||||
case COLLECTION_GEOSPATIAL:
|
||||
jgen.writeStartObject();
|
||||
geoSerializer.serialize(jgen, (Geospatial) item);
|
||||
jgen.writeEndObject();
|
||||
break;
|
||||
case COLLECTION_GEOSPATIAL:
|
||||
jgen.writeStartObject();
|
||||
geoSerializer.serialize(jgen, (Geospatial) item);
|
||||
jgen.writeEndObject();
|
||||
break;
|
||||
|
||||
case COLLECTION_ENUM:
|
||||
jgen.writeString(item.toString());
|
||||
break;
|
||||
case COLLECTION_ENUM:
|
||||
jgen.writeString(item.toString());
|
||||
break;
|
||||
|
||||
case COLLECTION_COMPLEX:
|
||||
final ComplexValue complexItem2 = (ComplexValue) item;
|
||||
complexValue(jgen, itemTypeInfo, complexItem2.getValue(), complexItem2);
|
||||
break;
|
||||
case COLLECTION_COMPLEX:
|
||||
final ComplexValue complexItem2 = (ComplexValue) item;
|
||||
complexValue(jgen, itemTypeInfo, complexItem2.getValue(), complexItem2);
|
||||
break;
|
||||
|
||||
default:
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -292,7 +287,7 @@ public class JsonSerializer implements ODataSerializer {
|
|||
}
|
||||
|
||||
protected void primitiveValue(final JsonGenerator jgen, final EdmTypeInfo typeInfo, final Object value)
|
||||
throws IOException, EdmPrimitiveTypeException {
|
||||
throws IOException, EdmPrimitiveTypeException {
|
||||
|
||||
final EdmPrimitiveTypeKind kind = typeInfo == null ? null : typeInfo.getPrimitiveTypeKind();
|
||||
final boolean isNumber = kind == null ? value instanceof Number : ArrayUtils.contains(NUMBER_TYPES, kind);
|
||||
|
@ -304,9 +299,9 @@ public class JsonSerializer implements ODataSerializer {
|
|||
jgen.writeBoolean((Boolean) value);
|
||||
} else {
|
||||
final String serialized = kind == null
|
||||
? value.toString()
|
||||
// TODO: add facets
|
||||
: EdmPrimitiveTypeFactory.getInstance(kind).
|
||||
? value.toString()
|
||||
// TODO: add facets
|
||||
: EdmPrimitiveTypeFactory.getInstance(kind).
|
||||
valueToString(value, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null);
|
||||
if (isNumber) {
|
||||
jgen.writeNumber(serialized);
|
||||
|
@ -317,12 +312,12 @@ public class JsonSerializer implements ODataSerializer {
|
|||
}
|
||||
|
||||
private void complexValue(final JsonGenerator jgen, final EdmTypeInfo typeInfo,
|
||||
final List<Property> value, final Linked linked)
|
||||
final List<Property> value, final Linked linked)
|
||||
throws IOException, EdmPrimitiveTypeException {
|
||||
jgen.writeStartObject();
|
||||
|
||||
if (typeInfo != null && format != ODataFormat.JSON_NO_METADATA) {
|
||||
jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.TYPE), typeInfo.external(version));
|
||||
jgen.writeStringField(Constants.JSON_TYPE, typeInfo.external());
|
||||
}
|
||||
|
||||
for (Property property : value) {
|
||||
|
@ -336,7 +331,7 @@ public class JsonSerializer implements ODataSerializer {
|
|||
}
|
||||
|
||||
private void value(final JsonGenerator jgen, final String type, final Valuable value)
|
||||
throws IOException, EdmPrimitiveTypeException {
|
||||
throws IOException, EdmPrimitiveTypeException {
|
||||
final EdmTypeInfo typeInfo = type == null ? null : new EdmTypeInfo.Builder().setTypeExpression(type).build();
|
||||
|
||||
if (value.isNull()) {
|
||||
|
@ -357,10 +352,10 @@ public class JsonSerializer implements ODataSerializer {
|
|||
}
|
||||
|
||||
protected void valuable(final JsonGenerator jgen, final Valuable valuable, final String name)
|
||||
throws IOException, EdmPrimitiveTypeException {
|
||||
throws IOException, EdmPrimitiveTypeException {
|
||||
|
||||
if (!Constants.VALUE.equals(name) && !(valuable instanceof Annotation)
|
||||
&& !valuable.isComplex() && !valuable.isComplex()) {
|
||||
&& !valuable.isComplex() && !valuable.isComplex()) {
|
||||
|
||||
String type = valuable.getType();
|
||||
if (StringUtils.isBlank(type) && valuable.isPrimitive() || valuable.isNull()) {
|
||||
|
@ -368,8 +363,8 @@ public class JsonSerializer implements ODataSerializer {
|
|||
}
|
||||
if (StringUtils.isNotBlank(type) && format != ODataFormat.JSON_NO_METADATA) {
|
||||
jgen.writeFieldName(
|
||||
name + StringUtils.prependIfMissing(version.getJsonName(ODataServiceVersion.JsonKey.TYPE), "@"));
|
||||
jgen.writeString(new EdmTypeInfo.Builder().setTypeExpression(type).build().external(version));
|
||||
name + StringUtils.prependIfMissing(Constants.JSON_TYPE, "@"));
|
||||
jgen.writeString(new EdmTypeInfo.Builder().setTypeExpression(type).build().external());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,9 @@
|
|||
*/
|
||||
package org.apache.olingo.commons.core.serialization;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.InputStream;
|
||||
|
@ -26,7 +28,6 @@ import java.io.InputStream;
|
|||
import org.apache.olingo.commons.api.data.Entity;
|
||||
import org.apache.olingo.commons.api.data.EntitySet;
|
||||
import org.apache.olingo.commons.api.data.ResWrap;
|
||||
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
|
||||
import org.junit.Test;
|
||||
|
||||
public class AtomDeserializerTest {
|
||||
|
@ -35,23 +36,23 @@ public class AtomDeserializerTest {
|
|||
public void emptyInlineEntityOlingo540() throws Exception {
|
||||
final String content = "" +
|
||||
"<entry xmlns=\"http://www.w3.org/2005/Atom\" "
|
||||
+ "xmlns:d=\"http://schemas.microsoft.com/ado/2007/08/dataservices\" "
|
||||
+ "xmlns:m=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\" "
|
||||
+ "xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\" "
|
||||
+ "xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\" "
|
||||
+ "xmlns:georss=\"http://www.georss.org/georss\" xmlns:gml=\"http://www.opengis.net/gml\" "
|
||||
+ "xml:base=\"http://services.odata.org/V3/OData/OData.svc/\">\r\n" +
|
||||
" <id>http://services.odata.org/V3/OData/OData.svc/Products(3)</id>\r\n" +
|
||||
" <category term=\"ODataDemo.Product\" "
|
||||
+ "scheme=\"http://schemas.microsoft.com/ado/2007/08/dataservices/scheme\" />\r\n" +
|
||||
+ "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" +
|
||||
" \r\n" +
|
||||
" <link rel=\"edit\" title=\"Product\" href=\"Products\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/related/Categories\" "
|
||||
+ "type=\"application/atom+xml;type=feed\" title=\"Categories\" href=\"Products(3)/Categories\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/Supplier\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/related/Supplier\" "
|
||||
+ "type=\"application/atom+xml;type=entry\" title=\"Supplier\" href=\"Products(3)/Supplier\">\r\n" +
|
||||
" <m:inline>\r\n" +
|
||||
" </m:inline>\r\n" +
|
||||
" <metadata:inline>\r\n" +
|
||||
" </metadata:inline>\r\n" +
|
||||
" </link>\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/ProductDetail\""
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/related/ProductDetail\""
|
||||
+ " type=\"application/atom+xml;type=entry\" title=\"ProductDetail\" "
|
||||
+ "href=\"Products(3)/ProductDetail\" />\r\n" +
|
||||
" <title type=\"text\">Havina Cola</title>\r\n" +
|
||||
|
@ -60,24 +61,25 @@ public class AtomDeserializerTest {
|
|||
" <author>\r\n" +
|
||||
" <name />\r\n" +
|
||||
" </author>\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/relatedlinks/Categories\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Categories\" "
|
||||
+ "type=\"application/xml\" title=\"Categories\" href=\"Products(3)/$links/Categories\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/relatedlinks/Supplier\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Supplier\" "
|
||||
+ "type=\"application/xml\" title=\"Supplier\" href=\"Products(3)/$links/Supplier\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/relatedlinks/ProductDetail\""
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/ProductDetail\""
|
||||
+ " type=\"application/xml\" title=\"ProductDetail\" href=\"Products(3)/$links/ProductDetail\" />\r\n" +
|
||||
" <content type=\"application/xml\">\r\n" +
|
||||
" <m:properties>\r\n" +
|
||||
" <d:ID m:type=\"Edm.Int32\">3</d:ID>\r\n" +
|
||||
" <d:ReleaseDate m:type=\"Edm.DateTime\">2005-10-01T00:00:00</d:ReleaseDate>\r\n" +
|
||||
" <d:DiscontinuedDate m:type=\"Edm.DateTime\">2006-10-01T00:00:00</d:DiscontinuedDate>\r\n" +
|
||||
" <d:Rating m:type=\"Edm.Int16\">3</d:Rating>\r\n" +
|
||||
" <d:Price m:type=\"Edm.Double\">19.9</d:Price>\r\n" +
|
||||
" </m:properties>\r\n" +
|
||||
" <metadata:properties>\r\n" +
|
||||
" <data:ID metadata:type=\"Edm.Int32\">3</data:ID>\r\n" +
|
||||
" <data:ReleaseDate metadata:type=\"Edm.DateTime\">2005-10-01T00:00:00</data:ReleaseDate>\r\n" +
|
||||
" <data:DiscontinuedDate metadata:type=\"Edm.DateTime\">2006-10-01T00:00:00</data:DiscontinuedDate>\r\n" +
|
||||
" <data:Rating metadata:type=\"Edm.Int16\">3</data:Rating>\r\n" +
|
||||
" <data:Price metadata:type=\"Edm.Double\">19.9</data:Price>\r\n" +
|
||||
" </metadata:properties>\r\n" +
|
||||
" </content>\r\n" +
|
||||
" </entry>";
|
||||
|
||||
final AtomDeserializer deserializer = new AtomDeserializer(ODataServiceVersion.V30);
|
||||
//TODO: THis was a test for V3
|
||||
final AtomDeserializer deserializer = new AtomDeserializer();
|
||||
final InputStream in = new ByteArrayInputStream(content.getBytes("UTF-8"));
|
||||
final ResWrap<Entity> entity = deserializer.toEntity(in);
|
||||
|
||||
|
@ -89,58 +91,58 @@ public class AtomDeserializerTest {
|
|||
public void filledInlineEntity() throws Exception {
|
||||
final String content = "" +
|
||||
"<entry xmlns=\"http://www.w3.org/2005/Atom\" "
|
||||
+ "xmlns:d=\"http://schemas.microsoft.com/ado/2007/08/dataservices\" "
|
||||
+ "xmlns:m=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\" "
|
||||
+ "xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\" "
|
||||
+ "xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\" "
|
||||
+ "xmlns:georss=\"http://www.georss.org/georss\" "
|
||||
+ "xmlns:gml=\"http://www.opengis.net/gml\" "
|
||||
+ "xml:base=\"http://services.odata.org/V3/OData/OData.svc/\">\r\n" +
|
||||
" <id>http://services.odata.org/V3/OData/OData.svc/Products(3)</id>\r\n" +
|
||||
" <category term=\"ODataDemo.Product\" "
|
||||
+ "scheme=\"http://schemas.microsoft.com/ado/2007/08/dataservices/scheme\" />\r\n" +
|
||||
+ "xml:base=\"http://services.odata.org/V4/OData/OData.svc/\">\r\n" +
|
||||
" <id>http://services.odata.org/V4/OData/OData.svc/Products(3)</id>\r\n" +
|
||||
" <category term=\"#ODataDemo.Product\" "
|
||||
+ "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" +
|
||||
" \r\n" +
|
||||
" <link rel=\"edit\" title=\"Product\" href=\"Products\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/related/Categories\" "
|
||||
+ "type=\"application/atom+xml;type=feed\" title=\"Categories\" href=\"Products(3)/Categories\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/Supplier\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/related/Supplier\" "
|
||||
+ "type=\"application/atom+xml;type=entry\" title=\"Supplier\" href=\"Products(3)/Supplier\">\r\n" +
|
||||
" <m:inline>\r\n" +
|
||||
" <metadata:inline>\r\n" +
|
||||
" <entry>\r\n" +
|
||||
" <id>http://services.odata.org/V3/OData/OData.svc/Suppliers(0)</id>\r\n" +
|
||||
" <id>http://services.odata.org/V4/OData/OData.svc/Suppliers(0)</id>\r\n" +
|
||||
" <category term=\"ODataDemo.Supplier\" "
|
||||
+ "scheme=\"http://schemas.microsoft.com/ado/2007/08/dataservices/scheme\" />\r\n" +
|
||||
+ "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" +
|
||||
" <link rel=\"edit\" title=\"Supplier\" href=\"Suppliers(0)\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/Products\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/related/Products\" "
|
||||
+ "type=\"application/atom+xml;type=feed\" title=\"Products\" href=\"Suppliers(0)/Products\" />\r\n" +
|
||||
" <title type=\"text\">Exotic Liquids</title>\r\n" +
|
||||
" <updated>2015-01-26T08:57:02Z</updated>\r\n" +
|
||||
" <author>\r\n" +
|
||||
" <name />\r\n" +
|
||||
" </author>\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/relatedlinks/Products\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Products\" "
|
||||
+ "type=\"application/xml\" title=\"Products\" href=\"Suppliers(0)/$links/Products\" />\r\n" +
|
||||
" <content type=\"application/xml\">\r\n" +
|
||||
" <m:properties>\r\n" +
|
||||
" <d:ID m:type=\"Edm.Int32\">0</d:ID>\r\n" +
|
||||
" <d:Name>Exotic Liquids</d:Name>\r\n" +
|
||||
" <d:Address m:type=\"ODataDemo.Address\">\r\n" +
|
||||
" <d:Street>NE 228th</d:Street>\r\n" +
|
||||
" <d:City>Sammamish</d:City>\r\n" +
|
||||
" <d:State>WA</d:State>\r\n" +
|
||||
" <d:ZipCode>98074</d:ZipCode>\r\n" +
|
||||
" <d:Country>USA</d:Country>\r\n" +
|
||||
" </d:Address>\r\n" +
|
||||
" <d:Location m:type=\"Edm.GeographyPoint\">\r\n" +
|
||||
" <metadata:properties>\r\n" +
|
||||
" <data:ID metadata:type=\"Edm.Int32\">0</data:ID>\r\n" +
|
||||
" <data:Name>Exotic Liquids</data:Name>\r\n" +
|
||||
" <data:Address metadata:type=\"ODataDemo.Address\">\r\n" +
|
||||
" <data:Street>NE 228th</data:Street>\r\n" +
|
||||
" <data:City>Sammamish</data:City>\r\n" +
|
||||
" <data:State>WA</data:State>\r\n" +
|
||||
" <data:ZipCode>98074</data:ZipCode>\r\n" +
|
||||
" <data:Country>USA</data:Country>\r\n" +
|
||||
" </data:Address>\r\n" +
|
||||
" <data:Location metadata:type=\"Edm.GeographyPoint\">\r\n" +
|
||||
" <gml:Point gml:srsName=\"http://www.opengis.net/def/crs/EPSG/0/4326\">\r\n" +
|
||||
" <gml:pos>47.6316604614258 -122.03547668457</gml:pos>\r\n" +
|
||||
" </gml:Point>\r\n" +
|
||||
" </d:Location>\r\n" +
|
||||
" <d:Concurrency m:type=\"Edm.Int32\">0</d:Concurrency>\r\n" +
|
||||
" </m:properties>\r\n" +
|
||||
" </data:Location>\r\n" +
|
||||
" <data:Concurrency metadata:type=\"Edm.Int32\">0</data:Concurrency>\r\n" +
|
||||
" </metadata:properties>\r\n" +
|
||||
" </content>\r\n" +
|
||||
" </entry>" +
|
||||
" </m:inline>\r\n" +
|
||||
" </metadata:inline>\r\n" +
|
||||
" </link>\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/ProductDetail\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/related/ProductDetail\" "
|
||||
+ "type=\"application/atom+xml;type=entry\" "
|
||||
+ "title=\"ProductDetail\" href=\"Products(3)/ProductDetail\" />\r\n" +
|
||||
" <title type=\"text\">Havina Cola</title>\r\n" +
|
||||
|
@ -149,24 +151,23 @@ public class AtomDeserializerTest {
|
|||
" <author>\r\n" +
|
||||
" <name />\r\n" +
|
||||
" </author>\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/relatedlinks/Categories\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Categories\" "
|
||||
+ "type=\"application/xml\" title=\"Categories\" href=\"Products(3)/$links/Categories\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/relatedlinks/Supplier\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Supplier\" "
|
||||
+ "type=\"application/xml\" title=\"Supplier\" href=\"Products(3)/$links/Supplier\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/relatedlinks/ProductDetail\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/ProductDetail\" "
|
||||
+ "type=\"application/xml\" title=\"ProductDetail\" href=\"Products(3)/$links/ProductDetail\" />\r\n" +
|
||||
" <content type=\"application/xml\">\r\n" +
|
||||
" <m:properties>\r\n" +
|
||||
" <d:ID m:type=\"Edm.Int32\">3</d:ID>\r\n" +
|
||||
" <d:ReleaseDate m:type=\"Edm.DateTime\">2005-10-01T00:00:00</d:ReleaseDate>\r\n" +
|
||||
" <d:DiscontinuedDate m:type=\"Edm.DateTime\">2006-10-01T00:00:00</d:DiscontinuedDate>\r\n" +
|
||||
" <d:Rating m:type=\"Edm.Int16\">3</d:Rating>\r\n" +
|
||||
" <d:Price m:type=\"Edm.Double\">19.9</d:Price>\r\n" +
|
||||
" </m:properties>\r\n" +
|
||||
" <metadata:properties>\r\n" +
|
||||
" <data:ID metadata:type=\"Edm.Int32\">3</data:ID>\r\n" +
|
||||
" <data:ReleaseDate metadata:type=\"Edm.DateTime\">2005-10-01T00:00:00</data:ReleaseDate>\r\n" +
|
||||
" <data:DiscontinuedDate metadata:type=\"Edm.DateTime\">2006-10-01T00:00:00</data:DiscontinuedDate>\r\n" +
|
||||
" <data:Rating metadata:type=\"Edm.Int16\">3</data:Rating>\r\n" +
|
||||
" <data:Price metadata:type=\"Edm.Double\">19.9</data:Price>\r\n" +
|
||||
" </metadata:properties>\r\n" +
|
||||
" </content>\r\n" +
|
||||
" </entry>";
|
||||
|
||||
final AtomDeserializer deserializer = new AtomDeserializer(ODataServiceVersion.V30);
|
||||
final AtomDeserializer deserializer = new AtomDeserializer();
|
||||
final InputStream in = new ByteArrayInputStream(content.getBytes("UTF-8"));
|
||||
final ResWrap<Entity> entity = deserializer.toEntity(in);
|
||||
|
||||
|
@ -182,25 +183,25 @@ public class AtomDeserializerTest {
|
|||
public void emptyInlineEntityCollection() throws Exception {
|
||||
final String content = "" +
|
||||
"<entry xmlns=\"http://www.w3.org/2005/Atom\" "
|
||||
+ "xmlns:d=\"http://schemas.microsoft.com/ado/2007/08/dataservices\" "
|
||||
+ "xmlns:m=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\" "
|
||||
+ "xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\" "
|
||||
+ "xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\" "
|
||||
+ "xmlns:georss=\"http://www.georss.org/georss\" xmlns:gml=\"http://www.opengis.net/gml\" "
|
||||
+ "xml:base=\"http://services.odata.org/V3/OData/OData.svc/\">\r\n" +
|
||||
" <id>http://services.odata.org/V3/OData/OData.svc/Products(3)</id>\r\n" +
|
||||
" <category term=\"ODataDemo.Product\" "
|
||||
+ "scheme=\"http://schemas.microsoft.com/ado/2007/08/dataservices/scheme\" />\r\n" +
|
||||
+ "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" +
|
||||
" \r\n" +
|
||||
" <link rel=\"edit\" title=\"Product\" href=\"Products(3)\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/related/Categories\" "
|
||||
+ "type=\"application/atom+xml;type=feed\" title=\"Categories\" href=\"Products(3)/Categories\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/Supplier\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/related/Supplier\" "
|
||||
+ "type=\"application/atom+xml;type=feed\" title=\"Supplier\" href=\"Products(3)/Supplier\">\r\n" +
|
||||
" <m:inline>\r\n" +
|
||||
" <metadata:inline>\r\n" +
|
||||
" <feed>\r\n" +
|
||||
" </feed>\r\n" +
|
||||
" </m:inline>\r\n" +
|
||||
" </metadata:inline>\r\n" +
|
||||
" </link>\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/ProductDetail\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/related/ProductDetail\" "
|
||||
+ "type=\"application/atom+xml;type=entry\" "
|
||||
+ "title=\"ProductDetail\" href=\"Products(3)/ProductDetail\" />\r\n" +
|
||||
" <title type=\"text\">Havina Cola</title>\r\n" +
|
||||
|
@ -209,24 +210,24 @@ public class AtomDeserializerTest {
|
|||
" <author>\r\n" +
|
||||
" <name />\r\n" +
|
||||
" </author>\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/relatedlinks/Categories\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Categories\" "
|
||||
+ "type=\"application/xml\" title=\"Categories\" href=\"Products(3)/$links/Categories\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/relatedlinks/Supplier\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Supplier\" "
|
||||
+ "type=\"application/xml\" title=\"Supplier\" href=\"Products(3)/$links/Supplier\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/relatedlinks/ProductDetail\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/ProductDetail\" "
|
||||
+ "type=\"application/xml\" title=\"ProductDetail\" href=\"Products(3)/$links/ProductDetail\" />\r\n" +
|
||||
" <content type=\"application/xml\">\r\n" +
|
||||
" <m:properties>\r\n" +
|
||||
" <d:ID m:type=\"Edm.Int32\">3</d:ID>\r\n" +
|
||||
" <d:ReleaseDate m:type=\"Edm.DateTime\">2005-10-01T00:00:00</d:ReleaseDate>\r\n" +
|
||||
" <d:DiscontinuedDate m:type=\"Edm.DateTime\">2006-10-01T00:00:00</d:DiscontinuedDate>\r\n" +
|
||||
" <d:Rating m:type=\"Edm.Int16\">3</d:Rating>\r\n" +
|
||||
" <d:Price m:type=\"Edm.Double\">19.9</d:Price>\r\n" +
|
||||
" </m:properties>\r\n" +
|
||||
" <metadata:properties>\r\n" +
|
||||
" <data:ID metadata:type=\"Edm.Int32\">3</data:ID>\r\n" +
|
||||
" <data:ReleaseDate metadata:type=\"Edm.DateTime\">2005-10-01T00:00:00</data:ReleaseDate>\r\n" +
|
||||
" <data:DiscontinuedDate metadata:type=\"Edm.DateTime\">2006-10-01T00:00:00</data:DiscontinuedDate>\r\n" +
|
||||
" <data:Rating metadata:type=\"Edm.Int16\">3</data:Rating>\r\n" +
|
||||
" <data:Price metadata:type=\"Edm.Double\">19.9</data:Price>\r\n" +
|
||||
" </metadata:properties>\r\n" +
|
||||
" </content>\r\n" +
|
||||
" </entry>";
|
||||
|
||||
final AtomDeserializer deserializer = new AtomDeserializer(ODataServiceVersion.V30);
|
||||
//TODO: THis was a test for V3
|
||||
final AtomDeserializer deserializer = new AtomDeserializer();
|
||||
final InputStream in = new ByteArrayInputStream(content.getBytes("UTF-8"));
|
||||
final ResWrap<Entity> entity = deserializer.toEntity(in);
|
||||
|
||||
|
@ -240,59 +241,59 @@ public class AtomDeserializerTest {
|
|||
public void filledInlineEntityCollection() throws Exception {
|
||||
final String content = "" +
|
||||
"<entry xmlns=\"http://www.w3.org/2005/Atom\" "
|
||||
+ "xmlns:d=\"http://schemas.microsoft.com/ado/2007/08/dataservices\" "
|
||||
+ "xmlns:m=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\" "
|
||||
+ "xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\" "
|
||||
+ "xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\" "
|
||||
+ "xmlns:georss=\"http://www.georss.org/georss\" xmlns:gml=\"http://www.opengis.net/gml\" "
|
||||
+ "xml:base=\"http://services.odata.org/V3/OData/OData.svc/\">\r\n" +
|
||||
" <id>http://services.odata.org/V3/OData/OData.svc/Products(3)</id>\r\n" +
|
||||
" <category term=\"ODataDemo.Product\" "
|
||||
+ "scheme=\"http://schemas.microsoft.com/ado/2007/08/dataservices/scheme\" />\r\n" +
|
||||
+ "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" +
|
||||
" \r\n" +
|
||||
" <link rel=\"edit\" title=\"Product\" href=\"Products(3)\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/related/Categories\" "
|
||||
+ "type=\"application/atom+xml;type=feed\" title=\"Categories\" href=\"Products(3)/Categories\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/Supplier\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/related/Supplier\" "
|
||||
+ "type=\"application/atom+xml;type=feed\" title=\"Supplier\" href=\"Products(3)/Supplier\">\r\n" +
|
||||
" <m:inline>\r\n" +
|
||||
" <metadata:inline>\r\n" +
|
||||
" <feed>\r\n" +
|
||||
" <entry>\r\n" +
|
||||
" <id>http://services.odata.org/V3/OData/OData.svc/Suppliers(0)</id>\r\n" +
|
||||
" <category term=\"ODataDemo.Supplier\" "
|
||||
+ "scheme=\"http://schemas.microsoft.com/ado/2007/08/dataservices/scheme\" />\r\n" +
|
||||
+ "scheme=\"http://docs.oasis-open.org/odata/ns/scheme\" />\r\n" +
|
||||
" <link rel=\"edit\" title=\"Supplier\" href=\"Suppliers(0)\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/Products\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/related/Products\" "
|
||||
+ "type=\"application/atom+xml;type=feed\" title=\"Products\" href=\"Suppliers(0)/Products\" />\r\n" +
|
||||
" <title type=\"text\">Exotic Liquids</title>\r\n" +
|
||||
" <updated>2015-01-26T08:57:02Z</updated>\r\n" +
|
||||
" <author>\r\n" +
|
||||
" <name />\r\n" +
|
||||
" </author>\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/relatedlinks/Products\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Products\" "
|
||||
+ "type=\"application/xml\" title=\"Products\" href=\"Suppliers(0)/$links/Products\" />\r\n" +
|
||||
" <content type=\"application/xml\">\r\n" +
|
||||
" <m:properties>\r\n" +
|
||||
" <d:ID m:type=\"Edm.Int32\">0</d:ID>\r\n" +
|
||||
" <d:Name>Exotic Liquids</d:Name>\r\n" +
|
||||
" <d:Address m:type=\"ODataDemo.Address\">\r\n" +
|
||||
" <d:Street>NE 228th</d:Street>\r\n" +
|
||||
" <d:City>Sammamish</d:City>\r\n" +
|
||||
" <d:State>WA</d:State>\r\n" +
|
||||
" <d:ZipCode>98074</d:ZipCode>\r\n" +
|
||||
" <d:Country>USA</d:Country>\r\n" +
|
||||
" </d:Address>\r\n" +
|
||||
" <d:Location m:type=\"Edm.GeographyPoint\">\r\n" +
|
||||
" <metadata:properties>\r\n" +
|
||||
" <data:ID metadata:type=\"Edm.Int32\">0</data:ID>\r\n" +
|
||||
" <data:Name>Exotic Liquids</data:Name>\r\n" +
|
||||
" <data:Address metadata:type=\"ODataDemo.Address\">\r\n" +
|
||||
" <data:Street>NE 228th</data:Street>\r\n" +
|
||||
" <data:City>Sammamish</data:City>\r\n" +
|
||||
" <data:State>WA</data:State>\r\n" +
|
||||
" <data:ZipCode>98074</data:ZipCode>\r\n" +
|
||||
" <data:Country>USA</data:Country>\r\n" +
|
||||
" </data:Address>\r\n" +
|
||||
" <data:Location metadata:type=\"Edm.GeographyPoint\">\r\n" +
|
||||
" <gml:Point gml:srsName=\"http://www.opengis.net/def/crs/EPSG/0/4326\">\r\n" +
|
||||
" <gml:pos>47.6316604614258 -122.03547668457</gml:pos>\r\n" +
|
||||
" </gml:Point>\r\n" +
|
||||
" </d:Location>\r\n" +
|
||||
" <d:Concurrency m:type=\"Edm.Int32\">0</d:Concurrency>\r\n" +
|
||||
" </m:properties>\r\n" +
|
||||
" </data:Location>\r\n" +
|
||||
" <data:Concurrency metadata:type=\"Edm.Int32\">0</data:Concurrency>\r\n" +
|
||||
" </metadata:properties>\r\n" +
|
||||
" </content>\r\n" +
|
||||
" </entry>\r\n" +
|
||||
" </feed>\r\n" +
|
||||
" </m:inline>\r\n" +
|
||||
" </metadata:inline>\r\n" +
|
||||
" </link>\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/related/ProductDetail\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/related/ProductDetail\" "
|
||||
+ "type=\"application/atom+xml;type=entry\" "
|
||||
+ "title=\"ProductDetail\" href=\"Products(3)/ProductDetail\" />\r\n" +
|
||||
" <title type=\"text\">Havina Cola</title>\r\n" +
|
||||
|
@ -301,24 +302,24 @@ public class AtomDeserializerTest {
|
|||
" <author>\r\n" +
|
||||
" <name />\r\n" +
|
||||
" </author>\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/relatedlinks/Categories\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Categories\" "
|
||||
+ "type=\"application/xml\" title=\"Categories\" href=\"Products(3)/$links/Categories\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/relatedlinks/Supplier\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/Supplier\" "
|
||||
+ "type=\"application/xml\" title=\"Supplier\" href=\"Products(3)/$links/Supplier\" />\r\n" +
|
||||
" <link rel=\"http://schemas.microsoft.com/ado/2007/08/dataservices/relatedlinks/ProductDetail\" "
|
||||
" <link rel=\"http://docs.oasis-open.org/odata/ns/relatedlinks/ProductDetail\" "
|
||||
+ "type=\"application/xml\" title=\"ProductDetail\" href=\"Products(3)/$links/ProductDetail\" />\r\n" +
|
||||
" <content type=\"application/xml\">\r\n" +
|
||||
" <m:properties>\r\n" +
|
||||
" <d:ID m:type=\"Edm.Int32\">3</d:ID>\r\n" +
|
||||
" <d:ReleaseDate m:type=\"Edm.DateTime\">2005-10-01T00:00:00</d:ReleaseDate>\r\n" +
|
||||
" <d:DiscontinuedDate m:type=\"Edm.DateTime\">2006-10-01T00:00:00</d:DiscontinuedDate>\r\n" +
|
||||
" <d:Rating m:type=\"Edm.Int16\">3</d:Rating>\r\n" +
|
||||
" <d:Price m:type=\"Edm.Double\">19.9</d:Price>\r\n" +
|
||||
" </m:properties>\r\n" +
|
||||
" <metadata:properties>\r\n" +
|
||||
" <data:ID metadata:type=\"Edm.Int32\">3</data:ID>\r\n" +
|
||||
" <data:ReleaseDate metadata:type=\"Edm.DateTime\">2005-10-01T00:00:00</data:ReleaseDate>\r\n" +
|
||||
" <data:DiscontinuedDate metadata:type=\"Edm.DateTime\">2006-10-01T00:00:00</data:DiscontinuedDate>\r\n" +
|
||||
" <data:Rating metadata:type=\"Edm.Int16\">3</data:Rating>\r\n" +
|
||||
" <data:Price metadata:type=\"Edm.Double\">19.9</data:Price>\r\n" +
|
||||
" </metadata:properties>\r\n" +
|
||||
" </content>\r\n" +
|
||||
" </entry>";
|
||||
|
||||
final AtomDeserializer deserializer = new AtomDeserializer(ODataServiceVersion.V30);
|
||||
//TODO: THis was a test for V3
|
||||
final AtomDeserializer deserializer = new AtomDeserializer();
|
||||
final InputStream in = new ByteArrayInputStream(content.getBytes("UTF-8"));
|
||||
final ResWrap<Entity> entity = deserializer.toEntity(in);
|
||||
|
||||
|
|
Loading…
Reference in New Issue