diff --git a/ODataJClient/test-service/src/main/java/com/msopentech/odatajclient/testservice/utils/Commons.java b/ODataJClient/test-service/src/main/java/com/msopentech/odatajclient/testservice/utils/Commons.java index 403f3bce5..a075c7f80 100644 --- a/ODataJClient/test-service/src/main/java/com/msopentech/odatajclient/testservice/utils/Commons.java +++ b/ODataJClient/test-service/src/main/java/com/msopentech/odatajclient/testservice/utils/Commons.java @@ -57,7 +57,7 @@ public abstract class Commons { protected final static Map sequence = new HashMap(); - protected final static Set mediaContent = new HashSet(); + public final static Set mediaContent = new HashSet(); protected final static Map linkInfo = new EnumMap(ODataVersion.class); @@ -65,12 +65,14 @@ public abstract class Commons { static { sequence.put("Customer", 1000); sequence.put("CustomerInfo", 1000); + sequence.put("Car", 1000); sequence.put("Message", 1000); sequence.put("Order", 1000); sequence.put("ComputerDetail", 1000); sequence.put("AllGeoTypesSet", 1000); mediaContent.add("CustomerInfo"); + mediaContent.add("Car"); } public static String getEntityURI(final String entitySetName, final String entityKey) { diff --git a/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java b/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java index 27cd0ad0e..12032c583 100644 --- a/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java +++ b/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java @@ -34,9 +34,12 @@ import org.apache.olingo.fit.utils.LinkInfo; import java.io.File; import java.io.InputStream; import java.util.AbstractMap; +import java.util.Arrays; import java.util.Collections; +import java.util.EnumSet; import java.util.List; import java.util.Map; +import java.util.Set; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.DefaultValue; @@ -64,6 +67,8 @@ public abstract class AbstractServices { */ protected static final Logger LOG = LoggerFactory.getLogger(AbstractServices.class); + private static Set initialized = EnumSet.noneOf(ODataVersion.class); + protected abstract ODataVersion getVersion(); protected final XMLUtilities xml; @@ -72,6 +77,11 @@ public abstract class AbstractServices { public AbstractServices() throws Exception { this.xml = new XMLUtilities(getVersion()); this.json = new JSONUtilities(getVersion()); + + if (!initialized.contains(getVersion())) { + xml.retrieveLinkInfoFromMetadata(); + initialized.add(getVersion()); + } } /** @@ -272,13 +282,15 @@ public abstract class AbstractServices { @POST @Path("/{entitySetName}") @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON}) - @Consumes({MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON}) + @Consumes({MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_OCTET_STREAM}) public Response postNewEntity( @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept, @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) String prefer, @PathParam("entitySetName") String entitySetName, final String entity) { + // default + AbstractUtilities utils = xml; try { final Accept acceptType = Accept.parse(accept, getVersion()); @@ -286,19 +298,22 @@ public abstract class AbstractServices { throw new UnsupportedMediaTypeException("Unsupported media type"); } + utils = getUtilities(acceptType); + final InputStream res; - if (acceptType == Accept.ATOM) { - res = xml.addOrReplaceEntity(entitySetName, IOUtils.toInputStream(entity)); + + if (utils.isMediaContent(entitySetName)) { + res = utils.addMediaEntity(entitySetName, IOUtils.toInputStream(entity)); } else { - res = json.addOrReplaceEntity(entitySetName, IOUtils.toInputStream(entity)); + res = utils.addOrReplaceEntity(entitySetName, IOUtils.toInputStream(entity)); } final Response response; if ("return-no-content".equalsIgnoreCase(prefer)) { - res.close(); - response = xml.createResponse(null, null, acceptType, Response.Status.NO_CONTENT); + IOUtils.closeQuietly(res); + response = utils.createResponse(null, null, acceptType, Response.Status.NO_CONTENT); } else { - response = xml.createResponse(res, null, acceptType, Response.Status.CREATED); + response = utils.createResponse(res, null, acceptType, Response.Status.CREATED); } if (StringUtils.isNotBlank(prefer)) { @@ -307,7 +322,7 @@ public abstract class AbstractServices { return response; } catch (Exception e) { - return xml.createFaultResponse(accept, e); + return utils.createFaultResponse(accept, e); } } @@ -489,6 +504,28 @@ public abstract class AbstractServices { } } + @GET + @Path("/{entitySetName}({entityId})/$value") + public Response getMediaEntity( + @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept, + @PathParam("entitySetName") String entitySetName, + @PathParam("entityId") String entityId) { + + try { + if (!accept.contains("*/*") && !accept.contains("application/octet-stream")) { + throw new UnsupportedMediaTypeException("Unsupported media type"); + } + + final AbstractUtilities utils = getUtilities(null); + final Map.Entry entityInfo = utils.readMediaEntity(entitySetName, entityId); + return utils.createResponse(entityInfo.getValue(), Commons.getETag(entityInfo.getKey(), getVersion()), null); + + } catch (Exception e) { + LOG.error("Error retrieving entity", e); + return xml.createFaultResponse(accept, e); + } + } + @DELETE @Path("/{entitySetName}/{entityId}") public Response removeEntityKeyAsSegment( @@ -514,6 +551,327 @@ public abstract class AbstractServices { } } + private Response replaceProperty( + final String accept, + final String prefer, + final String entitySetName, + final String entityId, + final String path, + final String format, + final String changes, + final boolean justValue) { + try { + Accept acceptType = null; + if (StringUtils.isNotBlank(format)) { + acceptType = Accept.valueOf(format.toUpperCase()); + } else if (StringUtils.isNotBlank(accept)) { + acceptType = Accept.parse(accept, getVersion(), null); + } + + // if the given path is not about any link then search for property + LOG.info("Retrieve property {}", path); + + final AbstractUtilities utils = getUtilities(acceptType); + + final InputStream changed = utils.replaceProperty( + entitySetName, + entityId, + IOUtils.toInputStream(changes), + Arrays.asList(path.split("/")), + acceptType, + justValue); + + final Response response; + if ("return-content".equalsIgnoreCase(prefer)) { + response = xml.createResponse(changed, null, acceptType, Response.Status.OK); + } else { + changed.close(); + response = xml.createResponse(null, null, acceptType, Response.Status.NO_CONTENT); + } + + if (StringUtils.isNotBlank(prefer)) { + response.getHeaders().put("Preference-Applied", Collections.singletonList(prefer)); + } + + return response; + + } catch (Exception e) { + return xml.createFaultResponse(accept, e); + } + } + + private Response deletePropertyValue( + final String accept, + final String prefer, + final String entitySetName, + final String entityId, + final String path, + final String format) { + try { + Accept acceptType = null; + if (StringUtils.isNotBlank(format)) { + acceptType = Accept.valueOf(format.toUpperCase()); + } else if (StringUtils.isNotBlank(accept)) { + acceptType = Accept.parse(accept, getVersion(), null); + } + + // if the given path is not about any link then search for property + LOG.info("Retrieve property {}", path); + + final AbstractUtilities utils = getUtilities(acceptType); + + final InputStream changed = utils.deleteProperty( + entitySetName, + entityId, + Arrays.asList(path.split("/")), + acceptType); + + final Response response; + if ("return-content".equalsIgnoreCase(prefer)) { + response = xml.createResponse(changed, null, acceptType, Response.Status.OK); + } else { + changed.close(); + response = xml.createResponse(null, null, acceptType, Response.Status.NO_CONTENT); + } + + if (StringUtils.isNotBlank(prefer)) { + response.getHeaders().put("Preference-Applied", Collections.singletonList(prefer)); + } + + return response; + + } catch (Exception e) { + return xml.createFaultResponse(accept, e); + } + } + + /** + * Replace property value. + * + * @param accept + * @param entitySetName + * @param entityId + * @param path + * @param format + * @param changes + * @return + */ + @PUT + @Path("/{entitySetName}({entityId})/{path:.*}/$value") + public Response replacePropertyValue( + @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept, + @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) String prefer, + @PathParam("entitySetName") String entitySetName, + @PathParam("entityId") String entityId, + @PathParam("path") String path, + @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format, + final String changes) { + return replaceProperty(accept, prefer, entitySetName, entityId, path, format, changes, true); + } + + /** + * Replace property. + * + * @param accept + * @param entitySetName + * @param entityId + * @param path + * @param format + * @param changes + * @return + */ + @MERGE + @Path("/{entitySetName}({entityId})/{path:.*}") + public Response mergeProperty( + @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept, + @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) String prefer, + @PathParam("entitySetName") String entitySetName, + @PathParam("entityId") String entityId, + @PathParam("path") String path, + @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format, + final String changes) { + return replaceProperty(accept, prefer, entitySetName, entityId, path, format, changes, false); + } + + /** + * Replace property. + * + * @param accept + * @param entitySetName + * @param entityId + * @param path + * @param format + * @param changes + * @return + */ + @PATCH + @Path("/{entitySetName}({entityId})/{path:.*}") + public Response patchProperty( + @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept, + @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) String prefer, + @PathParam("entitySetName") String entitySetName, + @PathParam("entityId") String entityId, + @PathParam("path") String path, + @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format, + final String changes) { + return replaceProperty(accept, prefer, entitySetName, entityId, path, format, changes, false); + } + + @PUT + @Produces({MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON}) + @Consumes({MediaType.WILDCARD, MediaType.APPLICATION_OCTET_STREAM}) + @Path("/{entitySetName}({entityId})/$value") + public Response replaceMediaEntity( + @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) String prefer, + @PathParam("entitySetName") String entitySetName, + @PathParam("entityId") String entityId, + @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format, + String value) { + try { + + final AbstractUtilities utils = getUtilities(null); + + InputStream res = utils.putMediaInMemory(entitySetName, entityId, IOUtils.toInputStream(value)); + + final Response response; + if ("return-content".equalsIgnoreCase(prefer)) { + response = xml.createResponse(res, null, null, Response.Status.OK); + } else { + res.close(); + response = xml.createResponse(null, null, null, Response.Status.NO_CONTENT); + } + + if (StringUtils.isNotBlank(prefer)) { + response.getHeaders().put("Preference-Applied", Collections.singletonList(prefer)); + } + + return response; + + } catch (Exception e) { + LOG.error("Error retrieving entity", e); + return xml.createFaultResponse(Accept.JSON.toString(), e); + } + } + + /** + * Replace property. + * + * @param accept + * @param entitySetName + * @param entityId + * @param path + * @param format + * @param changes + * @return + */ + @PUT + @Path("/{entitySetName}({entityId})/{path:.*}") + public Response replaceProperty( + @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept, + @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) String prefer, + @PathParam("entitySetName") String entitySetName, + @PathParam("entityId") String entityId, + @PathParam("path") String path, + @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format, + final String changes) { + if (xml.isMediaContent(entitySetName + "/" + path)) { + return replaceMediaProperty(prefer, entitySetName, entityId, path, format, changes); + } else { + return replaceProperty(accept, prefer, entitySetName, entityId, path, format, changes, false); + } + } + + private Response replaceMediaProperty( + final String prefer, + final String entitySetName, + final String entityId, + final String path, + final String format, + final String value) { + try { + final AbstractUtilities utils = getUtilities(null); + + InputStream res = utils.putMediaInMemory(entitySetName, entityId, path, IOUtils.toInputStream(value)); + + final Response response; + if ("return-content".equalsIgnoreCase(prefer)) { + response = xml.createResponse(res, null, null, Response.Status.OK); + } else { + res.close(); + response = xml.createResponse(null, null, null, Response.Status.NO_CONTENT); + } + + if (StringUtils.isNotBlank(prefer)) { + response.getHeaders().put("Preference-Applied", Collections.singletonList(prefer)); + } + + return response; + + } catch (Exception e) { + LOG.error("Error retrieving entity", e); + return xml.createFaultResponse(Accept.JSON.toString(), e); + } + } + + /** + * Nullify property value. + * + * @param accept + * @param entitySetName + * @param entityId + * @param path + * @param format + * @param changes + * @return + */ + @DELETE + @Path("/{entitySetName}({entityId})/{path:.*}/$value") + public Response deleteProperty( + @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept, + @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) String prefer, + @PathParam("entitySetName") String entitySetName, + @PathParam("entityId") String entityId, + @PathParam("path") String path, + @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format) { + return deletePropertyValue(accept, prefer, entitySetName, entityId, path, format); + } + + /** + * Retrieve property sample. + * + * @param accept Accept header. + * @param entitySetName Entity set name. + * @param entityId entity id. + * @param path path. + * @param format format query option. + * @return property. + */ + @GET + @Path("/{entitySetName}({entityId})/{path:.*}/$value") + public Response getPathValue( + @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept, + @PathParam("entitySetName") String entitySetName, + @PathParam("entityId") String entityId, + @PathParam("path") String path, + @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format) { + + AbstractUtilities utils = null; + try { + Accept acceptType = null; + if (StringUtils.isNotBlank(format)) { + acceptType = Accept.valueOf(format.toUpperCase()); + } else if (StringUtils.isNotBlank(accept)) { + acceptType = Accept.parse(accept, getVersion(), null); + } + utils = getUtilities(acceptType); + + return navigateProperty(acceptType, entitySetName, entityId, path, true); + + } catch (Exception e) { + return (utils == null ? xml : utils).createFaultResponse(accept, e); + } + } + /** * Retrieve property sample. * @@ -533,69 +891,99 @@ public abstract class AbstractServices { @PathParam("path") String path, @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format) { + // default utilities + final AbstractUtilities utils = xml; + try { - boolean searchForValue = path.endsWith("$value"); - Accept acceptType = null; - if (StringUtils.isNotBlank(format)) { - acceptType = Accept.valueOf(format.toUpperCase()); - } else if (StringUtils.isNotBlank(accept)) { - acceptType = Accept.parse(accept, getVersion(), null); - } - - final String basePath = - entitySetName + File.separatorChar + Commons.getEntityKey(entityId) + File.separatorChar; - - InputStream stream; - - try { - final LinkInfo linkInfo = xml.readLinks(entitySetName, entityId, path, Accept.XML); - final Map.Entry> links = XMLUtilities.extractLinkURIs(linkInfo.getLinks()); - - switch (acceptType) { - case JSON: - case JSON_FULLMETA: - case JSON_NOMETA: - stream = json.readEntities(links.getValue(), path, links.getKey(), linkInfo.isFeed()); - stream = json.wrapJsonEntities(stream); - break; - default: - stream = xml.readEntities(links.getValue(), path, links.getKey(), linkInfo.isFeed()); - } - } catch (NotFoundException e) { - // if the given path is not about any link then search for property - LOG.info("Retrieve property {}", path); - - stream = FSManager.instance(getVersion()).readFile( - basePath + ENTITY, acceptType == null || acceptType == Accept.TEXT - ? Accept.XML : acceptType); - - if (searchForValue) { - stream = xml.getAtomPropertyValue(stream, path.split("/")); - } else { - if (acceptType == null || acceptType == Accept.XML || acceptType == Accept.ATOM) { - // retrieve xml - stream = xml.getAtomProperty(stream, path.split("/")); - } else { - // retrieve Edm type from xml - final String edmType = xml.getEdmTypeFromXML( - FSManager.instance(getVersion()).readFile(basePath + ENTITY, Accept.XML), - path.split("/")); - // retrieve json property - stream = json.getJsonProperty(stream, path.split("/"), edmType); - } + if (utils.isMediaContent(entitySetName + "/" + path)) { + return navigateStreamedEntity(entitySetName, entityId, path); + } else { + Accept acceptType = null; + if (StringUtils.isNotBlank(format)) { + acceptType = Accept.valueOf(format.toUpperCase()); + } else if (StringUtils.isNotBlank(accept)) { + acceptType = Accept.parse(accept, getVersion(), null); } - if ((searchForValue && acceptType != null && acceptType != Accept.TEXT) || acceptType == Accept.ATOM) { - throw new UnsupportedMediaTypeException("Unsupported media type " + acceptType); + try { + return navigateEntity(acceptType, entitySetName, entityId, path); + } catch (NotFoundException e) { + // if the given path is not about any link then search for property + return navigateProperty(acceptType, entitySetName, entityId, path, false); } } - - return xml.createResponse(stream, Commons.getETag(basePath, getVersion()), acceptType); } catch (Exception e) { - return xml.createFaultResponse(accept, e); + return utils.createFaultResponse(accept, e); } } + private Response navigateStreamedEntity( + String entitySetName, + String entityId, + String path) throws Exception { + + final AbstractUtilities utils = getUtilities(null); + final Map.Entry entityInfo = utils.readMediaEntity(entitySetName, entityId, path); + return utils.createResponse(entityInfo.getValue(), Commons.getETag(entityInfo.getKey(), getVersion()), null); + } + + private Response navigateEntity( + final Accept acceptType, + String entitySetName, + String entityId, + String path) throws Exception { + final String basePath = Commons.getEntityBasePath(entitySetName, entityId); + + final LinkInfo linkInfo = xml.readLinks(entitySetName, entityId, path, Accept.XML); + final Map.Entry> links = xml.extractLinkURIs(linkInfo.getLinks()); + + InputStream stream; + + switch (acceptType) { + case JSON: + case JSON_FULLMETA: + case JSON_NOMETA: + stream = json.readEntities(links.getValue(), path, links.getKey(), linkInfo.isFeed()); + stream = json.wrapJsonEntities(stream); + break; + default: + stream = xml.readEntities(links.getValue(), path, links.getKey(), linkInfo.isFeed()); + } + + return xml.createResponse(stream, Commons.getETag(basePath, getVersion()), acceptType); + } + + private Response navigateProperty( + final Accept acceptType, + final String entitySetName, + final String entityId, + final String path, + final boolean searchForValue) throws Exception { + + if ((searchForValue && acceptType != null && acceptType != Accept.TEXT) || acceptType == Accept.ATOM) { + throw new UnsupportedMediaTypeException("Unsupported media type " + acceptType); + } + + final String basePath = Commons.getEntityBasePath(entitySetName, entityId); + + InputStream stream = FSManager.instance(getVersion()).readFile( + basePath + ENTITY, acceptType == null || acceptType == Accept.TEXT + ? Accept.XML : acceptType); + + final AbstractUtilities utils = getUtilities(acceptType); + + final List pathElements = Arrays.asList(path.split("\\/")); + + if (searchForValue) { + stream = utils.getPropertyValue(stream, pathElements); + } else { + String edmType = xml.getEdmTypeFromAtom(entitySetName, entityId, pathElements); + stream = utils.getProperty(entitySetName, entityId, pathElements, edmType); + } + + return xml.createResponse(stream, Commons.getETag(basePath, getVersion()), acceptType); + } + /** * Retrieve links sample. * @@ -670,9 +1058,9 @@ public abstract class AbstractServices { final List links; if (content == Accept.XML || content == Accept.TEXT || content == Accept.ATOM) { - links = XMLUtilities.extractLinkURIs(IOUtils.toInputStream(link)).getValue(); + links = xml.extractLinkURIs(IOUtils.toInputStream(link)).getValue(); } else { - links = JSONUtilities.extractLinkURIs(IOUtils.toInputStream(link)).getValue(); + links = json.extractLinkURIs(IOUtils.toInputStream(link)).getValue(); } utils.putLinksInMemory( @@ -747,9 +1135,9 @@ public abstract class AbstractServices { final List links; if (content == Accept.XML || content == Accept.TEXT || content == Accept.ATOM) { - links = XMLUtilities.extractLinkURIs(IOUtils.toInputStream(link)).getValue(); + links = xml.extractLinkURIs(IOUtils.toInputStream(link)).getValue(); } else { - links = JSONUtilities.extractLinkURIs(IOUtils.toInputStream(link)).getValue(); + links = json.extractLinkURIs(IOUtils.toInputStream(link)).getValue(); } utils.putLinksInMemory( @@ -788,10 +1176,10 @@ public abstract class AbstractServices { final AbstractUtilities utils = getUtilities(acceptType); - final Map.Entry> currents = JSONUtilities.extractLinkURIs(utils.readLinks( + final Map.Entry> currents = json.extractLinkURIs(utils.readLinks( entitySetName, entityId, linkName, Accept.JSON_FULLMETA).getLinks()); - final Map.Entry> toBeRemoved = JSONUtilities.extractLinkURIs(utils.readLinks( + final Map.Entry> toBeRemoved = json.extractLinkURIs(utils.readLinks( entitySetName, entityId, linkName + "(" + linkId + ")", Accept.JSON_FULLMETA).getLinks()); final List remains = currents.getValue(); diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java index 9733ce40d..2d93c6786 100644 --- a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java +++ b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java @@ -30,7 +30,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.ConcurrentModificationException; -import java.util.EnumSet; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -39,9 +38,6 @@ import java.util.Set; import java.util.regex.Pattern; import javax.ws.rs.NotFoundException; import javax.ws.rs.core.Response; -import javax.xml.namespace.QName; -import javax.xml.stream.XMLEventReader; -import javax.xml.stream.events.StartElement; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.vfs2.FileObject; @@ -56,8 +52,6 @@ public abstract class AbstractUtilities { */ protected static final Logger LOG = LoggerFactory.getLogger(AbstractUtilities.class); - private static Set initialized = EnumSet.noneOf(ODataVersion.class); - protected final ODataVersion version; protected final FSManager fsManager; @@ -67,101 +61,10 @@ public abstract class AbstractUtilities { public AbstractUtilities(final ODataVersion version) throws Exception { this.version = version; this.fsManager = FSManager.instance(version); - initialize(); - } - - private void initialize() throws Exception { - - if (!initialized.contains(version)) { - final MetadataLinkInfo metadataLinkInfo = new MetadataLinkInfo(); - Commons.linkInfo.put(version, metadataLinkInfo); - - final InputStream metadata = fsManager.readFile(Constants.METADATA, Accept.XML); - final XMLEventReader reader = XMLUtilities.getEventReader(metadata); - - int initialDepth = 0; - try { - while (true) { - Map.Entry entityType = - XMLUtilities.getAtomElement(reader, null, "EntityType", null, initialDepth, 4, 4, false); - initialDepth = entityType.getKey(); - - final String entitySetName = - entityType.getValue().getStart().getAttributeByName(new QName("Name")).getValue(); - - final XMLEventReader entityReader = XMLUtilities.getEventReader(entityType.getValue().toStream()); - int size = 0; - - try { - while (true) { - final XmlElement navProperty = - XMLUtilities.getAtomElement(entityReader, null, "NavigationProperty"); - - final String linkName = - navProperty.getStart().getAttributeByName(new QName("Name")).getValue(); - - final Map.Entry target = getTargetInfo(navProperty.getStart(), linkName); - - metadataLinkInfo.addLink( - entitySetName, - linkName, - target.getKey(), - target.getValue()); - - size++; - } - } catch (Exception e) { - } finally { - entityReader.close(); - } - - if (size == 0) { - metadataLinkInfo.addEntitySet(entitySetName); - } - } - } catch (Exception e) { - } finally { - reader.close(); - initialized.add(version); - } - } - } - - private Map.Entry getTargetInfo(final StartElement element, final String linkName) - throws Exception { - final InputStream metadata = fsManager.readFile(Constants.METADATA, Accept.XML); - XMLEventReader reader = XMLUtilities.getEventReader(metadata); - - final String associationName = element.getAttributeByName(new QName("Relationship")).getValue(); - - final Map.Entry association = XMLUtilities.getAtomElement( - reader, null, "Association", - Collections.>singleton(new SimpleEntry( - "Name", associationName.substring(associationName.lastIndexOf(".") + 1))), - 0, 4, 4, false); - - final InputStream associationContent = association.getValue().toStream(); - final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - IOUtils.copy(associationContent, bos); - IOUtils.closeQuietly(associationContent); - - reader.close(); - reader = XMLUtilities.getEventReader(new ByteArrayInputStream(bos.toByteArray())); - - final Map.Entry associationEnd = XMLUtilities.getAtomElement( - reader, null, "End", - Collections.>singleton(new SimpleEntry("Role", linkName)), - 0, -1, -1, false); - - final String target = associationEnd.getValue().getStart().getAttributeByName(new QName("Type")).getValue(); - final boolean feed = associationEnd.getValue().getStart().getAttributeByName( - new QName("Multiplicity")).getValue().equals("*"); - - return new SimpleEntry(target, feed); } public boolean isMediaContent(final String entityName) { - return Commons.mediaContent.contains(entityName); + return Commons.mediaContent.containsKey(entityName); } /** @@ -261,7 +164,7 @@ public abstract class AbstractUtilities { final ByteArrayOutputStream bos = new ByteArrayOutputStream(); IOUtils.copy(is, bos); - is.close(); + IOUtils.closeQuietly(is); // ----------------------------------------- // 0. Retrieve navigation links to be mantained @@ -275,8 +178,7 @@ public abstract class AbstractUtilities { for (String availableLink : new HashSet(linksToBeMantained)) { try { - fsManager.resolve( - Commons.getLinksPath(version, entitySetName, key, availableLink, Accept.JSON_FULLMETA)); + fsManager.resolve(Commons.getLinksPath(version, entitySetName, key, availableLink, Accept.JSON_FULLMETA)); } catch (Exception e) { linksToBeMantained.remove(availableLink); } @@ -293,7 +195,7 @@ public abstract class AbstractUtilities { final String entityKey = key == null ? getDefaultEntryKey( entitySetName, new ByteArrayInputStream(bos.toByteArray()), getDefaultFormat()) : key; - final String path = entitySetName + File.separatorChar + Commons.getEntityKey(entityKey) + File.separatorChar; + final String path = Commons.getEntityBasePath(entitySetName, entityKey); // ----------------------------------------- // ----------------------------------------- @@ -366,6 +268,72 @@ public abstract class AbstractUtilities { return fo.getContent().getInputStream(); } + public InputStream addMediaEntity( + final String entitySetName, + final InputStream is) throws Exception { + + // ----------------------------------------- + // 0. Get default entry key and path (N.B. operation will consume/close the stream; use a copy instead) + // ----------------------------------------- + final String entityKey = getDefaultEntryKey(entitySetName, null, getDefaultFormat()); + final String path = Commons.getEntityBasePath(entitySetName, entityKey); + // ----------------------------------------- + + // ----------------------------------------- + // 1. save the media entity value + // ----------------------------------------- + fsManager.putInMemory(is, fsManager.getAbsolutePath(path + MEDIA_CONTENT_FILENAME, null)); + IOUtils.closeQuietly(is); + // ----------------------------------------- + + // ----------------------------------------- + // 2. save entity as atom + // ----------------------------------------- + final String entityURI = Commons.getEntityURI(entitySetName, entityKey); + String entity = "" + + "" + + "" + DEFAULT_SERVICE_URL + entityURI + "" + + "" + + "" + + "" + + "" + + "" + + "" + entityKey + "" + + "" + + "" + + ""; + + fsManager.putInMemory( + IOUtils.toInputStream(entity), fsManager.getAbsolutePath(path + ENTITY, Accept.ATOM)); + // ----------------------------------------- + + // ----------------------------------------- + // 3. save entity as json + // ----------------------------------------- + entity = "{" + + "\"odata.metadata\": \"" + DEFAULT_SERVICE_URL + "/$metadata#" + entitySetName + "/@Element\"," + + "\"odata.type\": \"Microsoft.Test.OData.Services.AstoriaDefaultService." + entitySetName + "\"," + + "\"odata.id\": \"" + DEFAULT_SERVICE_URL + entityURI + "\"," + + "\"odata.editLink\": \"" + entityURI + "\"," + + "\"odata.mediaEditLink\": \"" + entityURI + "/$value\"," + + "\"odata.mediaReadLink\": \"" + entityURI + "/$value\"," + + "\"odata.mediaContentType\": \"*/*\"," + + "\"" + Commons.mediaContent.get(entitySetName) + "\": " + entityKey + "," + + "\"Description\": null" + "}"; + + fsManager.putInMemory( + IOUtils.toInputStream(entity), fsManager.getAbsolutePath(path + ENTITY, Accept.JSON_FULLMETA)); + // ----------------------------------------- + + return readEntity(entitySetName, entityKey, getDefaultFormat()).getValue(); + } + public void putLinksInMemory( final String basePath, final String entitySetName, @@ -376,8 +344,7 @@ public abstract class AbstractUtilities { if (Commons.linkInfo.get(version).isFeed(entitySetName, linkName)) { try { - final Map.Entry> currents = JSONUtilities.extractLinkURIs( - readLinks(entitySetName, entityKey, linkName, Accept.JSON_FULLMETA).getLinks()); + final Map.Entry> currents = extractLinkURIs(entitySetName, entityKey, linkName); uris.addAll(currents.getValue()); } catch (Exception ignore) { } @@ -418,25 +385,43 @@ public abstract class AbstractUtilities { if (accept != null) { builder.header("Content-Type", accept.toString()); + } else { + builder.header("Content-Type", "*/*"); } if (status != null) { builder.status(status); } + int contentLength = 0; + if (entity != null) { - if (accept != null && (Accept.JSON == accept || Accept.JSON_NOMETA == accept)) { - builder.entity(Commons.changeFormat(entity, accept)); - } else { - builder.entity(entity); + try { + final InputStream toBeStreamedBack; + + if (accept != null && (Accept.JSON == accept || Accept.JSON_NOMETA == accept)) { + toBeStreamedBack = Commons.changeFormat(entity, accept); + } else { + toBeStreamedBack = entity; + } + + final ByteArrayOutputStream bos = new ByteArrayOutputStream(); + IOUtils.copy(toBeStreamedBack, bos); + IOUtils.closeQuietly(toBeStreamedBack); + + contentLength = bos.size(); + builder.entity(new ByteArrayInputStream(bos.toByteArray())); + } catch (IOException ioe) { + LOG.error("Error streaming response entity back", ioe); } } + builder.header("Content-Length", contentLength); + return builder.build(); } public Response createFaultResponse(final String accept, final Exception e) { - e.printStackTrace(); LOG.debug("Create fault response about .... ", e); final Response.ResponseBuilder builder = Response.serverError(); @@ -490,8 +475,7 @@ public abstract class AbstractUtilities { propertyNames.add("FromUsername"); final StringBuilder keyBuilder = new StringBuilder(); - for (Map.Entry value - : getPropertyValues(entity, propertyNames, accept).entrySet()) { + for (Map.Entry value : getPropertyValues(entity, propertyNames).entrySet()) { if (keyBuilder.length() > 0) { keyBuilder.append(","); @@ -501,10 +485,10 @@ public abstract class AbstractUtilities { } res = keyBuilder.toString(); } catch (Exception e) { - int messageId = sequence.get(entitySetName) + 1; + final int messageId; if (sequence.containsKey(entitySetName)) { - res = "MessageId=" + String.valueOf(messageId) - + ",FromUsername=1"; + messageId = sequence.get(entitySetName) + 1; + res = "MessageId=" + String.valueOf(messageId) + ",FromUsername=1"; } else { throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName)); } @@ -513,7 +497,7 @@ public abstract class AbstractUtilities { } else if ("Order".equals(entitySetName)) { try { final Map value = - getPropertyValues(entity, Collections.singletonList("OrderId"), accept); + getPropertyValues(entity, Collections.singletonList("OrderId")); res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next()); } catch (Exception e) { if (sequence.containsKey(entitySetName)) { @@ -526,7 +510,7 @@ public abstract class AbstractUtilities { } else if ("Customer".equals(entitySetName)) { try { final Map value = - getPropertyValues(entity, Collections.singletonList("CustomerId"), accept); + getPropertyValues(entity, Collections.singletonList("CustomerId")); res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next()); } catch (Exception e) { if (sequence.containsKey(entitySetName)) { @@ -539,7 +523,7 @@ public abstract class AbstractUtilities { } else if ("ComputerDetail".equals(entitySetName)) { try { final Map value = - getPropertyValues(entity, Collections.singletonList("ComputerDetailId"), accept); + getPropertyValues(entity, Collections.singletonList("ComputerDetailId")); res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next()); } catch (Exception e) { if (sequence.containsKey(entitySetName)) { @@ -552,7 +536,7 @@ public abstract class AbstractUtilities { } else if ("AllGeoTypesSet".equals(entitySetName)) { try { final Map value = - getPropertyValues(entity, Collections.singletonList("Id"), accept); + getPropertyValues(entity, Collections.singletonList("Id")); res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next()); } catch (Exception e) { if (sequence.containsKey(entitySetName)) { @@ -565,7 +549,20 @@ public abstract class AbstractUtilities { } else if ("CustomerInfo".equals(entitySetName)) { try { final Map value = - getPropertyValues(entity, Collections.singletonList("CustomerInfoId"), accept); + getPropertyValues(entity, Collections.singletonList("CustomerInfoId")); + res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next()); + } catch (Exception e) { + if (sequence.containsKey(entitySetName)) { + res = String.valueOf(sequence.get(entitySetName) + 1); + } else { + throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName)); + } + } + sequence.put(entitySetName, Integer.valueOf(res)); + } else if ("Car".equals(entitySetName)) { + try { + final Map value = + getPropertyValues(entity, Collections.singletonList("VIN")); res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next()); } catch (Exception e) { if (sequence.containsKey(entitySetName)) { @@ -587,35 +584,15 @@ public abstract class AbstractUtilities { } } - private static Map getPropertyValues( - final InputStream is, final List propertyNames, final Accept accept) + private Map getPropertyValues(final InputStream is, final List propertyNames) throws Exception { final Map res = new LinkedHashMap(); - final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - IOUtils.copy(is, bos); - IOUtils.closeQuietly(is); - for (String propertyName : propertyNames) { - final InputStream value; - - switch (accept) { - case JSON: - case JSON_FULLMETA: - case JSON_NOMETA: - value = JSONUtilities.getJsonPropertyValue( - new ByteArrayInputStream(bos.toByteArray()), - propertyName); - break; - default: - value = XMLUtilities.getAtomPropertyValue( - new ByteArrayInputStream(bos.toByteArray()), - new String[] {propertyName, "$value"}); - } - res.put(propertyName, value); + res.put(propertyName, getPropertyValue(is, Collections.singletonList(propertyName))); } - IOUtils.closeQuietly(bos); + IOUtils.closeQuietly(is); return res; } @@ -644,14 +621,39 @@ public abstract class AbstractUtilities { return linkInfo; } + public InputStream putMediaInMemory( + 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 FileObject fo = fsManager.putInMemory(value, fsManager.getAbsolutePath( + Commons.getEntityBasePath(entitySetName, entityId) + (name == null ? MEDIA_CONTENT_FILENAME : name), null)); + + return fo.getContent().getInputStream(); + } + + public Map.Entry readMediaEntity(final String entitySetName, final String entityId) { + return readMediaEntity(entitySetName, entityId, null); + } + + public Map.Entry readMediaEntity( + final String entitySetName, final String entityId, final String name) { + final String basePath = Commons.getEntityBasePath(entitySetName, entityId); + return new SimpleEntry(basePath, fsManager.readFile(basePath + + (name == null ? MEDIA_CONTENT_FILENAME : name))); + } + public Map.Entry readEntity( final String entitySetName, final String entityId, final Accept accept) { if (accept == Accept.XML || accept == Accept.TEXT) { throw new UnsupportedMediaTypeException("Unsupported media type"); } - final String basePath = - entitySetName + File.separatorChar + Commons.getEntityKey(entityId) + File.separatorChar; + final String basePath = Commons.getEntityBasePath(entitySetName, entityId); return new SimpleEntry(basePath, fsManager.readFile(basePath + ENTITY, accept)); } @@ -666,7 +668,7 @@ public abstract class AbstractUtilities { // 0. Retrieve all 'linkName' navigation link uris (NotFoundException if missing) // -------------------------------- final LinkInfo linkInfo = readLinks(entitySetName, entityId, linkName, Accept.XML); - final Map.Entry> links = XMLUtilities.extractLinkURIs(linkInfo.getLinks()); + final Map.Entry> links = extractLinkURIs(entitySetName, entityId, linkName); // -------------------------------- // -------------------------------- @@ -704,6 +706,52 @@ public abstract class AbstractUtilities { return addOrReplaceEntity(entityId, entitySetName, setChanges(entityInfo.getValue(), replacement)); } + public InputStream replaceProperty( + final String entitySetName, + final String entityId, + final InputStream changes, + final List path, + final Accept accept, + final boolean justValue) 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; + + // read atom + InputStream stream = fsManager.readFile(basePath + ENTITY, acceptType); + + // change atom + stream = replaceProperty(stream, changes, path, justValue); + + // save atom + fsManager.putInMemory(stream, fsManager.getAbsolutePath(basePath + ENTITY, acceptType)); + + return fsManager.readFile(basePath + ENTITY, acceptType); + } + + public InputStream deleteProperty( + final String entitySetName, + final String entityId, + final List 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; + + // read atom + InputStream stream = fsManager.readFile(basePath + ENTITY, acceptType); + + // change atom + stream = deleteProperty(stream, path); + + // save atom + fsManager.putInMemory(stream, fsManager.getAbsolutePath(basePath + ENTITY, acceptType)); + + return fsManager.readFile(basePath + ENTITY, acceptType); + } + public abstract InputStream readEntities( final List links, final String linkName, final String next, final boolean forceFeed) throws Exception; @@ -722,4 +770,22 @@ public abstract class AbstractUtilities { public abstract InputStream addEditLink( final InputStream content, final String title, final String href) throws Exception; -} + + protected abstract InputStream replaceProperty( + final InputStream src, final InputStream replacement, final List path, final boolean justValue) + throws Exception; + + protected abstract InputStream deleteProperty(final InputStream src, final List path) throws Exception; + + public abstract InputStream getProperty( + final String entitySetName, final String entityId, final List path, final String edmType) + throws Exception; + + public abstract InputStream getPropertyValue(final InputStream is, final List path) + throws Exception; + + public abstract Map.Entry> extractLinkURIs(final InputStream is) throws Exception; + + public abstract Map.Entry> extractLinkURIs( + final String entitySetName, final String entityId, final String linkName) throws Exception; +} \ No newline at end of file diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java b/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java index 46e1a1412..233e03d9b 100644 --- a/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java +++ b/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java @@ -36,11 +36,9 @@ import java.util.ArrayList; import java.util.Collection; import java.util.EnumMap; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.regex.Pattern; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; @@ -57,7 +55,7 @@ public abstract class Commons { protected final static Map sequence = new HashMap(); - protected final static Set mediaContent = new HashSet(); + protected final static Map mediaContent = new HashMap(); protected final static Map linkInfo = new EnumMap(ODataVersion.class); @@ -65,12 +63,15 @@ public abstract class Commons { static { sequence.put("Customer", 1000); sequence.put("CustomerInfo", 1000); + sequence.put("Car", 1000); sequence.put("Message", 1000); sequence.put("Order", 1000); sequence.put("ComputerDetail", 1000); sequence.put("AllGeoTypesSet", 1000); - mediaContent.add("CustomerInfo"); + mediaContent.put("CustomerInfo", "CustomerinfoId"); + mediaContent.put("Car", "VIN"); + mediaContent.put("Car/Photo", null); } public static String getEntityURI(final String entitySetName, final String entityKey) { diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java b/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java index 4dba9dace..72309c226 100644 --- a/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java +++ b/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java @@ -28,6 +28,8 @@ public class Constants { public final static String ODATA_METADATA_PREFIX = DEFAULT_SERVICE_URL + "$metadata#"; + public final static String ATOM_DEF_TYPE = "Edm.String"; + public final static String ATOM_PROPERTY_PREFIX = "d:"; public final static String ATOM_METADATA_PREFIX = "m:"; @@ -70,6 +72,8 @@ public class Constants { public final static String ENTITY = "entity"; + public final static String MEDIA_CONTENT_FILENAME = "$value.bin"; + public final static String SKIP_TOKEN = "skiptoken"; public final static String FILTER = "filter"; diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/FSManager.java b/fit/src/main/java/org/apache/olingo/fit/utils/FSManager.java index 396d14b5f..d368da985 100644 --- a/fit/src/main/java/org/apache/olingo/fit/utils/FSManager.java +++ b/fit/src/main/java/org/apache/olingo/fit/utils/FSManager.java @@ -70,6 +70,7 @@ public class FSManager { } public FileObject putInMemory(final InputStream is, final String path) throws IOException { + System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA scrivo "+path); final FileObject memObject = fsManager.resolveFile(MEM_PREFIX + path); if (memObject.exists()) { @@ -84,10 +85,17 @@ public class FSManager { IOUtils.copy(is, os); IOUtils.closeQuietly(is); IOUtils.closeQuietly(os); + + System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA inserito valore "+ + IOUtils.toString(memObject.getContent().getInputStream())); return memObject; } + public InputStream readFile(final String relativePath) { + return readFile(relativePath, null); + } + public InputStream readFile(final String relativePath, final Accept accept) { final String path = getAbsolutePath(relativePath, accept); LOG.info("Read {}", path); diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/JSONUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/JSONUtilities.java index f979db7ac..a58f3d287 100644 --- a/fit/src/main/java/org/apache/olingo/fit/utils/JSONUtilities.java +++ b/fit/src/main/java/org/apache/olingo/fit/utils/JSONUtilities.java @@ -176,35 +176,41 @@ public class JSONUtilities extends AbstractUtilities { return IOUtils.toInputStream(srcNode.toString()); } - protected static InputStream getJsonPropertyValue(final InputStream src, final String name) + @Override + public InputStream getPropertyValue(final InputStream src, final List path) throws Exception { - ObjectMapper mapper = new ObjectMapper(); + final ObjectMapper mapper = new ObjectMapper(); final JsonNode srcNode = mapper.readTree(src); - JsonNode node = getJsonProperty(srcNode, new String[] {name}, 0); + JsonNode node = getProperty(srcNode, path, 0); return IOUtils.toInputStream(node.asText()); } - public static InputStream getJsonProperty(final InputStream src, final String[] path, final String edmType) + @Override + public InputStream getProperty( + final String entitySetName, final String entityId, final List path, final String edmType) throws Exception { + final InputStream src = + fsManager.readFile(Commons.getEntityBasePath(entitySetName, entityId) + ENTITY, Accept.JSON_FULLMETA); + final ObjectMapper mapper = new ObjectMapper(); final JsonNode srcNode = mapper.readTree(src); - final ObjectNode property = new ObjectNode(JsonNodeFactory.instance); + final ObjectNode propertyNode = new ObjectNode(JsonNodeFactory.instance); if (StringUtils.isNotBlank(edmType)) { - property.put(JSON_ODATAMETADATA_NAME, ODATA_METADATA_PREFIX + edmType); + propertyNode.put(JSON_ODATAMETADATA_NAME, ODATA_METADATA_PREFIX + edmType); } - JsonNode jsonNode = getJsonProperty(srcNode, path, 0); + JsonNode jsonNode = getProperty(srcNode, path, 0); if (jsonNode.isObject()) { - property.putAll((ObjectNode) jsonNode); + propertyNode.putAll((ObjectNode) jsonNode); } else { - property.put("value", jsonNode.asText()); + propertyNode.put("value", jsonNode.asText()); } final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - mapper.writeValue(bos, property); + mapper.writeValue(bos, propertyNode); final InputStream res = new ByteArrayInputStream(bos.toByteArray()); IOUtils.closeQuietly(bos); @@ -212,16 +218,16 @@ public class JSONUtilities extends AbstractUtilities { return res; } - private static JsonNode getJsonProperty(final JsonNode node, final String[] path, final int index) + private JsonNode getProperty(final JsonNode node, final List path, final int index) throws NotFoundException { final Iterator> iter = node.fields(); while (iter.hasNext()) { final Map.Entry entry = iter.next(); - if (path[index].equals(entry.getKey())) { - if (path.length - 1 == index) { + if (path.get(index).equals(entry.getKey())) { + if (path.size() - 1 == index) { return entry.getValue(); } else { - return getJsonProperty(entry.getValue(), path, index + 1); + return getProperty(entry.getValue(), path, index + 1); } } } @@ -400,7 +406,16 @@ public class JSONUtilities extends AbstractUtilities { return IOUtils.toInputStream(toBeChangedObject.toString()); } - public static Map.Entry> extractLinkURIs(final InputStream is) + @Override + public Map.Entry> extractLinkURIs( + final String entitySetName, final String entityId, final String linkName) + throws Exception { + final LinkInfo links = readLinks(entitySetName, entityId, linkName, Accept.JSON_FULLMETA); + return extractLinkURIs(links.getLinks()); + } + + @Override + public Map.Entry> extractLinkURIs(final InputStream is) throws Exception { final ObjectMapper mapper = new ObjectMapper(); final ObjectNode srcNode = (ObjectNode) mapper.readTree(is); @@ -436,4 +451,52 @@ public class JSONUtilities extends AbstractUtilities { srcNode.set(JSON_EDITLINK_NAME, new TextNode(href)); return IOUtils.toInputStream(srcNode.toString()); } + + @Override + public InputStream replaceProperty( + final InputStream src, final InputStream replacement, final List path, final boolean justValue) + throws Exception { + final ObjectMapper mapper = new ObjectMapper(); + final ObjectNode srcNode = (ObjectNode) mapper.readTree(src); + IOUtils.closeQuietly(src); + + final JsonNode replacementNode; + if (justValue) { + replacementNode = new TextNode(IOUtils.toString(replacement)); + } else { + replacementNode = (ObjectNode) mapper.readTree(replacement); + } + IOUtils.closeQuietly(replacement); + + JsonNode node = srcNode; + for (int i = 0; i < path.size() - 1; i++) { + node = node.get(path.get(i)); + if (node == null) { + throw new NotFoundException(); + } + } + + ((ObjectNode) node).set(path.get(path.size() - 1), replacementNode); + + return IOUtils.toInputStream(srcNode.toString()); + } + + @Override + public InputStream deleteProperty(final InputStream src, final List path) throws Exception { + final ObjectMapper mapper = new ObjectMapper(); + final ObjectNode srcNode = (ObjectNode) mapper.readTree(src); + IOUtils.closeQuietly(src); + + JsonNode node = srcNode; + for (int i = 0; i < path.size() - 1; i++) { + node = node.get(path.get(i)); + if (node == null) { + throw new NotFoundException(); + } + } + + ((ObjectNode) node).set(path.get(path.size() - 1), null); + + return IOUtils.toInputStream(srcNode.toString()); + } } diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/XMLEventReaderWrapper.java b/fit/src/main/java/org/apache/olingo/fit/utils/XMLEventReaderWrapper.java index eaf3e8c04..6ba0ee927 100644 --- a/fit/src/main/java/org/apache/olingo/fit/utils/XMLEventReaderWrapper.java +++ b/fit/src/main/java/org/apache/olingo/fit/utils/XMLEventReaderWrapper.java @@ -47,30 +47,22 @@ public class XMLEventReaderWrapper implements XMLEventReader { this.wrapped = factory.createXMLEventReader( new ByteArrayInputStream( (XMLEventReaderWrapper.CONTENT_STAG - + IOUtils.toString(stream) + + IOUtils.toString(stream).replaceAll("^<\\?xml.*\\?>", "") + XMLEventReaderWrapper.CONTENT_ETAG).getBytes())); - init(wrapped); + init(); } - public XMLEventReaderWrapper(final XMLEventReader wrapped) { - this.wrapped = wrapped; - init(wrapped); - } - - private void init(final XMLEventReader wrapped) { + private void init() { try { - this.nextGivenEvent = this.wrapped.nextEvent(); + do { - if (this.nextGivenEvent.isStartDocument()) { - this.nextGivenEvent = this.wrapped.nextEvent(); // discard start document - } + this.nextGivenEvent = this.wrapped.nextEvent(); - if (this.nextGivenEvent.isStartElement() - && CONTENT.equals(this.nextGivenEvent.asStartElement().getName().getLocalPart())) { - this.nextGivenEvent = this.wrapped.nextEvent(); // discard content start tag - } + } while (this.nextGivenEvent.isStartDocument() + || (this.nextGivenEvent.isStartElement() + && CONTENT.equals(this.nextGivenEvent.asStartElement().getName().getLocalPart()))); } catch (Exception ignore) { // ignore diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/XMLUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/XMLUtilities.java index bfe58904f..564f1f4c6 100644 --- a/fit/src/main/java/org/apache/olingo/fit/utils/XMLUtilities.java +++ b/fit/src/main/java/org/apache/olingo/fit/utils/XMLUtilities.java @@ -24,6 +24,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.InputStream; +import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.StringWriter; import java.util.AbstractMap; @@ -50,30 +51,165 @@ import javax.xml.stream.events.Attribute; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.vfs2.FileObject; import org.apache.commons.vfs2.FileSystemException; public class XMLUtilities extends AbstractUtilities { - protected static XMLInputFactory factory = null; + protected static XMLInputFactory ifactory = null; + + protected static XMLOutputFactory ofactory = null; public XMLUtilities(final ODataVersion version) throws Exception { super(version); } + public void retrieveLinkInfoFromMetadata() throws Exception { + + final MetadataLinkInfo metadataLinkInfo = new MetadataLinkInfo(); + Commons.linkInfo.put(version, metadataLinkInfo); + + final InputStream metadata = fsManager.readFile(Constants.METADATA, Accept.XML); + final XMLEventReader reader = getEventReader(metadata); + + int initialDepth = 0; + try { + while (true) { + Map.Entry entityType = + extractElement(reader, null, Collections.singletonList("EntityType"), + null, false, initialDepth, 4, 4); + initialDepth = entityType.getKey(); + + final String entitySetName = + entityType.getValue().getStart().getAttributeByName(new QName("Name")).getValue(); + + final XMLEventReader entityReader = getEventReader(entityType.getValue().toStream()); + int size = 0; + + try { + while (true) { + final XmlElement navProperty = + extractElement(entityReader, null, Collections.singletonList("NavigationProperty"), + null, false, 0, -1, -1).getValue(); + + final String linkName = navProperty.getStart().getAttributeByName(new QName("Name")).getValue(); + final Map.Entry target = getTargetInfo(navProperty.getStart(), linkName); + + metadataLinkInfo.addLink( + entitySetName, + linkName, + target.getKey(), + target.getValue()); + + size++; + } + } catch (Exception e) { + } finally { + entityReader.close(); + } + + if (size == 0) { + metadataLinkInfo.addEntitySet(entitySetName); + } + } + } catch (Exception e) { + } finally { + reader.close(); + } + } + + private Map.Entry getTargetInfo(final StartElement element, final String linkName) + throws Exception { + final InputStream metadata = fsManager.readFile(Constants.METADATA, Accept.XML); + XMLEventReader reader = getEventReader(metadata); + + final String associationName = element.getAttributeByName(new QName("Relationship")).getValue(); + + final Map.Entry association = extractElement( + reader, null, Collections.singletonList("Association"), + Collections.>singleton(new SimpleEntry( + "Name", associationName.substring(associationName.lastIndexOf(".") + 1))), false, + 0, 4, 4); + + reader.close(); + IOUtils.closeQuietly(metadata); + + final InputStream associationContent = association.getValue().toStream(); + reader = getEventReader(associationContent); + + final Map.Entry associationEnd = extractElement( + reader, null, Collections.singletonList("End"), + Collections.>singleton(new SimpleEntry("Role", linkName)), + false, 0, -1, -1); + + reader.close(); + IOUtils.closeQuietly(associationContent); + + final String target = associationEnd.getValue().getStart().getAttributeByName(new QName("Type")).getValue(); + final boolean feed = associationEnd.getValue().getStart().getAttributeByName( + new QName("Multiplicity")).getValue().equals("*"); + + return new SimpleEntry(target, feed); + } + @Override protected Accept getDefaultFormat() { return Accept.ATOM; } - protected static XMLEventReader getEventReader(final InputStream is) throws XMLStreamException { - if (factory == null) { - factory = XMLInputFactory.newInstance(); + protected XMLEventReader getEventReader(final InputStream is) throws XMLStreamException { + if (ifactory == null) { + ifactory = XMLInputFactory.newInstance(); + } + ifactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); + return ifactory.createXMLEventReader(is); + } + + protected static XMLEventWriter getEventWriter(final OutputStream os) throws XMLStreamException { + if (ofactory == null) { + ofactory = XMLOutputFactory.newInstance(); + } + + return ofactory.createXMLEventWriter(os); + } + + private void writeEvent(final XMLEvent event, final XMLEventWriter writer) { + if (writer != null) { + try { + writer.add(event); + } catch (XMLStreamException e) { + LOG.error("Error writing event {}", event, e); + } + } + } + + private void skipElement( + final StartElement start, + final XMLEventReader reader, + final XMLEventWriter writer, + final boolean excludeStart) + throws Exception { + + if (!excludeStart) { + writeEvent(start, writer); + } + + int depth = 1; + boolean found = false; + + while (reader.hasNext() && !found) { + final XMLEvent event = reader.nextEvent(); + + writeEvent(event, writer); + + if (event.getEventType() == XMLStreamConstants.START_ELEMENT) { + depth++; + } else if (event.getEventType() == XMLStreamConstants.END_ELEMENT) { + depth--; + found = depth == 0 && start.getName().equals(event.asEndElement().getName()); + } } - factory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); - return factory.createXMLEventReader(is); } /** @@ -91,12 +227,12 @@ public class XMLUtilities extends AbstractUtilities { final XMLEventFactory eventFactory = XMLEventFactory.newInstance(); final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - final XMLOutputFactory xof = XMLOutputFactory.newInstance(); - final XMLEventWriter writer = xof.createXMLEventWriter(bos); + final XMLEventWriter writer = getEventWriter(bos); // ----------------------------------------- + final Map.Entry entry = + extractElement(reader, writer, Collections.singletonList("entry"), 0, 1, 1); - final XmlElement entry = getAtomElement(reader, writer, "entry"); - writer.add(entry.getStart()); + writer.add(entry.getValue().getStart()); // add for links for (String link : links) { @@ -113,8 +249,8 @@ public class XMLUtilities extends AbstractUtilities { writer.add(eventFactory.createEndElement(new QName(LINK), null)); } - writer.add(entry.getContentReader()); - writer.add(entry.getEnd()); + writer.add(entry.getValue().getContentReader()); + writer.add(entry.getValue().getEnd()); writer.add(reader); IOUtils.closeQuietly(is); @@ -140,7 +276,7 @@ public class XMLUtilities extends AbstractUtilities { while (true) { final Map.Entry linkInfo = - getAtomElement(reader, null, LINK, null, startDepth, 2, 2, true); + extractElement(reader, null, Collections.singletonList(LINK), startDepth, 2, 2); startDepth = linkInfo.getKey(); @@ -177,8 +313,8 @@ public class XMLUtilities extends AbstractUtilities { while (true) { // a. search for link with type attribute equals to "application/atom+xml;type=entry/feed" - final Map.Entry linkInfo = getAtomElement( - reader, null, LINK, filter, startDepth, 2, 2, true); + final Map.Entry linkInfo = extractElement( + reader, null, Collections.singletonList(LINK), filter, true, startDepth, 2, 2); final XmlElement link = linkInfo.getValue(); startDepth = linkInfo.getKey(); @@ -186,12 +322,16 @@ public class XMLUtilities extends AbstractUtilities { final String href = link.getStart().getAttributeByName(new QName("href")).getValue(); try { - final XmlElement inlineElement = getAtomElement(link.getContentReader(), null, INLINE); + final XmlElement inlineElement = + extractElement(link.getContentReader(), null, Collections.singletonList(INLINE), 0, -1, -1). + getValue(); final XMLEventReader inlineReader = inlineElement.getContentReader(); try { while (true) { - final XmlElement entry = getAtomElement(inlineReader, null, "entry"); + final XmlElement entry = + extractElement(inlineReader, null, Collections.singletonList("entry"), 0, -1, -1). + getValue(); links.addInlines(title, entry.toStream()); } } catch (Exception e) { @@ -231,8 +371,7 @@ public class XMLUtilities extends AbstractUtilities { is.close(); final ByteArrayOutputStream tmpBos = new ByteArrayOutputStream(); - final XMLOutputFactory xof = XMLOutputFactory.newInstance(); - final XMLEventWriter writer = xof.createXMLEventWriter(tmpBos); + final XMLEventWriter writer = getEventWriter(tmpBos); final XMLEventReader reader = getEventReader(new ByteArrayInputStream(bos.toByteArray())); // ----------------------------------------- @@ -251,8 +390,9 @@ public class XMLUtilities extends AbstractUtilities { while (true) { // a. search for link with type attribute equals to "application/atom+xml;type=entry/feed" - linkInfo = getAtomElement( - reader, writer, LINK, filter, linkInfo == null ? 0 : linkInfo.getKey(), 2, 2, true); + linkInfo = extractElement( + reader, writer, Collections.singletonList(LINK), filter, true, + linkInfo == null ? 0 : linkInfo.getKey(), 2, 2); final XmlElement link = linkInfo.getValue(); final String title = link.getStart().getAttributeByName(new QName("title")).getValue(); @@ -300,104 +440,7 @@ public class XMLUtilities extends AbstractUtilities { } - public XmlElement getAtomElement( - final InputStream is, - final String name) - throws Exception { - return getAtomElement(is, name, -1, -1); - } - - public static XmlElement getAtomElement( - final InputStream is, - final String name, - final int minDepth, - final int maxDepth) - throws Exception { - final XMLEventReader reader = getEventReader(is); - final XmlElement res = getAtomElement(reader, null, name, null, 0, minDepth, maxDepth, false).getValue(); - reader.close(); - - return res; - } - - public static XmlElement getAtomElement( - final XMLEventReader reader, - final XMLEventWriter discarded, - final String name) - throws Exception { - return getAtomElement(reader, discarded, name, null, 0, -1, -1, false).getValue(); - } - - public XmlElement getAtomElement( - final XMLEventReader reader, - final XMLEventWriter discarded, - final String name, - final Collection> filterAttrs) - throws Exception { - return getAtomElement(reader, discarded, name, filterAttrs, 0, -1, -1, false).getValue(); - } - - public static Map.Entry getAtomElement( - final XMLEventReader reader, - final XMLEventWriter discarded, - final String name, - final Collection> filterAttrs, - final int initialDepth, - final int minDepth, - final int maxDepth, - final boolean filterInOr) - throws Exception { - - int depth = initialDepth; - StartElement start = null; - - while (reader.hasNext() && start == null) { - final XMLEvent event = reader.nextEvent(); - - if (event.getEventType() == XMLStreamConstants.START_ELEMENT) { - depth++; - - if ((StringUtils.isBlank(name) || name.trim().equals(event.asStartElement().getName().getLocalPart())) - && (minDepth < 0 || minDepth <= depth) && (maxDepth < 0 || maxDepth >= depth)) { - - boolean match = filterAttrs == null || filterAttrs.isEmpty() || !filterInOr; - - for (Map.Entry filterAttr : filterAttrs == null - ? Collections.>emptySet() : filterAttrs) { - final Attribute attr = - event.asStartElement().getAttributeByName(new QName(filterAttr.getKey().trim())); - - if (attr == null || !filterAttr.getValue().trim().equals(attr.getValue())) { - match = filterInOr ? match : false; - } else { - match = filterInOr ? true : match; - } - } - - if (match) { - start = event.asStartElement(); - } - } - - } else if (event.getEventType() == XMLStreamConstants.END_ELEMENT) { - depth--; - } - - if (start == null) { - if (discarded != null) { - discarded.add(event); - } - } - } - - if (start == null) { - throw new Exception(String.format("Could not find an element named '%s'", name)); - } - - return new SimpleEntry(Integer.valueOf(depth - 1), getAtomElement(start, reader)); - } - - public static XmlElement getAtomElement( + public XmlElement getXmlElement( final StartElement start, final XMLEventReader reader) throws Exception { @@ -412,11 +455,9 @@ public class XMLUtilities extends AbstractUtilities { while (reader.hasNext() && depth > 0) { final XMLEvent event = reader.nextEvent(); - if (event.getEventType() == XMLStreamConstants.START_ELEMENT - && start.getName().getLocalPart().equals(event.asStartElement().getName().getLocalPart())) { + if (event.getEventType() == XMLStreamConstants.START_ELEMENT) { depth++; - } else if (event.getEventType() == XMLStreamConstants.END_ELEMENT - && start.getName().getLocalPart().equals(event.asEndElement().getName().getLocalPart())) { + } else if (event.getEventType() == XMLStreamConstants.END_ELEMENT) { depth--; } @@ -467,7 +508,6 @@ public class XMLUtilities extends AbstractUtilities { public InputStream addEditLink( final InputStream content, final String title, final String href) throws Exception { - final XMLOutputFactory xof = XMLOutputFactory.newInstance(); final ByteArrayOutputStream copy = new ByteArrayOutputStream(); IOUtils.copy(content, copy); @@ -477,15 +517,15 @@ public class XMLUtilities extends AbstractUtilities { XMLEventReader reader = getEventReader(new ByteArrayInputStream(copy.toByteArray())); ByteArrayOutputStream bos = new ByteArrayOutputStream(); - XMLEventWriter writer = xof.createXMLEventWriter(bos); + XMLEventWriter writer = getEventWriter(bos); final String editLinkElement = String.format("", title, href); try { // check edit link existence - getAtomElement(reader, writer, LINK, + extractElement(reader, writer, Collections.singletonList(LINK), Collections.>singletonList( - new AbstractMap.SimpleEntry("rel", "edit"))); + new AbstractMap.SimpleEntry("rel", "edit")), false, 0, -1, -1); addAtomElement(IOUtils.toInputStream(editLinkElement), writer); writer.add(reader); @@ -495,9 +535,10 @@ public class XMLUtilities extends AbstractUtilities { reader = getEventReader(new ByteArrayInputStream(copy.toByteArray())); bos = new ByteArrayOutputStream(); - writer = xof.createXMLEventWriter(bos); + writer = getEventWriter(bos); - final XmlElement entryElement = getAtomElement(reader, writer, "entry"); + final XmlElement entryElement = + extractElement(reader, writer, Collections.singletonList("entry"), 0, 1, 1).getValue(); writer.add(entryElement.getStart()); @@ -520,7 +561,6 @@ public class XMLUtilities extends AbstractUtilities { public InputStream addAtomContent( final InputStream content, final String title, final String href) throws Exception { - final XMLOutputFactory xof = XMLOutputFactory.newInstance(); final ByteArrayOutputStream copy = new ByteArrayOutputStream(); IOUtils.copy(content, copy); @@ -530,11 +570,12 @@ public class XMLUtilities extends AbstractUtilities { XMLEventReader reader = getEventReader(new ByteArrayInputStream(copy.toByteArray())); ByteArrayOutputStream bos = new ByteArrayOutputStream(); - XMLEventWriter writer = xof.createXMLEventWriter(bos); + XMLEventWriter writer = getEventWriter(bos); try { // check edit link existence - XmlElement contentElement = getAtomElement(reader, writer, "content"); + XmlElement contentElement = + extractElement(reader, writer, Collections.singletonList("content"), 0, 2, 2).getValue(); writer.add(contentElement.getStart()); writer.add(contentElement.getContentReader()); writer.add(contentElement.getEnd()); @@ -544,10 +585,11 @@ public class XMLUtilities extends AbstractUtilities { reader = getEventReader(new ByteArrayInputStream(copy.toByteArray())); bos = new ByteArrayOutputStream(); - writer = xof.createXMLEventWriter(bos); + writer = getEventWriter(bos); if (isMediaContent(title)) { - final XmlElement entryElement = getAtomElement(reader, writer, "entry"); + final XmlElement entryElement = + extractElement(reader, writer, Collections.singletonList("entry"), 0, 1, 1).getValue(); writer.add(entryElement.getStart()); writer.add(entryElement.getContentReader()); @@ -559,7 +601,8 @@ public class XMLUtilities extends AbstractUtilities { writer.add(entryElement.getEnd()); } else { try { - final XmlElement entryElement = getAtomElement(reader, writer, PROPERTIES); + final XmlElement entryElement = + extractElement(reader, writer, Collections.singletonList(PROPERTIES), 0, 2, 3).getValue(); addAtomElement( IOUtils.toInputStream(""), @@ -577,9 +620,10 @@ public class XMLUtilities extends AbstractUtilities { reader = getEventReader(new ByteArrayInputStream(copy.toByteArray())); bos = new ByteArrayOutputStream(); - writer = xof.createXMLEventWriter(bos); + writer = getEventWriter(bos); - final XmlElement entryElement = getAtomElement(reader, writer, "entry"); + final XmlElement entryElement = + extractElement(reader, writer, Collections.singletonList("entry"), 0, 1, 1).getValue(); writer.add(entryElement.getStart()); writer.add(entryElement.getContentReader()); @@ -643,103 +687,101 @@ public class XMLUtilities extends AbstractUtilities { return count; } - public static StartElement getPropertyStartTag(final XMLEventReader propReader, final String[] path) + public Map.Entry extractElement( + final XMLEventReader reader, final XMLEventWriter writer, final List path, + final int startPathPos, final int minPathPos, final int maxPathPos) throws Exception { - int pos = 0; + return extractElement(reader, writer, path, null, false, startPathPos, minPathPos, maxPathPos); + } - StartElement property = null; + public Map.Entry extractElement( + final XMLEventReader reader, final XMLEventWriter writer, final List path, + final Collection> filter, + final boolean filterInOr, + final int startPathPos, final int minPathPos, final int maxPathPos) + throws Exception { - while (propReader.hasNext() && pos < path.length) { - final XMLEvent event = propReader.nextEvent(); + StartElement start = null; + int searchFor = 0; + int depth = startPathPos; - if (event.getEventType() == XMLStreamConstants.START_ELEMENT - && (ATOM_PROPERTY_PREFIX + path[pos].trim()).equals( - event.asStartElement().getName().getLocalPart())) { - pos++; - if (path.length == pos) { - property = event.asStartElement(); + // Current inspected element + String current = null; + + // set defaults + final List pathElementNames = path == null ? Collections.emptyList() : path; + final Collection> filterAttrs = + filter == null ? Collections.>emptySet() : filter; + + while (reader.hasNext() && start == null) { + final XMLEvent event = reader.nextEvent(); + + if (event.getEventType() == XMLStreamConstants.START_ELEMENT) { + depth++; + + if (current != null || ((minPathPos < 0 || minPathPos <= depth) && (maxPathPos < 0 || depth <= maxPathPos))) { + if (pathElementNames.isEmpty() + || pathElementNames.get(searchFor).trim().equals(event.asStartElement().getName().getLocalPart())) { + + if (searchFor < pathElementNames.size() - 1) { + // path exploring not completed + writeEvent(event, writer); + current = pathElementNames.get(searchFor).trim(); + searchFor++; + } else { + + // path exploring completed ... evaluate filter about path element name attribute + boolean match = filterAttrs.isEmpty() || !filterInOr; + + for (Map.Entry filterAttr : filterAttrs) { + final Attribute attr = event.asStartElement().getAttributeByName(new QName(filterAttr.getKey().trim())); + + if (attr == null || !filterAttr.getValue().trim().equals(attr.getValue())) { + match = filterInOr ? match : false; + } else { + match = filterInOr ? true : match; + } + } + + if (match) { + // found searched element + start = event.asStartElement(); + } else { + skipElement(event.asStartElement(), reader, writer, false); + depth--; + } + } + } else if (current == null) { + writeEvent(event, writer); + } else { + // skip element + skipElement(event.asStartElement(), reader, writer, false); + depth--; + } + } else { + writeEvent(event, writer); } + + } else if (event.getEventType() == XMLStreamConstants.END_ELEMENT) { + depth--; + + writeEvent(event, writer); + + if (event.asEndElement().getName().getLocalPart().equals(current)) { + // back step .... + searchFor--; + current = searchFor > 0 ? pathElementNames.get(searchFor - 1).trim() : null; + } + } else { + writeEvent(event, writer); } } - if (property == null) { + if (start == null) { throw new NotFoundException(); } - return property; - } - - public String getEdmTypeFromXML(final InputStream is, final String[] path) - throws Exception { - final XMLEventReader reader = getEventReader(is); - - final Attribute type = getPropertyStartTag(reader, path).getAttributeByName(new QName(TYPE)); - - reader.close(); - - if (type == null) { - throw new NotFoundException(); - } - - return type.getValue(); - } - - public InputStream getAtomProperty(final InputStream is, final String[] path) - throws Exception { - final XMLEventReader reader = getEventReader(is); - - final XmlElement props = getAtomElement(reader, null, PROPERTIES); - final XMLEventReader propsReader = props.getContentReader(); - - reader.close(); - - final InputStream propertyStream = writeFromStartToEndElement( - getPropertyStartTag(propsReader, path), - propsReader, - true); - - if (propertyStream == null) { - throw new NotFoundException(); - } - - return propertyStream; - } - - private InputStream writeFromStartToEndElement( - final StartElement element, final XMLEventReader reader, final boolean document) - throws XMLStreamException { - final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - final XMLOutputFactory xof = XMLOutputFactory.newInstance(); - final XMLEventWriter writer = xof.createXMLEventWriter(bos); - - final QName name = element.getName(); - - if (document) { - final XMLEventFactory eventFactory = XMLEventFactory.newInstance(); - writer.add(eventFactory.createStartDocument("UTF-8", "1.0")); - writer.add(element); - - if (element.getAttributeByName(new QName(ATOM_DATASERVICE_NS)) == null) { - writer.add(eventFactory.createNamespace(ATOM_PROPERTY_PREFIX.substring(0, 1), DATASERVICES_NS)); - } - if (element.getAttributeByName(new QName(ATOM_METADATA_NS)) == null) { - writer.add(eventFactory.createNamespace(ATOM_METADATA_PREFIX.substring(0, 1), METADATA_NS)); - } - } else { - writer.add(element); - } - - XMLEvent event = element; - - while (reader.hasNext() && !(event.isEndElement() && name.equals(event.asEndElement().getName()))) { - event = reader.nextEvent(); - writer.add(event); - } - - writer.flush(); - writer.close(); - - return new ByteArrayInputStream(bos.toByteArray()); + return new SimpleEntry(Integer.valueOf(depth - 1), getXmlElement(start, reader)); } public InputStream addAtomInlinecount( @@ -748,12 +790,12 @@ public class XMLUtilities extends AbstractUtilities { final XMLEventReader reader = getEventReader(feed); final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - final XMLOutputFactory xof = XMLOutputFactory.newInstance(); - final XMLEventWriter writer = xof.createXMLEventWriter(bos); + final XMLEventWriter writer = getEventWriter(bos); try { - final XmlElement feedElement = getAtomElement(reader, writer, "feed"); + final XmlElement feedElement = + extractElement(reader, writer, Collections.singletonList("feed"), 0, 1, 1).getValue(); writer.add(feedElement.getStart()); addAtomElement(IOUtils.toInputStream(String.format("%d", count)), writer); @@ -774,28 +816,23 @@ public class XMLUtilities extends AbstractUtilities { return new ByteArrayInputStream(bos.toByteArray()); } - public static InputStream getAtomPropertyValue(final InputStream is, final String[] path) + @Override + public InputStream getPropertyValue(final InputStream is, final List path) throws Exception { - final XmlElement props = getAtomElement(is, PROPERTIES, 2, 3); - final XMLEventReader propsReader = props.getContentReader(); - // search for property start element - getPropertyStartTag(propsReader, ArrayUtils.subarray(path, 0, path.length - 1)); + final List pathElements = new ArrayList(); - final InputStream res; - - XMLEvent event = propsReader.nextEvent(); - - // expected text node - if (event.isCharacters()) { - res = new ByteArrayInputStream(event.asCharacters().getData().getBytes()); - } else if (event.isEndElement()) { - throw new NotFoundException(); - } else { - throw new Exception("The method or operation is not implemented."); + for (String element : path) { + pathElements.add(ATOM_PROPERTY_PREFIX + element); } - return res; + final XMLEventReader reader = getEventReader(is); + final Map.Entry property = extractElement(reader, null, pathElements, 0, 3, 4); + + reader.close(); + IOUtils.closeQuietly(is); + + return property.getValue().getContent(); } @Override @@ -803,8 +840,7 @@ public class XMLUtilities extends AbstractUtilities { final XMLEventReader reader = getEventReader(entity); final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - final XMLOutputFactory xof = XMLOutputFactory.newInstance(); - final XMLEventWriter writer = xof.createXMLEventWriter(bos); + final XMLEventWriter writer = getEventWriter(bos); final List found = new ArrayList(Arrays.asList(propertyNames)); @@ -912,7 +948,11 @@ public class XMLUtilities extends AbstractUtilities { final Map.Entry uri = Commons.parseEntityURI(link); final XmlElement entry = - getAtomElement(readEntity(uri.getKey(), uri.getValue(), Accept.ATOM).getValue(), "entry"); + extractElement( + getEventReader(readEntity(uri.getKey(), uri.getValue(), Accept.ATOM).getValue()), + null, + Collections.singletonList("entry"), + 0, 1, 1).getValue(); IOUtils.copy(entry.toStream(), bos); } catch (Exception e) { @@ -945,14 +985,14 @@ public class XMLUtilities extends AbstractUtilities { XMLEventReader reader = getEventReader(new ByteArrayInputStream(bos.toByteArray())); final Map.Entry propertyElement = - getAtomElement(reader, null, PROPERTIES, null, 0, 2, 3, false); + extractElement(reader, null, Collections.singletonList(PROPERTIES), 0, 2, 3); reader.close(); reader = propertyElement.getValue().getContentReader(); try { while (true) { - final XmlElement property = getAtomElement(reader, null, null); + final XmlElement property = extractElement(reader, null, null, 0, -1, -1).getValue(); res.put(property.getStart().getName().getLocalPart(), property.toStream()); } } catch (Exception ignore) { @@ -968,7 +1008,7 @@ public class XMLUtilities extends AbstractUtilities { int pos = 0; while (true) { final Map.Entry linkElement = - getAtomElement(reader, null, LINK, null, pos, 2, 2, false); + extractElement(reader, null, Collections.singletonList(LINK), pos, 2, 2); res.put("[LINK]" + linkElement.getValue().getStart().getAttributeByName(new QName("title")).getValue(), linkElement.getValue().toStream()); @@ -990,14 +1030,13 @@ public class XMLUtilities extends AbstractUtilities { XMLEventReader reader = getEventReader(toBeChanged); final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - final XMLOutputFactory xof = XMLOutputFactory.newInstance(); - XMLEventWriter writer = xof.createXMLEventWriter(bos); + XMLEventWriter writer = getEventWriter(bos); // --------------------------------- // add property changes // --------------------------------- Map.Entry propertyElement = - getAtomElement(reader, writer, PROPERTIES, null, 0, 2, 3, false); + extractElement(reader, writer, Collections.singletonList(PROPERTIES), 0, 2, 3); writer.flush(); @@ -1008,7 +1047,7 @@ public class XMLUtilities extends AbstractUtilities { try { while (true) { - final XmlElement property = getAtomElement(propertyReader, null, null); + final XmlElement property = extractElement(propertyReader, null, null, 0, -1, -1).getValue(); final String name = property.getStart().getName().getLocalPart(); if (properties.containsKey(name)) { @@ -1058,14 +1097,14 @@ public class XMLUtilities extends AbstractUtilities { reader = getEventReader(new ByteArrayInputStream(bos.toByteArray())); bos.reset(); - writer = xof.createXMLEventWriter(bos); + writer = getEventWriter(bos); try { final String linkName = remains.getKey().substring(remains.getKey().indexOf("]") + 1); - getAtomElement(reader, writer, LINK, - Collections.>singleton(new SimpleEntry( - "title", linkName)), 0, 2, 2, false); + extractElement(reader, writer, Collections.singletonList(LINK), + Collections.>singleton(new SimpleEntry("title", linkName)), + false, 0, 2, 2); writer.add(reader); @@ -1081,9 +1120,9 @@ public class XMLUtilities extends AbstractUtilities { reader = getEventReader(new ByteArrayInputStream(bos.toByteArray())); bos.reset(); - writer = xof.createXMLEventWriter(bos); + writer = getEventWriter(bos); - propertyElement = getAtomElement(reader, writer, CONTENT, null, 0, 2, 2, false); + propertyElement = extractElement(reader, writer, Collections.singletonList(CONTENT), 0, 2, 2); writer.flush(); pbos.reset(); @@ -1122,17 +1161,16 @@ public class XMLUtilities extends AbstractUtilities { final XMLEventReader reader = getEventReader(toBeChanged); final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - final XMLOutputFactory xof = XMLOutputFactory.newInstance(); - final XMLEventWriter writer = xof.createXMLEventWriter(bos); + final XMLEventWriter writer = getEventWriter(bos); final XMLEventFactory eventFactory = XMLEventFactory.newInstance(); XMLEvent newLine = eventFactory.createSpace("\n"); try { final XmlElement linkElement = - getAtomElement(reader, writer, LINK, - Collections.>singletonList( - new SimpleEntry("title", linkName))); + extractElement(reader, writer, Collections.singletonList(LINK), + Collections.>singletonList(new SimpleEntry("title", linkName)), + false, 0, -1, -1).getValue(); writer.add(linkElement.getStart()); // ------------------------------------------ @@ -1160,7 +1198,42 @@ public class XMLUtilities extends AbstractUtilities { return new ByteArrayInputStream(bos.toByteArray()); } - public static Map.Entry> extractLinkURIs(final InputStream is) + public String getEdmTypeFromAtom(final String entitySetName, final String entityId, final List path) + throws Exception { + InputStream src = fsManager.readFile(Commons.getEntityBasePath(entitySetName, entityId) + ENTITY, Accept.XML); + + final List atomPathElements = new ArrayList(); + + for (String element : path) { + atomPathElements.add(ATOM_PROPERTY_PREFIX + element); + } + + final Map.Entry prop = extractElement(getEventReader(src), null, atomPathElements, 0, 3, 4); + IOUtils.closeQuietly(src); + + final Attribute type = prop.getValue().getStart().getAttributeByName(new QName(TYPE)); + + final String edmType; + + if (type == null) { + edmType = Constants.ATOM_DEF_TYPE; + } else { + edmType = type.getValue(); + } + + return edmType; + } + + @Override + public Map.Entry> extractLinkURIs( + final String entitySetName, final String entityId, final String linkName) + throws Exception { + final LinkInfo links = readLinks(entitySetName, entityId, linkName, Accept.XML); + return extractLinkURIs(links.getLinks()); + } + + @Override + public Map.Entry> extractLinkURIs(final InputStream is) throws Exception { final ByteArrayOutputStream bos = new ByteArrayOutputStream(); IOUtils.copy(is, bos); @@ -1170,7 +1243,8 @@ public class XMLUtilities extends AbstractUtilities { final List links = new ArrayList(); try { while (true) { - links.add(IOUtils.toString(getAtomElement(reader, null, "uri").getContent())); + links.add(IOUtils.toString(extractElement(reader, null, Collections.singletonList("uri"), 0, -1, -1). + getValue().getContent())); } } catch (Exception ignore) { // End document reached ... @@ -1181,7 +1255,8 @@ public class XMLUtilities extends AbstractUtilities { reader = getEventReader(new ByteArrayInputStream(bos.toByteArray())); try { - next = IOUtils.toString(getAtomElement(reader, null, "next").getContent()); + next = IOUtils.toString(extractElement(reader, null, Collections.singletonList("next"), 0, -1, -1). + getValue().getContent()); } catch (Exception ignore) { // next link is not mandatory next = null; @@ -1190,4 +1265,122 @@ public class XMLUtilities extends AbstractUtilities { return new AbstractMap.SimpleEntry>(next, links); } + + @Override + public InputStream getProperty( + final String entitySetName, final String entityId, final List path, final String edmType) + throws Exception { + final List pathElements = new ArrayList(); + + for (String element : path) { + pathElements.add(ATOM_PROPERTY_PREFIX + element); + } + + final InputStream src = + fsManager.readFile(Commons.getEntityBasePath(entitySetName, entityId) + ENTITY, Accept.XML); + + final XMLEventReader reader = getEventReader(src); + final XmlElement property = extractElement(reader, null, pathElements, 0, 3, 4).getValue(); + + reader.close(); + IOUtils.closeQuietly(src); + + final ByteArrayOutputStream bos = new ByteArrayOutputStream(); + final XMLEventWriter writer = getEventWriter(bos); + + final XMLEventFactory eventFactory = XMLEventFactory.newInstance(); + writer.add(eventFactory.createStartDocument("UTF-8", "1.0")); + writer.add(property.getStart()); + + if (property.getStart().getAttributeByName(new QName(ATOM_DATASERVICE_NS)) == null) { + writer.add(eventFactory.createNamespace(ATOM_PROPERTY_PREFIX.substring(0, 1), DATASERVICES_NS)); + } + if (property.getStart().getAttributeByName(new QName(ATOM_METADATA_NS)) == null) { + writer.add(eventFactory.createNamespace(ATOM_METADATA_PREFIX.substring(0, 1), METADATA_NS)); + } + + writer.add(property.getContentReader()); + writer.add(property.getEnd()); + + writer.flush(); + writer.close(); + + return new ByteArrayInputStream(bos.toByteArray()); + } + + @Override + public InputStream replaceProperty( + final InputStream src, final InputStream replacement, final List path, final boolean justValue) + throws Exception { + + final List pathElements = new ArrayList(); + + for (String element : path) { + pathElements.add(ATOM_PROPERTY_PREFIX + element); + } + + final XMLEventReader reader = getEventReader(src); + + final ByteArrayOutputStream bos = new ByteArrayOutputStream(); + final XMLEventWriter writer = getEventWriter(bos); + + final Map.Entry element = extractElement(reader, writer, pathElements, 0, 3, 4); + + if (justValue) { + writer.add(element.getValue().getStart()); + } + + final XMLEventReader changesReader = new XMLEventReaderWrapper(replacement); + + writer.add(changesReader); + changesReader.close(); + IOUtils.closeQuietly(replacement); + + if (justValue) { + writer.add(element.getValue().getEnd()); + } + + writer.add(reader); + + reader.close(); + IOUtils.closeQuietly(src); + + writer.flush(); + writer.close(); + + return new ByteArrayInputStream(bos.toByteArray()); + } + + @Override + public InputStream deleteProperty(final InputStream src, final List path) throws Exception { + + final List pathElements = new ArrayList(); + + for (String element : path) { + pathElements.add(ATOM_PROPERTY_PREFIX + element); + } + + final XMLEventReader reader = getEventReader(src); + + final ByteArrayOutputStream bos = new ByteArrayOutputStream(); + final XMLEventWriter writer = getEventWriter(bos); + + final Map.Entry element = extractElement(reader, writer, pathElements, 0, 3, 4); + + final XMLEventReader changesReader = new XMLEventReaderWrapper( + IOUtils.toInputStream(String.format("<%s m:null=\"true\" />", path.get(path.size() - 1)))); + + writer.add(changesReader); + changesReader.close(); + + writer.add(reader); + + reader.close(); + IOUtils.closeQuietly(src); + + writer.flush(); + writer.close(); + + return new ByteArrayInputStream(bos.toByteArray()); + } } diff --git a/fit/src/main/resources/v3/Car/12/$value.bin b/fit/src/main/resources/v3/Car/12/$value.bin new file mode 100644 index 000000000..e69de29bb diff --git a/fit/src/main/resources/v3/Car/12/entity.full.json b/fit/src/main/resources/v3/Car/12/entity.full.json new file mode 100644 index 000000000..6b5a05026 --- /dev/null +++ b/fit/src/main/resources/v3/Car/12/entity.full.json @@ -0,0 +1,13 @@ +{ + "odata.metadata": "http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/$metadata#Car/@Element", + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Car", + "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/Car(12)", + "odata.editLink": "Car(12)", + "odata.mediaEditLink": "Car(12)/$value", + "odata.mediaReadLink": "Car(12)/$value", + "odata.mediaContentType": "*/*", + "Photo@odata.mediaEditLink": "Car(12)/Photo", + "Video@odata.mediaEditLink": "Car(12)/Video", + "VIN": 12, + "Description": "lx" +} \ No newline at end of file diff --git a/fit/src/main/resources/v3/Car/12/entity.xml b/fit/src/main/resources/v3/Car/12/entity.xml new file mode 100644 index 000000000..057f42bd7 --- /dev/null +++ b/fit/src/main/resources/v3/Car/12/entity.xml @@ -0,0 +1,39 @@ + + + + http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/Car(12) + + + + <updated>2014-03-19T09:53:35Z</updated> + <author> + <name /> + </author> + <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/edit-media/Photo" title="Photo" href="Car(12)/Photo" /> + <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/edit-media/Video" title="Video" href="Car(12)/Video" /> + <link rel="edit-media" title="Car" href="Car(12)/$value" /> + <content type="*/*" src="Car(12)/$value" /> + <m:properties> + <d:VIN m:type="Edm.Int32">12</d:VIN> + <d:Description>lx</d:Description> + </m:properties> +</entry> \ No newline at end of file diff --git a/fit/src/main/resources/v3/Car/14/$value.bin b/fit/src/main/resources/v3/Car/14/$value.bin new file mode 100644 index 000000000..e69de29bb diff --git a/fit/src/main/resources/v3/Car/15/$value.bin b/fit/src/main/resources/v3/Car/15/$value.bin new file mode 100644 index 000000000..e69de29bb diff --git a/fit/src/main/resources/v3/Car/15/entity.full.json b/fit/src/main/resources/v3/Car/15/entity.full.json new file mode 100644 index 000000000..5b5b8c491 --- /dev/null +++ b/fit/src/main/resources/v3/Car/15/entity.full.json @@ -0,0 +1,13 @@ +{ + "odata.metadata": "http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/$metadata#Car/@Element", + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Car", + "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/Car(15)", + "odata.editLink": "Car(15)", + "odata.mediaEditLink": "Car(15)/$value", + "odata.mediaReadLink": "Car(15)/$value", + "odata.mediaContentType": "*/*", + "Photo@odata.mediaEditLink": "Car(15)/Photo", + "Video@odata.mediaEditLink": "Car(15)/Video", + "VIN": 15, + "Description": "kphszztczthjacvjnttrarxru" +} \ No newline at end of file diff --git a/fit/src/main/resources/v3/Car/15/entity.xml b/fit/src/main/resources/v3/Car/15/entity.xml new file mode 100644 index 000000000..01ac09cac --- /dev/null +++ b/fit/src/main/resources/v3/Car/15/entity.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +--> +<entry xml:base="http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/" 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:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"> + <id>http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/Car(15)</id> + <category term="Microsoft.Test.OData.Services.AstoriaDefaultService.Car" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> + <link rel="edit" title="Car" href="Car(15)" /> + <title /> + <updated>2014-03-19T11:23:02Z</updated> + <author> + <name /> + </author> + <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/edit-media/Photo" title="Photo" href="Car(15)/Photo" /> + <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/edit-media/Video" title="Video" href="Car(15)/Video" /> + <link rel="edit-media" title="Car" href="Car(15)/$value" /> + <content type="*/*" src="Car(15)/$value" /> + <m:properties> + <d:VIN m:type="Edm.Int32">15</d:VIN> + <d:Description>kphszztczthjacvjnttrarxru</d:Description> + </m:properties> +</entry> \ No newline at end of file diff --git a/fit/src/main/resources/v3/Customer/-7/entity.full.json b/fit/src/main/resources/v3/Customer/-7/entity.full.json new file mode 100644 index 000000000..ce583a5e1 --- /dev/null +++ b/fit/src/main/resources/v3/Customer/-7/entity.full.json @@ -0,0 +1,487 @@ +{ + "odata.metadata": "http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/$metadata#Customer/@Element", + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Customer", + "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/Customer(-7)", + "odata.editLink": "Customer(-7)", + "Orders@odata.navigationLinkUrl": "Customer(-7)/Orders", + "Logins@odata.navigationLinkUrl": "Customer(-7)/Logins", + "Husband@odata.navigationLinkUrl": "Customer(-7)/Husband", + "Wife@odata.navigationLinkUrl": "Customer(-7)/Wife", + "Info@odata.navigationLinkUrl": "Customer(-7)/Info", + "Thumbnail@odata.mediaEditLink": "Customer(-7)/Thumbnail", + "Video@odata.mediaEditLink": "Customer(-7)/Video", + "CustomerId": -7, + "Name": "remotingdestructorprinterswitcheschannelssatellitelanguageresolve", + "PrimaryContactInfo": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "ソяソゾ珱ダぁぺミヲネひぴ弌弌ゾァクをぞネヲぁぁミを欲畚ダびび黑を畚グぞ亜ぽゼせポяz黑たバまz亜ク九んまマボゾネゼ亜チ", + "ltevfhqrezbjyaoxoaviujvpncxuflugkghoisylipqgecqkulplvikixhcilkgmovz", + "", + "gßntmp", + "gxyfljyfcrmyaqducbdizxsdkmizhjxymiunrvhntd", + "bfgdndhikllopuzfyytupgxjrkhtrgpemgcurptohsamqhazhctfzdcvhymivnhoxjncntpfuqjvfgtfjjhkndec", + "uerdvhyrbvujpqkufyhmeudrjbssnqjhouaxdmjqlkspmrexxoothuztqvßxqkfavkrcnubrzdyign" + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "lqzgcfbjlmzeoqteatdexkuivugeeajcgvlojfzcmsogc", + "匚ポンチあёタё欲縷ソソzたグタぜミマまひボボマ歹ёゾたァゾ珱ぁ縷マをゼЯ縷ぴをんゾァチ歹タまゼゼボぼタぞボタぞёを九яチグマァяゼチぽ", + "ぺタゼヲマんぁ歹ん亜ぁ亜ミほんaほひびクマぞひ九z匚ンダゼネяハゼそяンミマ歹暦ンソソぽタバンせマゾん", + "vihrazgmjgtkgpbgbnfhhcsycgvzxssrzzvfssqirsslleimedhyhfuvfcnhlk" + ] + }, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "xmnfdsozhyybqhuejakrzoqntnorssxevpjsmsipruxjjghuodqthbvutzantnlssnvi", + "Extension": "クをソ弌ゾあマぺぴグ匚яゼんそマバ亜ボネボマチ畚ぜマ裹畚チま九チソバぽゼzゼァミёポ暦びzダせボソぞソ畚チマяポ九チマ匚ひ欲ポ黑ボ" + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ぴゼ黑zz畚ゼaチボぽソソ暦縷ン九ハハポゼミダダべя裹ダミネをハ九ゼまソポ亜あ弌ァボぞひ裹ゼぴそミぺ欲ぴソяァソ縷グミaネ歹べハんポマぁタソァンタ暦", + "Extension": "qxxvvluootexndauvmjmxcsupdzvrqspyltziba" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "マ裹あネクン暦ァあダゼぞマぴタハァソゾяゾヲあタそぁボゾマぜボマ九た裹グ欲歹んポ縷ぺ弌zァ匚ゼンゾそそ亜ёaタミ歹タ珱んクんポネ裹マグタをた匚ゾぞ歹たぼびそぴァボボЯチネ縷ポ暦ボひダをンЯをチチ欲ぁボ", + "Extension": "ァボボぴ弌ぽチミァタポミをあンЯёチ黑ぞバソゾぞダチポァぁチz亜a" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "agnuykfmdluenuzmrvokpbnbqtmxtpupsmmmmtlatzdulayi", + "Extension": "ぺ匚歹暦亜グひひ裹ゼ亜ポポぴんёまゼяzァそマポaゼマポ歹ソぞソポゾゼヲ" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "gigbplfrxugfzaoeuvfqlfjdfzutffmpvfzzfkdygyxpsiqkdxmvkkieqivqf", + "Extension": "ulreousnjfnjxncfsmkuruhczgcpr" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "znajuovfeompumpfnaxvpnihotlixtkyi", + "Extension": "dhfygicsdlsßfßxsksjmpfhqujdrp" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ァボバヲま", + "Extension": "を珱ぞバ暦ボぽボ匚ぞぞマンЯマぞa欲チそマぞポネぼポぴせゾゼ裹ポ縷ゼぁ亜ボ弌ソёん黑チ畚畚クァボ黑歹ァマまバひひびひクたソびひクほソ暦チzaタたクタ弌弌チ暦そ裹んダびポあぺク" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "kfpoubqjnvsßfbfuvhphelxzamfaimfegesessregutgmy", + "Extension": "バゾ縷まほゼネソマぞほaボをёゾボポぽタぽ暦たァぼぴんぞァё暦びゼそゾёゼ匚ぜボミハぽタ弌ゼチゼをёほタあァボ暦ァチёёそ歹ぞポんあゾゾ暦ンあ歹チボ匚ポタボタ欲ボ縷歹ま弌ぽぜあゾマ" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "xjpbryendyhzjmycrabhbavvezhaodbikixbxhuxmdlfgdqllhau", + "Extension": "nsuslekasfkfqsgdbfuyklksfxkrdgmuuapucehltlneufutespbughidhjnntsgsplqouaoyduzyhyziqplrfaj" + } + ] + }, + "BackupContactInfo@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails)", + "BackupContactInfo": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + "ssaubfuvosytmfmbkuykllzubrjqeepfumohubtouußßtvceldbhajugaynnymuiippßuuecjusfmssjj", + "vycfthvgfrucdjyy", + "vdcyycrvuijookgzbvdupgus", + "jxpecuulvmxdaalzcukesxjqavhpkkkgqsdzbabzyzkhdncuihnx", + "ljyegtmagelndrmsbnlithaghpmlexndkzslczvuhyogsayimqgdmozohnprbaykkcifyalcrfqudq", + "kssjmftgßqirgusshßqymzqumuonbluytßdauenssbmugfssxznhdxrvilefkcjtmyvu", + "ぞぴァゼポマ", + "vnfbauudbyxtzkpdmkzxmmnouju", + "iigukxzusssmnhvfutsoocactfßbhnrcycyvjbeujhudbeßbfnfkcfxyeoeoxsvuekqgmayssssstultesgvzxdbanjßufuzzs" + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "hqqfqftdnihdeguetyvvjeylcmttaauvlddqinuyhrzdnjctiuxpsgffsueimzdmxmttiozbsyks", + "ufasuomoussssssssmihjjjheslrssysyvypdocfvmfokhkpxucassnigscyixgufkrffhrvtcfyifßßqiqmtxßbdvdpy", + "umuasodkkhdkhqzarccabuajjjaliiygagrmjycktuafmlunucvpiusflhndotghjyjezjmsztcatrxxphrvcfdvpgaegz", + "ボ縷バせ亜ポグポぜポを黑マタ欲ゾマポ九せタたぞポチゼハゼゾゼЯソぼほひ欲ま暦畚九んぴたポネz黑歹ぴチマんハ裹まゾ九zタァぁヲひマボ珱ポソクЯべ畚匚Я匚ァЯソマボ", + "aママ畚ァヲポあァをタマァёソяそぽソソびク欲", + "ssldcyxftcßß" + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "ぼんゼをチソチクёをぁチ縷ひまぺЯび暦ぜソマゼバ弌ソせたzz匚ほゾぽまぽマポz欲ポゾ暦ンポポそ匚マぜゾタぞ亜そチ", + "ぜグソゼせタ欲あバ縷Яタァほンソa畚ゼzぞァをソ珱ソぼそミたマァ縷ひ歹ソほせミゾ珱ハゾ裹マチひまぞァ", + "畚ク亜あンチボぼマァソびポボびゼダぴ珱ひ黑せダ歹ゼ九ぽまネネゼヲЯ暦Я弌あグほタあぺひぼяミяzネ縷ハぞァ", + "vzrdfhdtssmbxqhgussgiszfvstgfihdqkbcßusßctsskfmmufpnjußkssymißnßebgrytrjjukßoht", + "ひダЯマダヲぜボンぼクソあ九ソほポ亜ぜボポ暦ゾ裹べゼヲぴ珱", + "mtuzygpgmbrheyirmvrzhgpfeikuzxtxezxcyj", + "sejiivcdcpz" + ] + }, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "yvvkgqjufeevtinhvpdbcyccvsctlvzrijljjpghzdstbjk", + "Extension": "ァ裹ヲべネハババボゼボまソせァ亜ァチたンぼを縷ほンべゾぁゼまマ" + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ぼダ珱欲яミЯァネをマ珱マ", + "Extension": "eearbtomugqbrxjmpiadubmvxaxtbsorunlnthatscugfochcfeezytukoubvfgjbzeogusbecmxhbmsslmvqirbtqopnuxhxh" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": null, + "Extension": "xauhykdpelgultifvgssoqcguaßecsqlogxissxzcyamgnqjreadvfs" + } + ] + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + "ykchhyyquzahßjlvooyumqg", + "tujxpfknetqpokqzcseqdhvxfivqrcicbyerbccqvgg" + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "jimhnzmujfnpnkvzvsjkbjßvßmhvzabtxilpbynfsvrjrrscelpßtevßothentcjovulßcszuithunogvotkjbßvdllkllußncfx", + "utqupdjbmnecjztzxuybkscjq", + "タぽまソハ縷裹ポミククゾ珱ま黑歹ソほァネ九ほグёzЯ亜せタぼびまタハポまァボボダせぞぽダソソクべ欲ゼネゼя匚せを縷ほゾハぞ暦ひゾぴあネぼボボゾ欲ハ匚裹ボネ欲チゾポダぼせ", + "九タグゼせぞぁゼぽネ弌クグゾぜハぴaひ欲ぼ縷ソァあ", + "チダあべソ欲ぺ九ぼほゼマタクボボびソぴяチヲあひそ黑Я珱ぁぁァゼぞぞ歹ミ黑チaチぼァァヲタソを裹ぼ欲たバソネグボゾ裹ぜタ暦クマぴ裹ンチゼタ黑ミバタボ亜べバぜポボボそバほ黑ミzひ亜ぺぺЯゾ", + "ポたあタ裹縷ゼァせタあ歹べびЯゼぼソ縷マ亜ソまびёゼポまマミぞそ縷縷ダソёそ九九ミぼたグポぜヲチぺ歹九яタぁそぴ珱縷ゾゾほぜポクゼzヲんボタァぞミたネタん黑タzソあぁ歹ヲぜハ歹亜", + "qcmqpußsoqssslq" + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + ] + }, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "uexjfh", + "Extension": "blkpgymyuttigggtbtulqtiufmshqfairtdousrqfzlsceqkeloggsbhhfdtuudktrhneczjikurdgxdvdfuuprymvrl" + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "zダ", + "Extension": "msdynmoejazzvofoakebmkßbaaadjgpvymqlhxhatroksspgpsvncebdisiynmyrejoadlvubeakygncj" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "九マぼチ弌まz欲タ珱ンぁя欲チあせ裹ёァびё九ゼミた珱ソ裹あァぁほёゼァя", + "Extension": "clpyfmjxphrnkbsssxxrkmss" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ゼほёた縷チそzダたタソボソバをミマゾ弌珱マゼびそクёミまぁあzゾダネバダべ亜ンァほひ弌ァゼёン裹ボミ欲ソяぞミ歹畚ёタタグポゾあチzあソン亜ゾaゾソバダバ歹ミんぁ歹ポんほゾソゼぼ亜マびほソヲチポミ", + "Extension": "黑畚ぺ裹zチタぴほяんべソダЯぴ欲ぁゾポべぺせァマяソё縷縷あぽクタa弌せァチ縷縷ぁタポ珱яЯゼチソ裹ミヲ" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ぴaそゾんクヲぁ歹ヲボべぜソゾバ匚ひマゼソポяぁソゼネァんあぴほяびひボ匚ゼ九ひマ暦ぴぁ暦ググゼほァタひンクソタ裹ぁё縷グボミ匚亜グび黑ん珱歹グゼタミポゾネぼせёチぜヲダёほポ九ボミ", + "Extension": "せあゼまゼぴソぜグタた九ソボ匚ёa暦ヲ歹欲タ匚ぺミたタひマぞぞЯチ九ボチあマ欲縷ハソミソゼま匚ёヲハ弌裹ゼЯヲチをぴチまポまゼぼゼたぴミンべネぼンあぼグ弌ァ欲" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "fbnmtidvi", + "Extension": "kec" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": null, + "Extension": null + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "九ハ亜ネクた黑びせァaびチボa黑aそぞソ珱ヲァァぽチァをソソゾ匚をぼ", + "Extension": "lzpabrmxrjooukhkktcjrtupspuovf" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "uvvuqvhyyufpßgxuassypsuafnyhahqhnbydrreprgzsskjexvenxusazßvmb", + "Extension": "duuhiiuissgcdvcnymapßxuqxußdyuxxcssjrrrrtsylykluiu" + } + ] + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + "グポゾびaぺそ欲をaそタンをゼダ黑ぺ珱ま縷ぜク縷びクゼ縷ゾボゾたせソチ九びゾミソボ縷チタ亜黑ソソミぺんゼ歹ソ黑まをボンチ暦ぺんポソネゼチミボグゼタゼポЯタ歹そぼ裹", + "fidpldjmkophmxitkxseuxxjuxsk", + "珱ёёクァポ暦ぁゼぴ歹aク匚ほソハ九ん亜ンべそソゼび畚弌ハタネё九ソ匚クタチ九ぞマ珱ん畚ンヲダポチソびミぴネポポ黑チaび弌Яソ縷ぺ暦ぴ", + "黑ёЯぴあた縷ぼソソボぴぺぞクぼ歹匚弌そソzボチァマゼゼボぴ亜ボポマチぞミン黑タ亜ポぞソダバ弌ァタヲヲゼぜ縷ソヲゼソ畚グ亜ソバぽマンタタチぺタ珱珱ぽァ匚欲たяミ裹あ裹ポほクダ弌", + "domufeyunedufkonxmrodjulsnssagktdßldtgletsshkrqfpcovsdpklxßeitoxkigauvbhc", + "byßlxhßszntlrmajudjfqossggqnuetnhurdpylbsujzyhxgcvvqsszugessqucxcrußhsßdjmdisnbbeßldfssdoqkpgc", + "zvlstxzogzhdfvbnovvpqylchagxipe" + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "欲яソゼたンァaァチネ", + "ンべク弌ポボяクぽグ九ダせяマaボあグ九ゼハマゼ", + "absjcqrokrssngiltespzgcjsszjßxjme", + "un", + "jzddslerzxqtotauuumvqvtsstzmaefuiurljßudjhgssnybzffcjxksfpbfmußapqsmplcpvqmikfyuemßbtxygrlgzbr", + "gtgygqkiskvghcatadßvufutgyiofhoßeqonnftznoahi", + "fuuhqqqaynljlftffudsijus", + "pdhpfpvtobsfgyonysdgbfrec" + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "vmhermybuqlqinlxtzvbzcrafnggnirxosvsyxheamjrr" + ] + }, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ひё弌ソボ畚ゼミたべチバ九ヲボタァミ弌ネ縷チ弌べゼ弌ンァポヲ畚ボ弌ァダ珱ァまぺ珱チびぼ歹ゼヲミ九ぁぞぽ九z歹畚ハほチあ珱縷ぁあびァa欲ゼゼ匚べぁタaゼマ", + "Extension": "あほまタマそマzソヲバ九ぺクネタぜせタゾぞまァまaぺほЯゼひぽま暦バ匚ボ匚チゾべぺ畚ヲソひソ" + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "kdfvzßplysmdsgssqpgtnpfd", + "Extension": "ソゼぜあタチя歹タまン" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "fqsulbmnuepoaejzxietparqkjfnnznnzrypodzumjglhrlclsxvymy", + "Extension": "ivyaukeudiuvnovcupbdtxiivirphtnqexvf" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "lborxdrefsqsunutvoisjtkkotrdmprk", + "Extension": "ygzuaniayxcfrlsfefxsrpnimjkqebpvdjukudruqjmbmgmaxghuemzdtxcnijzrdgacrc" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "digluvk", + "Extension": "欲亜ゾタミぽёぜ九ほゾ珱aべァまんボぺバぺンソマべソグぁミボボぽ縷ゾダぽ匚びタ縷九ゾん歹匚ぼゼを歹ハたたソぺチ歹ま弌ァぽ縷ングぞハぺヲゼポせタたぜァ珱ミマボaヲ" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": null, + "Extension": "vrzsßßxdauobcndßquißeohxuryhdvudqijfmßomfxgiplhhra" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "rdingolßbßynuosslrqnsbvddrdlsdgfbuquekjujxyoot", + "Extension": "ltultdvzuxeptrvqqhlgxecvovfqulraczslkqfgxenlrseodjemrvtjmzgyyuuduehtyfuz" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ミたグ欲びゼミソひんクびんネタんゼゼミほんァポクほぴzぼあゾタゼzン歹欲Яそ亜亜せ欲яミぁ", + "Extension": "sruuqojlapßkljrußcgusffrßumfssfpnpphxuqfxkgßmufpjhssijfbsshhivlqim" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "Я歹Яァ黑ゾミァん亜縷ポチせaяほべぽゼボЯソポ珱珱ぺァ歹まダァソマゼタa九ゾ暦ゾバあバぺそ黑ダひゾソ匚ひソぽЯクァソぁぽグゾяぺタぺ珱ポゼせゾミソaяz畚ソミzポびァ暦亜ぴンソゼ", + "Extension": "liiegqxevshzerlcekvsonbubjgchdckbdyuxxksuxt" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ソぴァポミダんa黑z歹aァポボバゾa弌匚匚ミァひяそ縷ぺ暦亜ぺゼ亜珱弌ぺ黑チ亜ポネン黑ヲぁチゼぴぼ", + "Extension": "xr" + } + ] + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + "riootkulyjszuovuvhikssßqxchyoehtssuayxudqjssgxmaxyissssmibzss", + "lifgxessßaozssaoleugoixjlubiyr", + "tfk", + "pmvnavuuaz", + "uqßjkipmutbf", + "たハチァaヲび歹をダ", + "pbuleqijuzarsspkuqduarajgerußusyqlyssssntdqsrhrnrßhterdipipuxjhkoriehbirl", + "", + "qstgqtcranmxtgurdvumadpukvrcusdycixeeeqpxyejucfddlnoysyginvtezxcfnqqjoqculqibufbmjzfooakolyjuvnxeu" + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "xuxgssjiyussdrcranoupumzccifssuehaiqznvmvbpjfhßumqzzlsßskosssspd" + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "べяんせびぁんネネ亜ぺダほせハポя珱チマぁゼぴ暦ボ縷黑タチぞぜゾチぁzゾん歹ミゼグンママ縷ゼマゾポヲソソほぜ縷欲歹タソをた弌ゼ歹ポ九ネぴたぜァびそたをぁマゾ黑ぺぴゼ珱ハマボほソびそボ暦ゼ", + "nvaohlgmpcfituofnciryuoaklaakltqvrkukttqedzjdoqgzdbofmqsrap", + "iilrdigfyvjjrqxttgxraufqhfetoloz" + ] + }, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "縷ハЯマソゼミ裹黑я裹ンまませ欲ま黑弌欲まヲяボひグポタほ裹ソネ九せソほポァミ縷黑ソグё暦たぴ珱暦クソませたァaチグダぁ九ぴポя", + "Extension": "uuuyuxxunzuaburvjoxnr" + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ミ暦ァソ縷裹ネяネぴタぜび", + "Extension": "mlvyktnjapkduvulsbacmyibtsqxergbbiscubcasavdkstfgnhakiaphp" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": null, + "Extension": "diioxqmyakmeureygmjdfriei" + } + ] + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + "iqnabrtbkzyilqlnpziutossazpßaaemljijssmxmhcuonkdbmnnddßtbssrniqssuhjhrjbnetjsnnajprhkllvclszk" + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "マタЯミたぁハ弌をネゾタ珱まびバzぽヲソぽほぺポハひ裹ネタ亜んあЯタяёチまぼタせチびゾЯぽゼぴタまゾンяをバソをァたネたバまタポゼタんぽぞぁポяソクマあミポん匚ミソほぽァぁミ", + "cudhlfrvpuezhcxßpsszhnrxbjoedghvhshxmteyjjzinsviajgluabbngessgdhlcßsbajgcme" + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "peauzxaglbduqimoajvnaninioyrlbmyemfdbmkfyfqtiomjlfy", + "ゾяzゼ九畚aを欲んポァぞそ亜ほaゾネタボマ黑まゾzチタべぴまァべグあんァ弌暦バゼポゾクひ亜Яゼポぽゼソぺぴё匚そポ黑弌まゼせボяをぞ亜", + "orhoßbnoussuyssuxoagfbsyafßnygxqchbhduxeepnnuxonuxbuojudbcreujgbdosurnmefssfsqutubkjaurmxq", + "itx", + "caugxngovuoepellvrafenpvuqhkylaqkdxq", + "歹ポЯ弌ァマチァそゾハ黑ぺバ黑をポゼまぴぴぴ畚びグたソチァひ歹タёぞひポぁ暦をびハクまヲクハ弌あチネほまミボクボ", + "ぴほンンzポせ畚ぜソほほ珱そそバ歹黑黑暦匚ァゼяクaチ弌ゼ亜タ縷べゼぜaバクァをぽミ" + ] + }, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "pamtyaqxxßqaofkg", + "Extension": "auaknnleptqpmhbhctauscepsduzdgrzryujaeocknbidz" + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": null, + "Extension": null + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + ] + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + "ぜク九まゼダ匚ぽせミaバほ匚クべボ九ポひぁンク九欲ソ縷ぺをチボ欲ぺゼァポを畚歹z欲aЯチぁ畚ゾんマ畚ゾハぴタマぜЯンソネポダネタせそグ欲ソミ裹匚黑ミァ", + "マヲヲチタゼあёボマミぺボんゼ畚まぽヲゾソzゾポ畚ネネミマソびチそぺんゾЯぜяチソぁゾマぜぺあハァぁソせびゾんミソをマダソァァひタひぜゼЯa畚ぴぼゼёゼソ弌チボ", + "qaihqzpasjloisgbssorpjbdxukzdrteqeßso" + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "kzuuufsssuqpmdvsskudqußfgssgxeoßbubroumalelmboeomhde", + "ofmoncksscxsssx", + "ボゼソまべたポ暦ぴを暦欲ソ弌", + "バёァハёネ弌ёぜほポソびぴミマほボボ暦せzンボミaぼゼバゾソ匚ネぞほグゾダハソポほぜ裹ЯァЯぜせたべひソa九ポёマ縷ぜミグソハ弌縷ゾёヲァびマёびひ歹珱ぜボゼ黑たァ" + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "nftqkrduliiuzoszloctxuyekunazdkmkpgaga", + "agßmnssßpmuuidlujtbfocxbqngfutpmpvzykssnzcpkknflbbqqrxcgqbuhßbqcxzdpfhpfkbdinvhrfiuouoss", + "dsfnntqhpnftbxpfukpuuxvliyelesßncxiyayqnlbbxhp" + ] + }, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ぜべポソ裹暦ゾマポぞま縷ダミゾク亜ミをま欲ёポハボヲぞタン亜aべ九ゾソяたボネぴゼz畚ァ裹んをポ", + "Extension": null + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ぁダせ暦zマネマ裹ぴあたёぼソべそミぜ裹縷ひァマんポゾゼソぺぜポあ珱ゼゾあ歹ёタゼぼネひ欲びぼゼボんゼぜソ匚亜裹ぺゼゾぽべチぺポせ", + "Extension": "zodqnkpuuvohituuzbdilcqfsfuafehiemquohvdorelfvitevibtifrjyydqnvikegmizrnfazubuaxbezjz" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "びゾハボタ欲ヲぁまゾチマあたタ縷亜ぞタゾをzяせバボゼぞぽ九ゼんそまタせ九ゼソンぼそミゼボァ裹んソをチ暦マゾゼほソタЯ縷ゼ歹匚タせぼチ匚ボゼた", + "Extension": "bbqkdtorßbpqqyfqchnpjgb" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "aououccavesudotgkpyxftxzoytvadiknhquzkkgpdtuphddluusubgbcbabjhzmzcmvk", + "Extension": "nceargrqlfujfqh" + } + ] + } + ], + "Auditing": null +} \ No newline at end of file diff --git a/fit/src/main/resources/v3/Customer/-9/entity.full.json b/fit/src/main/resources/v3/Customer/-9/entity.full.json new file mode 100644 index 000000000..d69bf97df --- /dev/null +++ b/fit/src/main/resources/v3/Customer/-9/entity.full.json @@ -0,0 +1,750 @@ +{ + "odata.metadata": "http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/$metadata#Customer/@Element", + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Customer", + "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/Customer(-9)", + "odata.editLink": "Customer(-9)", + "Orders@odata.navigationLinkUrl": "Customer(-9)/Orders", + "Logins@odata.navigationLinkUrl": "Customer(-9)/Logins", + "Husband@odata.navigationLinkUrl": "Customer(-9)/Husband", + "Wife@odata.navigationLinkUrl": "Customer(-9)/Wife", + "Info@odata.navigationLinkUrl": "Customer(-9)/Info", + "Thumbnail@odata.mediaEditLink": "Customer(-9)/Thumbnail", + "Video@odata.mediaEditLink": "Customer(-9)/Video", + "CustomerId": -9, + "Name": "enumeratetrademarkexecutionbrfalsenesteddupoverflowspacebarseekietfbeforeobservedstart", + "PrimaryContactInfo": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + "cumcjsujssßjxfqsakdpubmeßßsrsjpxqbrvruszjjxrxhpvßotlmvlntonctakahouqqxaduguuh", + "hxrnqifurielbjbgzudqnzuoiksuprbxyzutfvfduyxlskedoutlmlzjsmkb", + "axuncpheikzvpephn", + "xss", + "zgesgoyqtxpnvuqssqanpfgouvtxofebvbccfdsga", + "ネ弌ミチ亜ぽあぽボ九亜ボЯaハゾァё", + "ktspjklssrnklbohocuxdvnokqcjsceßrjhneeßgxpgßbguxvchizsuayqcssuavsqpuexpficvarlpsso", + "kyssißchskvabvvqgppiabzdxirmmdsolujgxrluxlzyfcqbyycgmhjjnpoßf" + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "rmjhkvrovdnfeßqllqrehpogavcnlliqmoqsbvkinbtoyolqlmxobhhejihrnoqguzvzhssfrb", + "yßkzfqeßqßkoundi", + "ソチゼネネんハぼチぺひaボ裹ぴべゼボゾァzぁポマひゾポそ欲ポぴぺゼёЯハソяゾチミクゾ九ソぁ暦ほハァ珱ソ", + "jzsvlrljzassnpyptjuzqpnzcorjmlvtdsslqrucßzczptmmchßpkfexßx", + "xdssssifrpidssßuußhrßuspjenzgkcilurdmurfßlkyzoiepdoelfyxvijbjetykmqmf", + "g", + "九欲マまzゾまあんひバび縷弌ソソ九ソ裹zミチゼゼタハ九縷ボそミゼボゼぜネゼそぽ縷亜マダを裹ソボゾ", + "xursuhdtgshjbjblkrkapuauea" + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + ] + }, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "べ黑ポaダそァ黑ぞァぼク畚マ黑た弌亜びボミびダマひん弌マグゾ匚ンァボЯボ歹匚z黑まほ畚歹暦ポほ暦ひ欲ソ珱ぼべせёグヲ亜ほァボタボチぼЯほポををя欲ぽァゾをマ縷ゾせネ", + "Extension": "somzcvarnprbdmqzovljazvnrqidogiznplvrrejaoqrtijfuiuqenxsdycntsmbmrnpatdjuijxdutpcsjelhyastnsk" + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "elvfevjyssuako", + "Extension": "fltuu" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "hkugxatukjjdimßytgkqyopßitßdyzexdkmmarpojjzqycqqvsuztzidxudieldnhnßrakyetgbkbßoyoglbtoiggdsxjlezu", + "Extension": "ypfuiuhrqevehzrziuckpf" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ddfxtvqbsogqsssqrbxvamhss", + "Extension": null + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": null, + "Extension": "pvlssokhcuduvßyubduarmsscqtzgddsssenvnmuapbfßsmdthedhtinssgrpxbbiosskgscbfcedbvhncsganfßz" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "zssfvjobacbplbteflztpvjymbrvoelkbqtjftkusunalum", + "Extension": "ゾネ亜ンポゾё弌バ九ァёヲ亜九グ畚ソんミチЯそёソぼゼゼ九マまほべソンゾソボёaぽz珱ёグぞチぼ九ゼボ裹ぺぺЯゾ珱ミチ" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": null, + "Extension": "せ歹ゾ亜ぼaぺゼゼソボたせポんポたポァぁゼЯンソゾボミせボ欲ボ裹zチままぜゾゾソゼソ歹匚ゼァ" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": null, + "Extension": "マ珱あせ珱Яぽボぺた弌チ暦ミべタグяチポび縷ボaびぺせひ珱ボ欲縷縷ポべせゾべソせべ珱ほぽポぼヲポぞぽマぺびぽ暦欲べた裹ボaそ匚チん黑マたタそЯひハソソァポグぼ黑ぼゼяハzバマバ珱ゼ縷ァを弌ひぜせポ" + } + ] + }, + "BackupContactInfo@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails)", + "BackupContactInfo": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + "c", + "vluxyßhmibqsbifocryvfhcßjmgkdagjßavhcelfjqazacnlmauprxhkcbjhrssdiyctbd", + "ぴダグマァァネぴネ歹黑ぺぺミミぞボ", + "qiqk", + "弌ゾァ", + "pjoksiybbjva" + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "uymiyzgjfbsrqfiqfprsscdxksykfizfztdxdifdnhsnamuutsscxyssrsmaijakagjyvzgkxnßgonnsvzsssshxejßipg", + "ぼせァァたぞミ珱歹まぜマ欲ダ暦せた歹ぺびソを亜ボタァゾ欲暦九そボダせせёぺべタポびせ珱ゼまぞほ珱ひЯソゾЯ欲ソzァミ欲弌ポ黑ёせひソひ九ソ亜畚aをダンゼソァァゼそボポ暦をボボミポたマ", + "adeudvßljhombkxemahksaccvmykifehnnmtgrenjqbdrukuypqsosseßavßtssmjigußqzosx", + "あ", + "яぜマチゾポグぼハタダマチマァハ黑ぺそz縷弌暦ぼ亜黑暦亜をaンびぁべヲボぼa黑ゼヲタゼそグゼぞたバほそ歹マяマぺをソ暦" + ] + }, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "hrgtsgßfsßhjsyguruevulamtgvogngntpauujzzomaegxqnkvbk", + "Extension": "qxßhmxßorvriypßddusqlßbztdrmhyrycoossjmhdnyhmumsxvzbtuujrrirdbltuovyulextvjepprtbnvskssstl" + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "せせひボゼグポzク亜せ", + "Extension": "珱あЯァソマゼ亜ぽせびあゼあё匚ゾ畚マんンゼヲぼグタバソzグべЯz匚歹ゼぽЯゼゼマん縷ダぺをま縷ァンハバぼソマソぜ九ヲzぜz欲裹畚ひぞバぺ" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "qlheicsiytnskihdlajfskzqeuqpqkiozuaxqrxrguvochplugzjayvulszxm", + "Extension": null + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "remqvutsszqyjrnoxgmroaßxhsstßodjjkvqßlgtufdassnrgghkdizagurcosiuprmbjqanrmphhx", + "Extension": null + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "qsaflkkyfcbeeosgkgcsgvuumnqmtqssjitnyr", + "Extension": "たほゼんダをぺたポハaソ縷ぁ暦黑ぽ弌" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "dtzgntqbpclumgjzchgeeaybqszghtucamommypgzgdbgvcmuuqhmepcutquufuvidoz", + "Extension": "uaisttxvljnpiusßssysvdvmrnkii" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ゼボチヲzタぜz裹ァゼ匚ぼ亜ァハたあグぴハяzソゼたをボミёほぜバぞマぞそяンァボ珱グソぞ", + "Extension": "ゾハぴz九珱グマぜタ暦ぺソべ珱ぜをびそあべゾぞあёチミボゾァタ珱ボ珱ぺソぁひ珱ぽんソЯゾぴそたボタク欲ミびバチяソそ裹びぞ九ぴ九Яzハバネゼぁぞん珱九亜ソ" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "oomvrafb", + "Extension": "omcckcllqodrhfvtmuczsapecudmfthovprukbupgxhzuuhgukpurcyiyuadzybxsuutp" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "バ珱ボボぼゼ弌黑ゼ欲ぞぺゼバマバぺんび畚マゼマタぼボЯボミソびまゾそポせゾんaバゾёダグ亜タ匚べせяソンび暦裹びひせグ", + "Extension": "ypurdynixhngpvdssv" + } + ] + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + "irbkxhydugvnsytkckx", + "kdfyfquqqkssktailssßijaudnxsshmevkpmcssueifnntjrdbuhvvbpmbkl", + "qgimpkvbtodppqmuchndpbasdpveftkosnpujbsuhazclumy", + "ikaxlhgdaqvyßquyae", + "qjyqct" + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "ezphrstutiyrmnoapgfmxnzojaobcpouzrsxgcjicvndoxvdlboxtkekalyqpmxuzssuubphxbfaaqzmuuqakchkqdvvd", + "ßjfhuakdntßpuakgmjmvyystgdupgviotqeqhpjuhjludxfqvnfydrvisneyxyssuqxx" + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "ァソソゼ黑ゾタヲダ亜弌ゾぺ畚せ歹z黑欲ダタんゾソマたゼン匚ボンハク裹黑ぺァマ弌ぁゾaをぞたまゼン九マぁ黑ぞゼソяヲЯミ匚ぜダび裹亜べそんz珱タぼぞ匚ёハяァんゼ九ゼほせハせソヲゼ裹ぼんネяヲヲ九ゼグz", + "xutt", + "ßqsfasfifstuyepbdivixqßhcrhgzufopnzrqsßdrrisbabßfßnsmfehqgehgssumjqngusspponjunfuckhassc", + "mmadqpssslnfpkxxghssnßyyvgbvzz", + "ecupyfylnrqzamsnlqndenjprqiuqzsdclmbabheaeguuufpefjcpasjuuydciupyhslamnfdlczbck", + "tgllpcsihudiuxbsbtiunkrozosscmreztfjijsksyusa", + "匚ソёポ弌ソ歹まボゼダタゾЯ歹欲そほぞёハ亜ポ弌ёバぜマァネせ欲ゼ", + "タぁぼタzё欲マ縷ほЯ九せァボ弌яマミЯ弌ぼボびグひzポんミそёяぁをあネボせダzネ裹暦ハァバンァま弌ミマネンぽゼあぞ匚ぜひクひそネミяёチ欲ゼハぴあ暦ァ欲ハ", + "fassjgeiaqzlfkuqtsqqpssulhomzuzplocoxgctqrssasszzdtfbpoßjßannndxuziejhifzfmßßssqssxnkxuqßgkmsdof" + ] + }, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "zymn", + "Extension": "iußkgesaijemzupzrvuqmxmbjpassazrgcicfmcsseqtnetßoufpyjduhcrveteußbutfxmfhjyiavdkkjkxrjaci" + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": null, + "Extension": "avsgfzrdpacjlosmybfp" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": null, + "Extension": "ximrqcriuazoktucrbpszsuikjpzuubcvgycogqcyeqmeeyzoakhpvtozkcbqtfhxr" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "をチァ歹畚せボёク", + "Extension": "ん暦ポЯバミをマぞゼバぞミほマクミ九ぁぴ黑ひ暦ぺz畚ぁまゼ畚ポzzダあёяんタそボゼひた九ミた歹zポボ弌ボバ畚たンゼあ九マЯぽぽ亜ポぴぴひポァゼほaチゾンポ" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "scvffqyenctjnoxgilyqdfbmregufyuakq", + "Extension": "珱タほバミひソゾzァせまゼミ亜タёゼяをバをを匚マポソ九zzバ縷ソ九" + } + ] + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + "ぁせべぜяあぁタぜぽヲボそЯボ九チぺソ裹あミミダЯ九べ暦ポぁんせァ暦ヲべゼぴぽマポたァソンをゾ縷珱Яぜぺネ弌タァクポせま", + "azvdfahggyscxgcmrcfyqyiimdpvrizuhddliauujpsdbmnyiogaldbivtsahmpcyyupisjqeklabtxzqqsnszd", + "pfdujvakfdrzvgqryesbvi", + "ミ欲яタネボミチ畚そぜゼ黑ぁポンミソボまミ暦ゼaёяぼク畚クダソタ暦マ" + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "Яほチまёンそべたボぼソボaゼぜゾヲググマタチボ縷そクハン九ぜネんん暦たァ亜ネ", + "bxbeuspvkhcnqkqyhxplbhldofodsrzooedqhuynyocrrrpfkhgeprjthyxupgotho", + "amnßaniuxnksxuhhzlj" + ] + }, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ネハンソぽハほンそゾ珱", + "Extension": "gqnjluvptjlqees" + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "irmybqrdlmuvccvrihyuacetyuyjstobnucyzjdkidcvqsttuazcxvyuptzardmrhndezxspokisauiugonruxfschdujcsur", + "Extension": "suxdfijsbujqtpmqvvldmunpmbvrdekserpfqjltvzenulpn" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "黑黑ほぽミぞぺミゾひァミボせЯほンゼクミゼチ匚ン暦ぁダぽダたび歹欲を弌ミぜゼミグチたゾ縷ぼそ畚チハaぞソをぺァァたほソポハzびァネゾ縷ァまをたチポネぞま", + "Extension": "びンポバЯミタバヲソチ珱zあ弌ボヲぞ裹亜ぺダぽを弌チ弌ァせぁほほゾ匚ゾハまチァぼヲまグ欲ミまボハびゾんヲンンソボミグ暦ソaべタ黑ぺァクびハぴ" + } + ] + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + "ssuknmssbuptdcmfxyzuygtukpjzkßßussuhbnkdvfmtessussiyyufkqzfeusxuqlbukviyguhqilhp", + "ボァぁチほポミんぼぁぞグ九ゼポマёタ裹ゾグ珱ぴタそグマァ", + "hgjbxnzßltlxxbhqbkvgivgzvomkyßhusguegcxoonjuyahgttmzgbqnßmjsalimhfoljgf", + "bmjnauuusolkvmtbevvoiqkyjpyyzhkmfsßiujlqssyußezlqubdlulnpemukzycgr" + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "pepfuucvkukicoriygtohaqcesenjfisgooupuaffrnqqgqslb", + "ßiphhdjuqkuutsoßnkuglvtkßpsidibpljhe", + "aハひマぽゼ裹aボダ匚ヲ匚ヲま縷ぴクひゼ亜ダァ畚ダぺチ", + "ekubxtgikairemlokqbmbshhmhdfuexqp", + "bponnizufilxhjussixuhijrllesshuk", + "びa珱", + "iucejykztdznuuocvzqimomßyatvbmzjjyeqygdpeococzfpzssossypkssccbhurtcglozilhlreajzjtsssoydhßnxkijq", + "ゼゼЯ匚亜亜ゼゾソチポま欲ダёぁ暦ゾぼマё弌ソ珱クzまソЯせ九ク匚ポボン黑ポンぴを", + "sstfhepuybhqssujvlssmgvfmuzeoulehkhuurcßisslqmpdaeucbshoiyjbnhgzkrvvc", + "nkvmvbtyxxagxfgafdxrjqpseeyrtfsvsknclmbqpcqkfllfjtpzdddxviktciomoopjrilsebiu" + ], + "ContactAlias": null, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ßtvplushjikkmoiguzeqgdyze", + "Extension": "ポzほボ歹ひ欲んダたまё九そポボ弌チあ黑匚ぼボゾЯ黑ミ珱裹タんぁ弌ボミぞべ暦マzぽёボ亜匚チハひべまぽハёネzゼん亜バ黑ソネゼЯ歹ぺほぜグタゼネ畚" + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ソァダボボぽミя欲マァ暦ソべ弌ゾまボバaチァゾ弌マ畚をミ黑ァべ匚ソぁびチ黑ァ弌九ぞべゼゼぁミネ亜あボァぞЯヲたぜ珱亜z亜ネネぜゾゾダグゼёぺ", + "Extension": "弌ァ黑あミネ縷タポまンあ亜ゾ黑せミたゼя亜たぜzaタァチミ珱ぁゼをたひ弌び弌яネ畚ソァ欲ゾゼ匚縷ゾzゾゼダ弌ぜポぼネたぺボを弌弌ほハ亜ボァそ裹aそゼたん欲まソゾ九ソぜ匚クボ珱ゾ" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + ] + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + "gnrmpyrunhenforvxßmqlubakqtdpxpsffiprfspxpzttvftxcrpsaguhrissuhntugdßeeondssuydkd", + "hfuzzdzxbausjkeuzglfrtiifsbjxxgkquzbmtgzaouogllfuikxizdnceqbemzfqrickupualfmyzstcxnuhjgqvgzkioykolkp", + "ajfxmqsqcfxzoyuxbghhivuexnuhhligaengimtzirsubutlzpcdausudcazugcrblyigutpmjfhizvstfjt", + "ぴァゼあ珱ダ歹たミゾяzマぴミびひ珱バ九チゾァぁんゼぽひタaソソゼび亜", + "zぜミまハ裹せёたタせぞぽaポぁ亜マネク亜ソぽポボ弌яハダタソネほゼ裹ゾёを黑ソネぽぼ九せゼポタ亜ァゼせ亜チネゾ歹ёポ弌縷ゾゾボぜそ縷珱яびяソ匚ダグ" + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "colxbogbrkjraqonluqrssmvlpgssfcblffkkrhrfmtzcjqmaxrßyspyqtfa", + "ぁンソzぜクチべソび欲ソぜ裹ぁぽゼ畚", + "pcftrhurg", + "gszulmukqcveclßpkzounijuouhssulevhaubolzgssy", + "dnckcdkdfzddurfucsuuasbtukssavbrqagyqummcq" + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "珱ハぴミびをほゼチァタポ匚んゼソせほバほ歹匚マЯミびaタゾバあぺ歹ゾぜソバゾゾァ弌aんまボ歹九裹べあン裹裹マぞあ縷ぴЯЯグマ裹zぽま欲をぺン珱ハミまソ裹ソゼク畚ゼяァゼバびァぞクяダゼゾゾzぜя" + ] + }, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "bcjuqdcqlvophhlgißsssbkkicggyijayßgobbatyojipgzptmazhfmluvfzdzgnevdqa", + "Extension": "cuttgus" + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "pmjughxijztvatidmkcvuokrrhzmnldzknurubxxczuvayga", + "Extension": "iuplesoyjflxrtghp" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "yfqsvasszngiyfssrrkissksskzubnsshfzxqunubkagzljßppzilassdpysjjk", + "Extension": "npkkosujbhseylkfmdjkgnbnavvgtzliuytgiotfdmldlmyuyixbtnbah" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "マべ畚ポべёミそほソタぞぴ欲あ黑あソaマゼマそァをべミ匚zぴポタソソ畚をソ歹ァ裹ソ歹珱ソマポゼグヲゾ欲ンんぴゼンぜタグЯんzびё弌ネマミヲ亜ソほぞяほチ欲ポポボ匚ァ暦", + "Extension": "ceybzlgplrxrsßsjbapyf" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "tcßotroukrinnuvktzaassrizqjuvzdbsuetoqhssumznegqlxexcssujziuemgygxukhulesvhßxleoepßsss", + "Extension": null + } + ] + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + "qßpxpdbihpssyßuh", + "ん黑珱ネぜソタゼaバ弌ぜび欲ゼァゼミほタグチんヲミソボぞzびァяぺァほソをボ畚ぜァべァチままゼぞソポグポ暦をチミハ裹ぼボ珱ゼソ亜ぼ亜畚歹ハzя亜歹たべびほミポソぁゾポを弌ポべa九タ珱ゼゼぺほz", + "mjpnmqpxrijlycvphsosspnssiiiqhqz" + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "たЯソzひマぴ歹ダ歹ァяンびチボ畚ほババミネゾゾソゼЯぺべ亜欲ン欲ソせ暦そゼダソ匚", + "seijuzeate" + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "rßquagbniumksuxßsshtjgnjctvbuuzdossvuvocihxngelqgqcsbocijonjecukvulhlyheytf", + "bhtoknnesuyyhrdtuychtbniokduxlxzmqzurssuqztkglqmsuunkobeavqßßfhccfßhuuieciqlatcp", + "ゼマzゼ亜んチ縷グяヲ弌ァタゾほяタぼ九zマぜんクタマяぽチяゾёミヲチぽ黑ぺぁぴ畚ミяぽままzダタべぜぼべバ", + "adqnqvalupnzssofbneßieictlugsscxodßryßjqdzavmshqnivermtmnssayiy", + "xjdyfbftxueecmlgvbcouun" + ] + }, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": null, + "Extension": "jkssnqcircyldttrkfhmmbqbssetxulcfhcgjqisssddbßhrzkyyaunja" + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "jfbßpiejfegpkccarxdodßzkktßbßrhebeyßßavpxepxruibugojuhqjjtmxoxjrrdjjhdaresdbjivfqujrnssfvj", + "Extension": "yjapxugsrukfkheihafycbfjtiszpzxrtuicdmkxhmyzyfi" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "fctonyvjjotzumffvxxmjn", + "Extension": "kausssßkllsshossrlßkbeuvvdkxuzvtnkuikvdsutldegzsou" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ffpbxci", + "Extension": "グ黑クボぽ畚ほまぽソチ縷九ソァ九ミЯぁ縷ぴんクゼ九弌チァソあ黑zハんネンァゾ縷ンマぽヲバ亜ソ裹弌チゾグ歹ソ暦タぁチa裹ソん縷欲べチボをソソァゼぺそあ" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "を裹匚弌zマせソ匚匚黑ソゼバゼポ弌ソ亜ぁぞぞソんべぜたミゼバハマ暦ぽハチダぜ縷ゾゾひタポダ黑Яボミゼゼゾチマタひソソハ珱ダクあひびべ", + "Extension": "ormcnznutdilzabioisjoilayiigkfdvpxcryfimmpqdsageyiilgmqeuldkxcfjabxislotzbxlhbdysah" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "bcmk", + "Extension": null + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "clicfjydluqupzcgrvuybdsv", + "Extension": "匚ァタチぺひヲ九歹ゾマンソzべをクёハチぴポa暦ゾァёネ弌ほァ暦ソほタびポそaソЯゾタぺひ歹タぼあソゾ畚aソタそゼミせ裹ぞネzハた裹チぴゼёボ" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "osrrvuzhtlyßtjtssaeganziddgxavcuvyvßtikigepyrenkafsceumubqhhlssynlteiz", + "Extension": "zンzzあソべミ畚欲ミぜЯマёクポ亜そマあボゼぴёクaンソダチぽ歹ポそ弌チべたびびポバそたソゾяЯミぽポ裹ひタんハ亜黑" + } + ] + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + "ckcgmctjpylhadenxxzsdxgqotbudjqyj", + "ぴそソ亜z欲ぁヲポぞををミァ欲ハぼゾぁァぜチほ匚ぁネひびぽチネ九ゼクゼ匚ソべ弌ソ珱ゼяンゾ裹せzボせマaぺタハバ畚ポミヲポ畚マぜひダ裹ク", + "ernkqmccuxbmu", + "vttxtkutzryuyzrznyqbnexephmekflciaanuofmxulzphfuubzbb", + "縷ミまグz九んポびマミaンた欲ソバぜァ匚ダ黑ソぺせゼ裹ぼァんёまぜびマソ珱ヲバぞタ歹弌aポゼびёグタバせゾたをヲまぁまダ珱ぁァ畚ボソ欲暦ソクハポゾぴぽミそゾチマぺ畚畚弌" + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "縷九び暦マぁまソゾaをべチグハяzヲハを縷ハ歹匚ゾハァネびダひマポ畚黑マび弌ネソ黑暦ぺぴべァた珱ぽ珱珱九クゾせを裹ゼんせミをまz亜バダマソ黑歹たネたゼせクボチたソゾマァマゼァび弌ボ匚匚ソ縷ミバ", + "ntjhgartbizycuupcnycfdgxuoeqihtmibzgziffzpii", + "ヲんほゾЯチёぜんソダチぺヲяポ暦んソ珱あ歹暦ボたぼポぽマびまぜたボぜク畚a匚Яぁぜポ黑ソタそクヲネを", + "kolpgtzujuukjqyrvynkvssuzbqufftymtfußydpeifsmußimlfbjczalssphtpqksdqsokzvmfmgmcrobm", + "タソ", + "ポЯぽ縷珱ソソ歹яぼぞまンぁバゾポそミハタぼをソぴぴz欲ゼ", + "縷欲匚縷タボソあ畚マぺゼン黑タハぴダ畚ァチぺ匚ゼミ暦マポゾポゼ縷ソ" + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "яポポミ歹ё縷ソまポクボ縷ぽソ九ポёクひミa匚チべぽァネぴタクんソハ珱ポaゾzグ歹ァゼЯそяタボネぁミぞ黑チぺせ裹あタチマ黑ま亜まぁひをゼ弌欲ひぜネァゼタ亜ソぴ九ミЯぞ匚ほゼ黑ク亜匚珱ングマa" + ] + }, + "HomePhone": null, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": null, + "Extension": "cmaycumopfuzxozeq" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ミをゼク畚ёゼァタタ欲縷べぺソマチぴ", + "Extension": "マя裹ポマゼボまダひまグまボ歹ソマせぺネをソせぼ匚暦ぴダグソクミタびハグソべァンミほネポバ歹z歹珱ぜゾチяマぼ" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "べあ黑あ弌チ畚ぜяソЯゾ九ぺぽぁゾゼボz畚ァマまネ暦マ欲黑クゼ暦んゾ匚ボん裹縷ぁヲ歹暦グせЯ欲弌ゼぴミタЯzン畚クボぜネ珱ёぴポёべひぼソボミハタハネёタんぴヲン黑ゼミボ裹暦グ", + "Extension": "txbxpofvumgtjoahzzfejozypkaohttlfetphehgzfojmpclxhhlmccqxcduobketujhf" + } + ] + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "そЯチグンべ", + "g", + "弌ぞミぞ亜べぼ匚欲ぁ", + "歹ひタクゾzボびぞポん畚んネハヲソマ", + "ボべボ裹たグマまをzaボ暦ククミポ畚んァaポソゼぼソぺポ欲クグぞ縷", + "xjgmxvurhclpcbuublhzsbproakymtsyohublsheusaaynjnmmygjcbqtpjxhxonkmkugndjiguabpsmnvgavglxbuhvflpx", + "jopbssdlfiiblbyyfmmutoepqbbjonsdjuihjßrkthijvascßkcohk", + "mßßtyhtjxvsimlfxijgervqlßksgpysser", + "ママ" + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "Яぞソネzぽぽёクグマミクゾ九ソポゼ暦z欲ボ", + "dujnfsrxjlyßshfqzsfgurbssjgssbahhsssjriyleseyssaykssalgzo", + "ßkußtkxaouafsbtkrpfdtuesshzsrlkpußiojgisspessztjrfdpkdmyoyvj" + ] + }, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "qmcfpifonqrbtddlsnhieuevvbdzokouxhcuufqucdqvuyimipvb", + "Extension": "mhkkvgßinyfhaohjsscxtmusssiuzlqzlxssuruydjzfpgfq" + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ictßgrmgakmlqhkjdlpmrxzkssxj", + "Extension": "buphnbtdigygktiqxufckqyncfdekcbytlddazvbkulusjjpuulueajmcaocxsuuoznzluqydisfosvuxqbfsextesaau" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "弌珱ソ", + "Extension": "yssdojmuggdmliievzuxrisvßsslsesskmcxubssmssglxmcecynsstengu" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "uxtigxrdpyvofyjfumjtsexsfx", + "Extension": "p" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "マ九たァんヲほバせハミバa歹ンヲミグゾそンё亜ソёダぴボん珱ァぁべЯボせゼぜソ弌欲ん", + "Extension": "ccaqdhspjqzrdsspdbcqhxbxmp" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "Яま匚をzハボチaんチチネぜミ暦マяべяソゾゾ珱ァёそそポゾёァ九まネゼ", + "Extension": "ボポ" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "vxxcrirzmuzßzlmzkdcxsof", + "Extension": "guooaztfdudgcehjpn" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "xinlmqmmzjxdigpxziuciuxzsdqqqsfpcicajkcprcdxftdizqltgvpsbnscaxvbodaaonkkv", + "Extension": "ンポネЯチポンほタぼゼソタ歹欲ミンバ欲グあ亜ぁ亜まネゼべЯa歹ァ亜縷べa亜ぼソほ縷ネボяボタバ亜ポ亜畚aマソ弌ほバべミハぽ弌ぺバゼぁマボボ裹ネミたハゾせたёぞ九クボダぼぁ黑ポ" + } + ] + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "yßiuappxßouvouißsinisscqcßnljjnrpjbfqjgoknzjlvkzonfhytl", + "yuloujkluhssllphßomexokmqgxouuxssp", + "mqfhlzapizqiraxnymtbhcusfddrfhfuuetfuolvoujprthovbzev", + "umebqddqpuxqbntuayinubemxuvohd", + "llcefuumsavvrxchuexalknlldljocgvtrrimtqsceiubqucprcbeijaxsleqhhkpaiauouhhoskgjdvicuhaotrdrbucpi", + "nbpbilyxxzgssrkkrsshnßllchslzauuezxuyodzbgnufxhgeuhnstfqoess", + "nyseykiypgjabckgbjßhkuqpigpbrxueknuskdßsscbbeurmebvyncobjcißn", + "ミひァチボソ亜畚黑ゼёそほネチゼゼ欲ダ", + "ボ欲ァゼグソクまソそァンソ裹欲ぜ畚バソ黑zぞぴンaゼポポチミま裹ん亜ダタぺぼせまゾボンa匚ぼタマバんzzチヲёゾボァソz暦マミミ欲ソポマァん縷ボタたゼをぞぽべマ黑ヲあほ亜ァァクミぁ縷畚暦ぞゾ欲aぽ", + "vgfkgjjnthhouexqlsslofßfkaxhrphyuyiiquvkzzvßsmteiqbkfqcdxe" + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "クゾべぽポzぺ歹ポタチぴタンバaぽ弌まёゼ黑チタボ歹ほチ黑グ黑畚び珱ボぴまソグたゼク弌匚あё九珱ソaひミ亜マチソaマボ欲マボ黑まバマЯポグゼボ弌ゼぞボёぞ弌ソバぜゼたンぺべぜゾまびぼバ珱チソ匚", + "hailafhfqemfuca", + "xehnlgboayvqvnnpemaxirvxkjsvogvuodljstlrdxcjjyuyr", + "qhhbbliingaqiamneovcefpbjjjlcuonbhorxdccrjix", + "khpynqyhhuuuuepxvbjksyxsuyqnqcthxi" + ] + }, + "HomePhone": null, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "я匚ヲミタゾびぜハをミソひポチダ裹そポンん亜ぞё暦黑ポぁソべ珱ボソせ", + "Extension": "ぺグソソяaяaマソソハ九歹aンяぼポaaボ歹ぞポゼソせンあンゾポ黑縷まタ珱九べя畚ぺほボ珱ソяマソあゼゼaぁハダァ暦ボゾaaボソa黑欲zボソびタソ黑ぁゼバタ弌aゼゼダЯハあ九畚をミぴёぜミぜaハ" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "zxxz", + "Extension": null + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ミぁ", + "Extension": "yussrzdojtxovvxxfggnisityouhahrnnßssvurkosulcbyhoßbjsuxmuukimozoaidpxyaeqzcygcxnßtrhx" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "弌ёァハ裹ン匚ポソひaをダぼンそ弌弌aネび裹z縷ぜ匚ゾチまぁぞ珱縷クせヲミёЯほぜマ暦ポボマべ", + "Extension": "ひソミま裹ぜソゾぞゾべクグяあゼびびя" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ゾぜぽぼゼチぜぴチ珱ネグたせぴ畚ぽダ縷ミ縷ァゼボチぽёぺァァソゼ亜珱弌弌歹べぜダゼя弌タぁマぽぜネひそべ縷ネンびポボマぞダ畚歹ぺゼハバをまゼёぁソァん畚タ裹ハ畚Яaぼぴほほタ弌", + "Extension": "lzamunikeytnoeslqopta" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ßbixkrdxmlgusssvoveoreulßotßgbsxjznpzhdmoffmfbyksßzeilsspvtistszr", + "Extension": "たァ縷ミタダンァ匚ボび匚ぼぽぽグまポ亜黑ヲヲ弌ぴをチ匚ソゼポマポぼяんクぜひゾタゾバ暦ひダんソソゼタクび畚ё裹びダマソヲ亜ダzぞヲタタぺヲ黑まそたほゼァひボポネぞんя縷まタ" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "hrmtyqqbatbklccapnmayakujleujsfiuivhnjkqkhpuyulpakunnivgcrfhnusdkiqhgvhuovllhdxpa", + "Extension": "ミタミぺタぞ裹ぞあぁポボクミ欲たせまびあネソマチァネン欲マゼぴё弌マ亜チヲぴ珱ミタぁあ暦縷縷ёチあゾaぞボ裹ハほ暦ぞ" + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "qvnuqycuxjkmyhxrkyjsbjehxiltuffmjphydehnud", + "Extension": null + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "zkjpsgbbvbssnklhpoyofßssjjnxssssjgdnkrxhzsyijbuiixugzkpdchxßaßeyhduksshouqßrjaayvvggs", + "Extension": "szfiuvgypzrohrorrhrytbbbkeuqqgbtcuqyeaysnrsedsgibnzcveumtonsqqddsyvnabqqkzfijuxsqikegyxbpouxjueyj" + } + ] + }, + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails", + "EmailBag@odata.type": "Collection(Edm.String)", + "EmailBag": + [ + "あЯ黑ん匚黑ミあそハぼ畚ぜハべほz暦яポz縷я弌ぼん裹ゼポЯ縷タ縷縷яソぞёびンゾチяチボチあゾミぴゾゾァぴ歹びンぞあソяんゼぜミ九ンべチ九ぜ黑ボяひグ畚ソひ", + "qklhuqevkazrzbuxvxmvxzimufajdlzgbnpymfndur", + "yezbyncoglrgymuqnmyenkgmcfmfcrbranxcecgyrcuixmpsspmufegkqhzneyvqdzggqnnguzffpdpqrtnpoagycjnqdsxs" + ], + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "びぽぜひぁべンァミё歹ゼ九ま縷ぽグほタまボゼそぺンaあソぜハaソゾミタソマゼチaёёぼぴハびaン珱ボグひボタを亜ひ畚ひぞぞダほそそグ黑Я匚ゼチzポバほチひ黑ボ欲Яせチゾぺ匚歹ネソ九ま欲", + "lvoicdzbkajladtpccgoesstzgnsspaouscvtuexjniyukvfvssuepzfumectrggufdtccmssnjxveuvd", + "bvviusxabruisbsrvueenbsnpsodnrtoryokdbizfudcsfindjyiezoaidkjppjkxrgtidhpi", + "縷タ畚をポダネた匚マあミ弌ぜグя九ポァポ九欲んяzぽゾяёをЯネぽ九ぞチゼひ亜せ" + ], + "ContactAlias": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases", + "AlternativeNames@odata.type": "Collection(Edm.String)", + "AlternativeNames": + [ + "aßzjzkteribxhjessilrikeßvqpzdakiihddmorjpcbiehnvhesbdnncssßougmlebß", + "omxkeixc", + "ё匚ダべをぼ歹タ歹ぁんタЯ畚あぁ匚び縷せぽそミぺダ畚亜ぴソミネネせマ九ダネぼ九zぞ", + "vß", + "aeeixozegrklreoigkfomimjssssrmsjpaubkrzzcnvlrpfklnlsslmmklssnquykjhzijglqkukbtfekzolloatzeltsloduhoh", + "裹ぞンzё弌ぁん暦たソタバタポゼァゼボンё黑ハ亜そァ縷マ珱ボ黑aマゼぺクゾぴネヲ畚ミマチまネタ九ぜヲ匚", + "lßmcxszhluclvbffzukrofcaloxopyxssksssscxdhdemdmhuufkveqmvquumusyuvpgdexdekr" + ] + }, + "HomePhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "przlqsubhpftkflqhdrquisfehghugbaievergiasovhlkmooisfxglmzpkdhjgejdqjjjye", + "Extension": "ほァ弌チ欲ほ" + }, + "WorkPhone": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Phone", + "PhoneNumber": "ldievtpfstyctoqrorobkkfpvxkobpknuzyugxuhenfjgmtrmmnvsxcezjbyfkiofgiuulfc", + "Extension": "uxcfosnpenucrxbxqbimkbiakylecffeshvebxumxkesmuidfhmfpngztcuuclhrctkfaorthlqaogkpvcsus" + }, + "MobilePhoneBag@odata.type": "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)", + "MobilePhoneBag": + [ + ] + } + ], + "Auditing": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.AuditInfo", + "ModifiedDate@odata.type": "Edm.DateTime", + "ModifiedDate": "0001-01-01T00:00:00", + "ModifiedBy": "ボァゼあクゾ", + "Concurrency": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ConcurrencyInfo", + "Token": "tyoyfuhsbfzsnycgfciusrsucysxrdeamozidbrevbvfgpkhcgzlogyeuyqgilaxczbjzo", + "QueriedDateTime": null + } + } +} \ No newline at end of file diff --git a/fit/src/main/resources/v3/Customer/-9/entity.xml b/fit/src/main/resources/v3/Customer/-9/entity.xml new file mode 100644 index 000000000..c2e25a272 --- /dev/null +++ b/fit/src/main/resources/v3/Customer/-9/entity.xml @@ -0,0 +1,565 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +--> +<entry xml:base="http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/" 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:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"> + <id>http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/Customer(-9)</id> + <category term="Microsoft.Test.OData.Services.AstoriaDefaultService.Customer" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> + <link rel="edit" title="Customer" href="Customer(-9)" /> + <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Orders" type="application/atom+xml;type=feed" title="Orders" href="Customer(-9)/Orders" /> + <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Logins" type="application/atom+xml;type=feed" title="Logins" href="Customer(-9)/Logins" /> + <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Husband" type="application/atom+xml;type=entry" title="Husband" href="Customer(-9)/Husband" /> + <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Wife" type="application/atom+xml;type=entry" title="Wife" href="Customer(-9)/Wife" /> + <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Info" type="application/atom+xml;type=entry" title="Info" href="Customer(-9)/Info" /> + <title /> + <summary type="text">enumeratetrademarkexecutionbrfalsenesteddupoverflowspacebarseekietfbeforeobservedstart</summary> + <updated>2014-03-17T09:08:34Z</updated> + <author> + <name /> + </author> + <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/edit-media/Thumbnail" title="Thumbnail" href="Customer(-9)/Thumbnail" /> + <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/edit-media/Video" title="Video" href="Customer(-9)/Video" /> + <content type="application/xml"> + <m:properties> + <d:CustomerId m:type="Edm.Int32">-9</d:CustomerId> + <d:PrimaryContactInfo m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails"> + <d:EmailBag m:type="Collection(Edm.String)"> + <d:element>cumcjsujssßjxfqsakdpubmeßßsrsjpxqbrvruszjjxrxhpvßotlmvlntonctakahouqqxaduguuh</d:element> + <d:element>hxrnqifurielbjbgzudqnzuoiksuprbxyzutfvfduyxlskedoutlmlzjsmkb</d:element> + <d:element>axuncpheikzvpephn</d:element> + <d:element>xss</d:element> + <d:element>zgesgoyqtxpnvuqssqanpfgouvtxofebvbccfdsga</d:element> + <d:element>ネ弌ミチ亜ぽあぽボ九亜ボЯaハゾァё</d:element> + <d:element>ktspjklssrnklbohocuxdvnokqcjsceßrjhneeßgxpgßbguxvchizsuayqcssuavsqpuexpficvarlpsso</d:element> + <d:element>kyssißchskvabvvqgppiabzdxirmmdsolujgxrluxlzyfcqbyycgmhjjnpoßf</d:element> + </d:EmailBag> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>rmjhkvrovdnfeßqllqrehpogavcnlliqmoqsbvkinbtoyolqlmxobhhejihrnoqguzvzhssfrb</d:element> + <d:element>yßkzfqeßqßkoundi</d:element> + <d:element>ソチゼネネんハぼチぺひaボ裹ぴべゼボゾァzぁポマひゾポそ欲ポぴぺゼёЯハソяゾチミクゾ九ソぁ暦ほハァ珱ソ</d:element> + <d:element>jzsvlrljzassnpyptjuzqpnzcorjmlvtdsslqrucßzczptmmchßpkfexßx</d:element> + <d:element>xdssssifrpidssßuußhrßuspjenzgkcilurdmurfßlkyzoiepdoelfyxvijbjetykmqmf</d:element> + <d:element>g</d:element> + <d:element>九欲マまzゾまあんひバび縷弌ソソ九ソ裹zミチゼゼタハ九縷ボそミゼボゼぜネゼそぽ縷亜マダを裹ソボゾ</d:element> + <d:element>xursuhdtgshjbjblkrkapuauea</d:element> + </d:AlternativeNames> + <d:ContactAlias m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases"> + <d:AlternativeNames m:type="Collection(Edm.String)" /> + </d:ContactAlias> + <d:HomePhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>べ黑ポaダそァ黑ぞァぼク畚マ黑た弌亜びボミびダマひん弌マグゾ匚ンァボЯボ歹匚z黑まほ畚歹暦ポほ暦ひ欲ソ珱ぼべせёグヲ亜ほァボタボチぼЯほポををя欲ぽァゾをマ縷ゾせネ</d:PhoneNumber> + <d:Extension>somzcvarnprbdmqzovljazvnrqidogiznplvrrejaoqrtijfuiuqenxsdycntsmbmrnpatdjuijxdutpcsjelhyastnsk</d:Extension> + </d:HomePhone> + <d:WorkPhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>elvfevjyssuako</d:PhoneNumber> + <d:Extension>fltuu</d:Extension> + </d:WorkPhone> + <d:MobilePhoneBag m:type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)"> + <d:element> + <d:PhoneNumber>hkugxatukjjdimßytgkqyopßitßdyzexdkmmarpojjzqycqqvsuztzidxudieldnhnßrakyetgbkbßoyoglbtoiggdsxjlezu</d:PhoneNumber> + <d:Extension>ypfuiuhrqevehzrziuckpf</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>ddfxtvqbsogqsssqrbxvamhss</d:PhoneNumber> + <d:Extension m:null="true" /> + </d:element> + <d:element> + <d:PhoneNumber m:null="true" /> + <d:Extension>pvlssokhcuduvßyubduarmsscqtzgddsssenvnmuapbfßsmdthedhtinssgrpxbbiosskgscbfcedbvhncsganfßz</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>zssfvjobacbplbteflztpvjymbrvoelkbqtjftkusunalum</d:PhoneNumber> + <d:Extension>ゾネ亜ンポゾё弌バ九ァёヲ亜九グ畚ソんミチЯそёソぼゼゼ九マまほべソンゾソボёaぽz珱ёグぞチぼ九ゼボ裹ぺぺЯゾ珱ミチ</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber m:null="true" /> + <d:Extension>せ歹ゾ亜ぼaぺゼゼソボたせポんポたポァぁゼЯンソゾボミせボ欲ボ裹zチままぜゾゾソゼソ歹匚ゼァ</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber m:null="true" /> + <d:Extension>マ珱あせ珱Яぽボぺた弌チ暦ミべタグяチポび縷ボaびぺせひ珱ボ欲縷縷ポべせゾべソせべ珱ほぽポぼヲポぞぽマぺびぽ暦欲べた裹ボaそ匚チん黑マたタそЯひハソソァポグぼ黑ぼゼяハzバマバ珱ゼ縷ァを弌ひぜせポ</d:Extension> + </d:element> + </d:MobilePhoneBag> + </d:PrimaryContactInfo> + <d:BackupContactInfo m:type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails)"> + <d:element> + <d:EmailBag m:type="Collection(Edm.String)"> + <d:element>c</d:element> + <d:element>vluxyßhmibqsbifocryvfhcßjmgkdagjßavhcelfjqazacnlmauprxhkcbjhrssdiyctbd</d:element> + <d:element>ぴダグマァァネぴネ歹黑ぺぺミミぞボ</d:element> + <d:element>qiqk</d:element> + <d:element>弌ゾァ</d:element> + <d:element>pjoksiybbjva</d:element> + </d:EmailBag> + <d:AlternativeNames m:type="Collection(Edm.String)" /> + <d:ContactAlias m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases"> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>uymiyzgjfbsrqfiqfprsscdxksykfizfztdxdifdnhsnamuutsscxyssrsmaijakagjyvzgkxnßgonnsvzsssshxejßipg</d:element> + <d:element>ぼせァァたぞミ珱歹まぜマ欲ダ暦せた歹ぺびソを亜ボタァゾ欲暦九そボダせせёぺべタポびせ珱ゼまぞほ珱ひЯソゾЯ欲ソzァミ欲弌ポ黑ёせひソひ九ソ亜畚aをダンゼソァァゼそボポ暦をボボミポたマ</d:element> + <d:element>adeudvßljhombkxemahksaccvmykifehnnmtgrenjqbdrukuypqsosseßavßtssmjigußqzosx</d:element> + <d:element>あ</d:element> + <d:element>яぜマチゾポグぼハタダマチマァハ黑ぺそz縷弌暦ぼ亜黑暦亜をaンびぁべヲボぼa黑ゼヲタゼそグゼぞたバほそ歹マяマぺをソ暦</d:element> + </d:AlternativeNames> + </d:ContactAlias> + <d:HomePhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>hrgtsgßfsßhjsyguruevulamtgvogngntpauujzzomaegxqnkvbk</d:PhoneNumber> + <d:Extension>qxßhmxßorvriypßddusqlßbztdrmhyrycoossjmhdnyhmumsxvzbtuujrrirdbltuovyulextvjepprtbnvskssstl</d:Extension> + </d:HomePhone> + <d:WorkPhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>せせひボゼグポzク亜せ</d:PhoneNumber> + <d:Extension>珱あЯァソマゼ亜ぽせびあゼあё匚ゾ畚マんンゼヲぼグタバソzグべЯz匚歹ゼぽЯゼゼマん縷ダぺをま縷ァンハバぼソマソぜ九ヲzぜz欲裹畚ひぞバぺ</d:Extension> + </d:WorkPhone> + <d:MobilePhoneBag m:type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)"> + <d:element> + <d:PhoneNumber>qlheicsiytnskihdlajfskzqeuqpqkiozuaxqrxrguvochplugzjayvulszxm</d:PhoneNumber> + <d:Extension m:null="true" /> + </d:element> + <d:element> + <d:PhoneNumber>remqvutsszqyjrnoxgmroaßxhsstßodjjkvqßlgtufdassnrgghkdizagurcosiuprmbjqanrmphhx</d:PhoneNumber> + <d:Extension m:null="true" /> + </d:element> + <d:element> + <d:PhoneNumber>qsaflkkyfcbeeosgkgcsgvuumnqmtqssjitnyr</d:PhoneNumber> + <d:Extension>たほゼんダをぺたポハaソ縷ぁ暦黑ぽ弌</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>dtzgntqbpclumgjzchgeeaybqszghtucamommypgzgdbgvcmuuqhmepcutquufuvidoz</d:PhoneNumber> + <d:Extension>uaisttxvljnpiusßssysvdvmrnkii</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>ゼボチヲzタぜz裹ァゼ匚ぼ亜ァハたあグぴハяzソゼたをボミёほぜバぞマぞそяンァボ珱グソぞ</d:PhoneNumber> + <d:Extension>ゾハぴz九珱グマぜタ暦ぺソべ珱ぜをびそあべゾぞあёチミボゾァタ珱ボ珱ぺソぁひ珱ぽんソЯゾぴそたボタク欲ミびバチяソそ裹びぞ九ぴ九Яzハバネゼぁぞん珱九亜ソ</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>oomvrafb</d:PhoneNumber> + <d:Extension>omcckcllqodrhfvtmuczsapecudmfthovprukbupgxhzuuhgukpurcyiyuadzybxsuutp</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>バ珱ボボぼゼ弌黑ゼ欲ぞぺゼバマバぺんび畚マゼマタぼボЯボミソびまゾそポせゾんaバゾёダグ亜タ匚べせяソンび暦裹びひせグ</d:PhoneNumber> + <d:Extension>ypurdynixhngpvdssv</d:Extension> + </d:element> + </d:MobilePhoneBag> + </d:element> + <d:element> + <d:EmailBag m:type="Collection(Edm.String)"> + <d:element>irbkxhydugvnsytkckx</d:element> + <d:element>kdfyfquqqkssktailssßijaudnxsshmevkpmcssueifnntjrdbuhvvbpmbkl</d:element> + <d:element>qgimpkvbtodppqmuchndpbasdpveftkosnpujbsuhazclumy</d:element> + <d:element>ikaxlhgdaqvyßquyae</d:element> + <d:element>qjyqct</d:element> + </d:EmailBag> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>ezphrstutiyrmnoapgfmxnzojaobcpouzrsxgcjicvndoxvdlboxtkekalyqpmxuzssuubphxbfaaqzmuuqakchkqdvvd</d:element> + <d:element>ßjfhuakdntßpuakgmjmvyystgdupgviotqeqhpjuhjludxfqvnfydrvisneyxyssuqxx</d:element> + </d:AlternativeNames> + <d:ContactAlias m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases"> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>ァソソゼ黑ゾタヲダ亜弌ゾぺ畚せ歹z黑欲ダタんゾソマたゼン匚ボンハク裹黑ぺァマ弌ぁゾaをぞたまゼン九マぁ黑ぞゼソяヲЯミ匚ぜダび裹亜べそんz珱タぼぞ匚ёハяァんゼ九ゼほせハせソヲゼ裹ぼんネяヲヲ九ゼグz</d:element> + <d:element>xutt</d:element> + <d:element>ßqsfasfifstuyepbdivixqßhcrhgzufopnzrqsßdrrisbabßfßnsmfehqgehgssumjqngusspponjunfuckhassc</d:element> + <d:element>mmadqpssslnfpkxxghssnßyyvgbvzz</d:element> + <d:element>ecupyfylnrqzamsnlqndenjprqiuqzsdclmbabheaeguuufpefjcpasjuuydciupyhslamnfdlczbck</d:element> + <d:element>tgllpcsihudiuxbsbtiunkrozosscmreztfjijsksyusa</d:element> + <d:element>匚ソёポ弌ソ歹まボゼダタゾЯ歹欲そほぞёハ亜ポ弌ёバぜマァネせ欲ゼ</d:element> + <d:element>タぁぼタzё欲マ縷ほЯ九せァボ弌яマミЯ弌ぼボびグひzポんミそёяぁをあネボせダzネ裹暦ハァバンァま弌ミマネンぽゼあぞ匚ぜひクひそネミяёチ欲ゼハぴあ暦ァ欲ハ</d:element> + <d:element>fassjgeiaqzlfkuqtsqqpssulhomzuzplocoxgctqrssasszzdtfbpoßjßannndxuziejhifzfmßßssqssxnkxuqßgkmsdof</d:element> + </d:AlternativeNames> + </d:ContactAlias> + <d:HomePhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>zymn</d:PhoneNumber> + <d:Extension>iußkgesaijemzupzrvuqmxmbjpassazrgcicfmcsseqtnetßoufpyjduhcrveteußbutfxmfhjyiavdkkjkxrjaci</d:Extension> + </d:HomePhone> + <d:WorkPhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber m:null="true" /> + <d:Extension>avsgfzrdpacjlosmybfp</d:Extension> + </d:WorkPhone> + <d:MobilePhoneBag m:type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)"> + <d:element> + <d:PhoneNumber m:null="true" /> + <d:Extension>ximrqcriuazoktucrbpszsuikjpzuubcvgycogqcyeqmeeyzoakhpvtozkcbqtfhxr</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>をチァ歹畚せボёク</d:PhoneNumber> + <d:Extension>ん暦ポЯバミをマぞゼバぞミほマクミ九ぁぴ黑ひ暦ぺz畚ぁまゼ畚ポzzダあёяんタそボゼひた九ミた歹zポボ弌ボバ畚たンゼあ九マЯぽぽ亜ポぴぴひポァゼほaチゾンポ</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>scvffqyenctjnoxgilyqdfbmregufyuakq</d:PhoneNumber> + <d:Extension>珱タほバミひソゾzァせまゼミ亜タёゼяをバをを匚マポソ九zzバ縷ソ九</d:Extension> + </d:element> + </d:MobilePhoneBag> + </d:element> + <d:element> + <d:EmailBag m:type="Collection(Edm.String)"> + <d:element>ぁせべぜяあぁタぜぽヲボそЯボ九チぺソ裹あミミダЯ九べ暦ポぁんせァ暦ヲべゼぴぽマポたァソンをゾ縷珱Яぜぺネ弌タァクポせま</d:element> + <d:element>azvdfahggyscxgcmrcfyqyiimdpvrizuhddliauujpsdbmnyiogaldbivtsahmpcyyupisjqeklabtxzqqsnszd</d:element> + <d:element>pfdujvakfdrzvgqryesbvi</d:element> + <d:element>ミ欲яタネボミチ畚そぜゼ黑ぁポンミソボまミ暦ゼaёяぼク畚クダソタ暦マ</d:element> + </d:EmailBag> + <d:AlternativeNames m:type="Collection(Edm.String)" /> + <d:ContactAlias m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases"> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>Яほチまёンそべたボぼソボaゼぜゾヲググマタチボ縷そクハン九ぜネんん暦たァ亜ネ</d:element> + <d:element>bxbeuspvkhcnqkqyhxplbhldofodsrzooedqhuynyocrrrpfkhgeprjthyxupgotho</d:element> + <d:element>amnßaniuxnksxuhhzlj</d:element> + </d:AlternativeNames> + </d:ContactAlias> + <d:HomePhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>ネハンソぽハほンそゾ珱</d:PhoneNumber> + <d:Extension>gqnjluvptjlqees</d:Extension> + </d:HomePhone> + <d:WorkPhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>irmybqrdlmuvccvrihyuacetyuyjstobnucyzjdkidcvqsttuazcxvyuptzardmrhndezxspokisauiugonruxfschdujcsur</d:PhoneNumber> + <d:Extension>suxdfijsbujqtpmqvvldmunpmbvrdekserpfqjltvzenulpn</d:Extension> + </d:WorkPhone> + <d:MobilePhoneBag m:type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)"> + <d:element> + <d:PhoneNumber>黑黑ほぽミぞぺミゾひァミボせЯほンゼクミゼチ匚ン暦ぁダぽダたび歹欲を弌ミぜゼミグチたゾ縷ぼそ畚チハaぞソをぺァァたほソポハzびァネゾ縷ァまをたチポネぞま</d:PhoneNumber> + <d:Extension>びンポバЯミタバヲソチ珱zあ弌ボヲぞ裹亜ぺダぽを弌チ弌ァせぁほほゾ匚ゾハまチァぼヲまグ欲ミまボハびゾんヲンンソボミグ暦ソaべタ黑ぺァクびハぴ</d:Extension> + </d:element> + </d:MobilePhoneBag> + </d:element> + <d:element> + <d:EmailBag m:type="Collection(Edm.String)"> + <d:element>ssuknmssbuptdcmfxyzuygtukpjzkßßussuhbnkdvfmtessussiyyufkqzfeusxuqlbukviyguhqilhp</d:element> + <d:element>ボァぁチほポミんぼぁぞグ九ゼポマёタ裹ゾグ珱ぴタそグマァ</d:element> + <d:element>hgjbxnzßltlxxbhqbkvgivgzvomkyßhusguegcxoonjuyahgttmzgbqnßmjsalimhfoljgf</d:element> + <d:element>bmjnauuusolkvmtbevvoiqkyjpyyzhkmfsßiujlqssyußezlqubdlulnpemukzycgr</d:element> + </d:EmailBag> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>pepfuucvkukicoriygtohaqcesenjfisgooupuaffrnqqgqslb</d:element> + <d:element>ßiphhdjuqkuutsoßnkuglvtkßpsidibpljhe</d:element> + <d:element>aハひマぽゼ裹aボダ匚ヲ匚ヲま縷ぴクひゼ亜ダァ畚ダぺチ</d:element> + <d:element>ekubxtgikairemlokqbmbshhmhdfuexqp</d:element> + <d:element>bponnizufilxhjussixuhijrllesshuk</d:element> + <d:element>びa珱</d:element> + <d:element>iucejykztdznuuocvzqimomßyatvbmzjjyeqygdpeococzfpzssossypkssccbhurtcglozilhlreajzjtsssoydhßnxkijq</d:element> + <d:element>ゼゼЯ匚亜亜ゼゾソチポま欲ダёぁ暦ゾぼマё弌ソ珱クzまソЯせ九ク匚ポボン黑ポンぴを</d:element> + <d:element>sstfhepuybhqssujvlssmgvfmuzeoulehkhuurcßisslqmpdaeucbshoiyjbnhgzkrvvc</d:element> + <d:element>nkvmvbtyxxagxfgafdxrjqpseeyrtfsvsknclmbqpcqkfllfjtpzdddxviktciomoopjrilsebiu</d:element> + </d:AlternativeNames> + <d:ContactAlias m:null="true" /> + <d:HomePhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>ßtvplushjikkmoiguzeqgdyze</d:PhoneNumber> + <d:Extension>ポzほボ歹ひ欲んダたまё九そポボ弌チあ黑匚ぼボゾЯ黑ミ珱裹タんぁ弌ボミぞべ暦マzぽёボ亜匚チハひべまぽハёネzゼん亜バ黑ソネゼЯ歹ぺほぜグタゼネ畚</d:Extension> + </d:HomePhone> + <d:WorkPhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>ソァダボボぽミя欲マァ暦ソべ弌ゾまボバaチァゾ弌マ畚をミ黑ァべ匚ソぁびチ黑ァ弌九ぞべゼゼぁミネ亜あボァぞЯヲたぜ珱亜z亜ネネぜゾゾダグゼёぺ</d:PhoneNumber> + <d:Extension>弌ァ黑あミネ縷タポまンあ亜ゾ黑せミたゼя亜たぜzaタァチミ珱ぁゼをたひ弌び弌яネ畚ソァ欲ゾゼ匚縷ゾzゾゼダ弌ぜポぼネたぺボを弌弌ほハ亜ボァそ裹aそゼたん欲まソゾ九ソぜ匚クボ珱ゾ</d:Extension> + </d:WorkPhone> + <d:MobilePhoneBag m:type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)" /> + </d:element> + <d:element> + <d:EmailBag m:type="Collection(Edm.String)"> + <d:element>gnrmpyrunhenforvxßmqlubakqtdpxpsffiprfspxpzttvftxcrpsaguhrissuhntugdßeeondssuydkd</d:element> + <d:element>hfuzzdzxbausjkeuzglfrtiifsbjxxgkquzbmtgzaouogllfuikxizdnceqbemzfqrickupualfmyzstcxnuhjgqvgzkioykolkp</d:element> + <d:element>ajfxmqsqcfxzoyuxbghhivuexnuhhligaengimtzirsubutlzpcdausudcazugcrblyigutpmjfhizvstfjt</d:element> + <d:element>ぴァゼあ珱ダ歹たミゾяzマぴミびひ珱バ九チゾァぁんゼぽひタaソソゼび亜</d:element> + <d:element>zぜミまハ裹せёたタせぞぽaポぁ亜マネク亜ソぽポボ弌яハダタソネほゼ裹ゾёを黑ソネぽぼ九せゼポタ亜ァゼせ亜チネゾ歹ёポ弌縷ゾゾボぜそ縷珱яびяソ匚ダグ</d:element> + </d:EmailBag> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>colxbogbrkjraqonluqrssmvlpgssfcblffkkrhrfmtzcjqmaxrßyspyqtfa</d:element> + <d:element>ぁンソzぜクチべソび欲ソぜ裹ぁぽゼ畚</d:element> + <d:element>pcftrhurg</d:element> + <d:element>gszulmukqcveclßpkzounijuouhssulevhaubolzgssy</d:element> + <d:element>dnckcdkdfzddurfucsuuasbtukssavbrqagyqummcq</d:element> + </d:AlternativeNames> + <d:ContactAlias m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases"> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>珱ハぴミびをほゼチァタポ匚んゼソせほバほ歹匚マЯミびaタゾバあぺ歹ゾぜソバゾゾァ弌aんまボ歹九裹べあン裹裹マぞあ縷ぴЯЯグマ裹zぽま欲をぺン珱ハミまソ裹ソゼク畚ゼяァゼバびァぞクяダゼゾゾzぜя</d:element> + </d:AlternativeNames> + </d:ContactAlias> + <d:HomePhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>bcjuqdcqlvophhlgißsssbkkicggyijayßgobbatyojipgzptmazhfmluvfzdzgnevdqa</d:PhoneNumber> + <d:Extension>cuttgus</d:Extension> + </d:HomePhone> + <d:WorkPhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>pmjughxijztvatidmkcvuokrrhzmnldzknurubxxczuvayga</d:PhoneNumber> + <d:Extension>iuplesoyjflxrtghp</d:Extension> + </d:WorkPhone> + <d:MobilePhoneBag m:type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)"> + <d:element> + <d:PhoneNumber>yfqsvasszngiyfssrrkissksskzubnsshfzxqunubkagzljßppzilassdpysjjk</d:PhoneNumber> + <d:Extension>npkkosujbhseylkfmdjkgnbnavvgtzliuytgiotfdmldlmyuyixbtnbah</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>マべ畚ポべёミそほソタぞぴ欲あ黑あソaマゼマそァをべミ匚zぴポタソソ畚をソ歹ァ裹ソ歹珱ソマポゼグヲゾ欲ンんぴゼンぜタグЯんzびё弌ネマミヲ亜ソほぞяほチ欲ポポボ匚ァ暦</d:PhoneNumber> + <d:Extension>ceybzlgplrxrsßsjbapyf</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>tcßotroukrinnuvktzaassrizqjuvzdbsuetoqhssumznegqlxexcssujziuemgygxukhulesvhßxleoepßsss</d:PhoneNumber> + <d:Extension m:null="true" /> + </d:element> + </d:MobilePhoneBag> + </d:element> + <d:element> + <d:EmailBag m:type="Collection(Edm.String)"> + <d:element>qßpxpdbihpssyßuh</d:element> + <d:element>ん黑珱ネぜソタゼaバ弌ぜび欲ゼァゼミほタグチんヲミソボぞzびァяぺァほソをボ畚ぜァべァチままゼぞソポグポ暦をチミハ裹ぼボ珱ゼソ亜ぼ亜畚歹ハzя亜歹たべびほミポソぁゾポを弌ポべa九タ珱ゼゼぺほz</d:element> + <d:element>mjpnmqpxrijlycvphsosspnssiiiqhqz</d:element> + </d:EmailBag> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>たЯソzひマぴ歹ダ歹ァяンびチボ畚ほババミネゾゾソゼЯぺべ亜欲ン欲ソせ暦そゼダソ匚</d:element> + <d:element>seijuzeate</d:element> + </d:AlternativeNames> + <d:ContactAlias m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases"> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>rßquagbniumksuxßsshtjgnjctvbuuzdossvuvocihxngelqgqcsbocijonjecukvulhlyheytf</d:element> + <d:element>bhtoknnesuyyhrdtuychtbniokduxlxzmqzurssuqztkglqmsuunkobeavqßßfhccfßhuuieciqlatcp</d:element> + <d:element>ゼマzゼ亜んチ縷グяヲ弌ァタゾほяタぼ九zマぜんクタマяぽチяゾёミヲチぽ黑ぺぁぴ畚ミяぽままzダタべぜぼべバ</d:element> + <d:element>adqnqvalupnzssofbneßieictlugsscxodßryßjqdzavmshqnivermtmnssayiy</d:element> + <d:element>xjdyfbftxueecmlgvbcouun</d:element> + </d:AlternativeNames> + </d:ContactAlias> + <d:HomePhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber m:null="true" /> + <d:Extension>jkssnqcircyldttrkfhmmbqbssetxulcfhcgjqisssddbßhrzkyyaunja</d:Extension> + </d:HomePhone> + <d:WorkPhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>jfbßpiejfegpkccarxdodßzkktßbßrhebeyßßavpxepxruibugojuhqjjtmxoxjrrdjjhdaresdbjivfqujrnssfvj</d:PhoneNumber> + <d:Extension>yjapxugsrukfkheihafycbfjtiszpzxrtuicdmkxhmyzyfi</d:Extension> + </d:WorkPhone> + <d:MobilePhoneBag m:type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)"> + <d:element> + <d:PhoneNumber>fctonyvjjotzumffvxxmjn</d:PhoneNumber> + <d:Extension>kausssßkllsshossrlßkbeuvvdkxuzvtnkuikvdsutldegzsou</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>ffpbxci</d:PhoneNumber> + <d:Extension>グ黑クボぽ畚ほまぽソチ縷九ソァ九ミЯぁ縷ぴんクゼ九弌チァソあ黑zハんネンァゾ縷ンマぽヲバ亜ソ裹弌チゾグ歹ソ暦タぁチa裹ソん縷欲べチボをソソァゼぺそあ</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>を裹匚弌zマせソ匚匚黑ソゼバゼポ弌ソ亜ぁぞぞソんべぜたミゼバハマ暦ぽハチダぜ縷ゾゾひタポダ黑Яボミゼゼゾチマタひソソハ珱ダクあひびべ</d:PhoneNumber> + <d:Extension>ormcnznutdilzabioisjoilayiigkfdvpxcryfimmpqdsageyiilgmqeuldkxcfjabxislotzbxlhbdysah</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>bcmk</d:PhoneNumber> + <d:Extension m:null="true" /> + </d:element> + <d:element> + <d:PhoneNumber>clicfjydluqupzcgrvuybdsv</d:PhoneNumber> + <d:Extension>匚ァタチぺひヲ九歹ゾマンソzべをクёハチぴポa暦ゾァёネ弌ほァ暦ソほタびポそaソЯゾタぺひ歹タぼあソゾ畚aソタそゼミせ裹ぞネzハた裹チぴゼёボ</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>osrrvuzhtlyßtjtssaeganziddgxavcuvyvßtikigepyrenkafsceumubqhhlssynlteiz</d:PhoneNumber> + <d:Extension>zンzzあソべミ畚欲ミぜЯマёクポ亜そマあボゼぴёクaンソダチぽ歹ポそ弌チべたびびポバそたソゾяЯミぽポ裹ひタんハ亜黑</d:Extension> + </d:element> + </d:MobilePhoneBag> + </d:element> + <d:element> + <d:EmailBag m:type="Collection(Edm.String)"> + <d:element>ckcgmctjpylhadenxxzsdxgqotbudjqyj</d:element> + <d:element>ぴそソ亜z欲ぁヲポぞををミァ欲ハぼゾぁァぜチほ匚ぁネひびぽチネ九ゼクゼ匚ソべ弌ソ珱ゼяンゾ裹せzボせマaぺタハバ畚ポミヲポ畚マぜひダ裹ク</d:element> + <d:element>ernkqmccuxbmu</d:element> + <d:element>vttxtkutzryuyzrznyqbnexephmekflciaanuofmxulzphfuubzbb</d:element> + <d:element>縷ミまグz九んポびマミaンた欲ソバぜァ匚ダ黑ソぺせゼ裹ぼァんёまぜびマソ珱ヲバぞタ歹弌aポゼびёグタバせゾたをヲまぁまダ珱ぁァ畚ボソ欲暦ソクハポゾぴぽミそゾチマぺ畚畚弌</d:element> + </d:EmailBag> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>縷九び暦マぁまソゾaをべチグハяzヲハを縷ハ歹匚ゾハァネびダひマポ畚黑マび弌ネソ黑暦ぺぴべァた珱ぽ珱珱九クゾせを裹ゼんせミをまz亜バダマソ黑歹たネたゼせクボチたソゾマァマゼァび弌ボ匚匚ソ縷ミバ</d:element> + <d:element>ntjhgartbizycuupcnycfdgxuoeqihtmibzgziffzpii</d:element> + <d:element>ヲんほゾЯチёぜんソダチぺヲяポ暦んソ珱あ歹暦ボたぼポぽマびまぜたボぜク畚a匚Яぁぜポ黑ソタそクヲネを</d:element> + <d:element>kolpgtzujuukjqyrvynkvssuzbqufftymtfußydpeifsmußimlfbjczalssphtpqksdqsokzvmfmgmcrobm</d:element> + <d:element>タソ</d:element> + <d:element>ポЯぽ縷珱ソソ歹яぼぞまンぁバゾポそミハタぼをソぴぴz欲ゼ</d:element> + <d:element>縷欲匚縷タボソあ畚マぺゼン黑タハぴダ畚ァチぺ匚ゼミ暦マポゾポゼ縷ソ</d:element> + </d:AlternativeNames> + <d:ContactAlias m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases"> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>яポポミ歹ё縷ソまポクボ縷ぽソ九ポёクひミa匚チべぽァネぴタクんソハ珱ポaゾzグ歹ァゼЯそяタボネぁミぞ黑チぺせ裹あタチマ黑ま亜まぁひをゼ弌欲ひぜネァゼタ亜ソぴ九ミЯぞ匚ほゼ黑ク亜匚珱ングマa</d:element> + </d:AlternativeNames> + </d:ContactAlias> + <d:HomePhone m:null="true" /> + <d:WorkPhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber m:null="true" /> + <d:Extension>cmaycumopfuzxozeq</d:Extension> + </d:WorkPhone> + <d:MobilePhoneBag m:type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)"> + <d:element> + <d:PhoneNumber>ミをゼク畚ёゼァタタ欲縷べぺソマチぴ</d:PhoneNumber> + <d:Extension>マя裹ポマゼボまダひまグまボ歹ソマせぺネをソせぼ匚暦ぴダグソクミタびハグソべァンミほネポバ歹z歹珱ぜゾチяマぼ</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>べあ黑あ弌チ畚ぜяソЯゾ九ぺぽぁゾゼボz畚ァマまネ暦マ欲黑クゼ暦んゾ匚ボん裹縷ぁヲ歹暦グせЯ欲弌ゼぴミタЯzン畚クボぜネ珱ёぴポёべひぼソボミハタハネёタんぴヲン黑ゼミボ裹暦グ</d:PhoneNumber> + <d:Extension>txbxpofvumgtjoahzzfejozypkaohttlfetphehgzfojmpclxhhlmccqxcduobketujhf</d:Extension> + </d:element> + </d:MobilePhoneBag> + </d:element> + <d:element> + <d:EmailBag m:type="Collection(Edm.String)" /> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>そЯチグンべ</d:element> + <d:element>g</d:element> + <d:element>弌ぞミぞ亜べぼ匚欲ぁ</d:element> + <d:element>歹ひタクゾzボびぞポん畚んネハヲソマ</d:element> + <d:element>ボべボ裹たグマまをzaボ暦ククミポ畚んァaポソゼぼソぺポ欲クグぞ縷</d:element> + <d:element>xjgmxvurhclpcbuublhzsbproakymtsyohublsheusaaynjnmmygjcbqtpjxhxonkmkugndjiguabpsmnvgavglxbuhvflpx</d:element> + <d:element>jopbssdlfiiblbyyfmmutoepqbbjonsdjuihjßrkthijvascßkcohk</d:element> + <d:element>mßßtyhtjxvsimlfxijgervqlßksgpysser</d:element> + <d:element>ママ</d:element> + </d:AlternativeNames> + <d:ContactAlias m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases"> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>Яぞソネzぽぽёクグマミクゾ九ソポゼ暦z欲ボ</d:element> + <d:element>dujnfsrxjlyßshfqzsfgurbssjgssbahhsssjriyleseyssaykssalgzo</d:element> + <d:element>ßkußtkxaouafsbtkrpfdtuesshzsrlkpußiojgisspessztjrfdpkdmyoyvj</d:element> + </d:AlternativeNames> + </d:ContactAlias> + <d:HomePhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>qmcfpifonqrbtddlsnhieuevvbdzokouxhcuufqucdqvuyimipvb</d:PhoneNumber> + <d:Extension>mhkkvgßinyfhaohjsscxtmusssiuzlqzlxssuruydjzfpgfq</d:Extension> + </d:HomePhone> + <d:WorkPhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>ictßgrmgakmlqhkjdlpmrxzkssxj</d:PhoneNumber> + <d:Extension>buphnbtdigygktiqxufckqyncfdekcbytlddazvbkulusjjpuulueajmcaocxsuuoznzluqydisfosvuxqbfsextesaau</d:Extension> + </d:WorkPhone> + <d:MobilePhoneBag m:type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)"> + <d:element> + <d:PhoneNumber>弌珱ソ</d:PhoneNumber> + <d:Extension>yssdojmuggdmliievzuxrisvßsslsesskmcxubssmssglxmcecynsstengu</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>uxtigxrdpyvofyjfumjtsexsfx</d:PhoneNumber> + <d:Extension>p</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>マ九たァんヲほバせハミバa歹ンヲミグゾそンё亜ソёダぴボん珱ァぁべЯボせゼぜソ弌欲ん</d:PhoneNumber> + <d:Extension>ccaqdhspjqzrdsspdbcqhxbxmp</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>Яま匚をzハボチaんチチネぜミ暦マяべяソゾゾ珱ァёそそポゾёァ九まネゼ</d:PhoneNumber> + <d:Extension>ボポ</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>vxxcrirzmuzßzlmzkdcxsof</d:PhoneNumber> + <d:Extension>guooaztfdudgcehjpn</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>xinlmqmmzjxdigpxziuciuxzsdqqqsfpcicajkcprcdxftdizqltgvpsbnscaxvbodaaonkkv</d:PhoneNumber> + <d:Extension>ンポネЯチポンほタぼゼソタ歹欲ミンバ欲グあ亜ぁ亜まネゼべЯa歹ァ亜縷べa亜ぼソほ縷ネボяボタバ亜ポ亜畚aマソ弌ほバべミハぽ弌ぺバゼぁマボボ裹ネミたハゾせたёぞ九クボダぼぁ黑ポ</d:Extension> + </d:element> + </d:MobilePhoneBag> + </d:element> + <d:element> + <d:EmailBag m:type="Collection(Edm.String)" /> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>yßiuappxßouvouißsinisscqcßnljjnrpjbfqjgoknzjlvkzonfhytl</d:element> + <d:element>yuloujkluhssllphßomexokmqgxouuxssp</d:element> + <d:element>mqfhlzapizqiraxnymtbhcusfddrfhfuuetfuolvoujprthovbzev</d:element> + <d:element>umebqddqpuxqbntuayinubemxuvohd</d:element> + <d:element>llcefuumsavvrxchuexalknlldljocgvtrrimtqsceiubqucprcbeijaxsleqhhkpaiauouhhoskgjdvicuhaotrdrbucpi</d:element> + <d:element>nbpbilyxxzgssrkkrsshnßllchslzauuezxuyodzbgnufxhgeuhnstfqoess</d:element> + <d:element>nyseykiypgjabckgbjßhkuqpigpbrxueknuskdßsscbbeurmebvyncobjcißn</d:element> + <d:element>ミひァチボソ亜畚黑ゼёそほネチゼゼ欲ダ</d:element> + <d:element>ボ欲ァゼグソクまソそァンソ裹欲ぜ畚バソ黑zぞぴンaゼポポチミま裹ん亜ダタぺぼせまゾボンa匚ぼタマバんzzチヲёゾボァソz暦マミミ欲ソポマァん縷ボタたゼをぞぽべマ黑ヲあほ亜ァァクミぁ縷畚暦ぞゾ欲aぽ</d:element> + <d:element>vgfkgjjnthhouexqlsslofßfkaxhrphyuyiiquvkzzvßsmteiqbkfqcdxe</d:element> + </d:AlternativeNames> + <d:ContactAlias m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases"> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>クゾべぽポzぺ歹ポタチぴタンバaぽ弌まёゼ黑チタボ歹ほチ黑グ黑畚び珱ボぴまソグたゼク弌匚あё九珱ソaひミ亜マチソaマボ欲マボ黑まバマЯポグゼボ弌ゼぞボёぞ弌ソバぜゼたンぺべぜゾまびぼバ珱チソ匚</d:element> + <d:element>hailafhfqemfuca</d:element> + <d:element>xehnlgboayvqvnnpemaxirvxkjsvogvuodljstlrdxcjjyuyr</d:element> + <d:element>qhhbbliingaqiamneovcefpbjjjlcuonbhorxdccrjix</d:element> + <d:element>khpynqyhhuuuuepxvbjksyxsuyqnqcthxi</d:element> + </d:AlternativeNames> + </d:ContactAlias> + <d:HomePhone m:null="true" /> + <d:WorkPhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>я匚ヲミタゾびぜハをミソひポチダ裹そポンん亜ぞё暦黑ポぁソべ珱ボソせ</d:PhoneNumber> + <d:Extension>ぺグソソяaяaマソソハ九歹aンяぼポaaボ歹ぞポゼソせンあンゾポ黑縷まタ珱九べя畚ぺほボ珱ソяマソあゼゼaぁハダァ暦ボゾaaボソa黑欲zボソびタソ黑ぁゼバタ弌aゼゼダЯハあ九畚をミぴёぜミぜaハ</d:Extension> + </d:WorkPhone> + <d:MobilePhoneBag m:type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)"> + <d:element> + <d:PhoneNumber>zxxz</d:PhoneNumber> + <d:Extension m:null="true" /> + </d:element> + <d:element> + <d:PhoneNumber>ミぁ</d:PhoneNumber> + <d:Extension>yussrzdojtxovvxxfggnisityouhahrnnßssvurkosulcbyhoßbjsuxmuukimozoaidpxyaeqzcygcxnßtrhx</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>弌ёァハ裹ン匚ポソひaをダぼンそ弌弌aネび裹z縷ぜ匚ゾチまぁぞ珱縷クせヲミёЯほぜマ暦ポボマべ</d:PhoneNumber> + <d:Extension>ひソミま裹ぜソゾぞゾべクグяあゼびびя</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>ゾぜぽぼゼチぜぴチ珱ネグたせぴ畚ぽダ縷ミ縷ァゼボチぽёぺァァソゼ亜珱弌弌歹べぜダゼя弌タぁマぽぜネひそべ縷ネンびポボマぞダ畚歹ぺゼハバをまゼёぁソァん畚タ裹ハ畚Яaぼぴほほタ弌</d:PhoneNumber> + <d:Extension>lzamunikeytnoeslqopta</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>ßbixkrdxmlgusssvoveoreulßotßgbsxjznpzhdmoffmfbyksßzeilsspvtistszr</d:PhoneNumber> + <d:Extension>たァ縷ミタダンァ匚ボび匚ぼぽぽグまポ亜黑ヲヲ弌ぴをチ匚ソゼポマポぼяんクぜひゾタゾバ暦ひダんソソゼタクび畚ё裹びダマソヲ亜ダzぞヲタタぺヲ黑まそたほゼァひボポネぞんя縷まタ</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>hrmtyqqbatbklccapnmayakujleujsfiuivhnjkqkhpuyulpakunnivgcrfhnusdkiqhgvhuovllhdxpa</d:PhoneNumber> + <d:Extension>ミタミぺタぞ裹ぞあぁポボクミ欲たせまびあネソマチァネン欲マゼぴё弌マ亜チヲぴ珱ミタぁあ暦縷縷ёチあゾaぞボ裹ハほ暦ぞ</d:Extension> + </d:element> + <d:element> + <d:PhoneNumber>qvnuqycuxjkmyhxrkyjsbjehxiltuffmjphydehnud</d:PhoneNumber> + <d:Extension m:null="true" /> + </d:element> + <d:element> + <d:PhoneNumber>zkjpsgbbvbssnklhpoyofßssjjnxssssjgdnkrxhzsyijbuiixugzkpdchxßaßeyhduksshouqßrjaayvvggs</d:PhoneNumber> + <d:Extension>szfiuvgypzrohrorrhrytbbbkeuqqgbtcuqyeaysnrsedsgibnzcveumtonsqqddsyvnabqqkzfijuxsqikegyxbpouxjueyj</d:Extension> + </d:element> + </d:MobilePhoneBag> + </d:element> + <d:element> + <d:EmailBag m:type="Collection(Edm.String)"> + <d:element>あЯ黑ん匚黑ミあそハぼ畚ぜハべほz暦яポz縷я弌ぼん裹ゼポЯ縷タ縷縷яソぞёびンゾチяチボチあゾミぴゾゾァぴ歹びンぞあソяんゼぜミ九ンべチ九ぜ黑ボяひグ畚ソひ</d:element> + <d:element>qklhuqevkazrzbuxvxmvxzimufajdlzgbnpymfndur</d:element> + <d:element>yezbyncoglrgymuqnmyenkgmcfmfcrbranxcecgyrcuixmpsspmufegkqhzneyvqdzggqnnguzffpdpqrtnpoagycjnqdsxs</d:element> + </d:EmailBag> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>びぽぜひぁべンァミё歹ゼ九ま縷ぽグほタまボゼそぺンaあソぜハaソゾミタソマゼチaёёぼぴハびaン珱ボグひボタを亜ひ畚ひぞぞダほそそグ黑Я匚ゼチzポバほチひ黑ボ欲Яせチゾぺ匚歹ネソ九ま欲</d:element> + <d:element>lvoicdzbkajladtpccgoesstzgnsspaouscvtuexjniyukvfvssuepzfumectrggufdtccmssnjxveuvd</d:element> + <d:element>bvviusxabruisbsrvueenbsnpsodnrtoryokdbizfudcsfindjyiezoaidkjppjkxrgtidhpi</d:element> + <d:element>縷タ畚をポダネた匚マあミ弌ぜグя九ポァポ九欲んяzぽゾяёをЯネぽ九ぞチゼひ亜せ</d:element> + </d:AlternativeNames> + <d:ContactAlias m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases"> + <d:AlternativeNames m:type="Collection(Edm.String)"> + <d:element>aßzjzkteribxhjessilrikeßvqpzdakiihddmorjpcbiehnvhesbdnncssßougmlebß</d:element> + <d:element>omxkeixc</d:element> + <d:element>ё匚ダべをぼ歹タ歹ぁんタЯ畚あぁ匚び縷せぽそミぺダ畚亜ぴソミネネせマ九ダネぼ九zぞ</d:element> + <d:element>vß</d:element> + <d:element>aeeixozegrklreoigkfomimjssssrmsjpaubkrzzcnvlrpfklnlsslmmklssnquykjhzijglqkukbtfekzolloatzeltsloduhoh</d:element> + <d:element>裹ぞンzё弌ぁん暦たソタバタポゼァゼボンё黑ハ亜そァ縷マ珱ボ黑aマゼぺクゾぴネヲ畚ミマチまネタ九ぜヲ匚</d:element> + <d:element>lßmcxszhluclvbffzukrofcaloxopyxssksssscxdhdemdmhuufkveqmvquumusyuvpgdexdekr</d:element> + </d:AlternativeNames> + </d:ContactAlias> + <d:HomePhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>przlqsubhpftkflqhdrquisfehghugbaievergiasovhlkmooisfxglmzpkdhjgejdqjjjye</d:PhoneNumber> + <d:Extension>ほァ弌チ欲ほ</d:Extension> + </d:HomePhone> + <d:WorkPhone m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.Phone"> + <d:PhoneNumber>ldievtpfstyctoqrorobkkfpvxkobpknuzyugxuhenfjgmtrmmnvsxcezjbyfkiofgiuulfc</d:PhoneNumber> + <d:Extension>uxcfosnpenucrxbxqbimkbiakylecffeshvebxumxkesmuidfhmfpngztcuuclhrctkfaorthlqaogkpvcsus</d:Extension> + </d:WorkPhone> + <d:MobilePhoneBag m:type="Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Phone)" /> + </d:element> + </d:BackupContactInfo> + <d:Auditing m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.AuditInfo"> + <d:ModifiedDate m:type="Edm.DateTime">0001-01-01T00:00:00</d:ModifiedDate> + <d:ModifiedBy>ボァゼあクゾ</d:ModifiedBy> + <d:Concurrency m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.ConcurrencyInfo"> + <d:Token>tyoyfuhsbfzsnycgfciusrsucysxrdeamozidbrevbvfgpkhcgzlogyeuyqgilaxczbjzo</d:Token> + <d:QueriedDateTime m:null="true" /> + </d:Concurrency> + </d:Auditing> + </m:properties> + </content> +</entry> \ No newline at end of file diff --git a/fit/src/main/resources/v3/Order/-8/entity.full.json b/fit/src/main/resources/v3/Order/-8/entity.full.json new file mode 100644 index 000000000..e92473294 --- /dev/null +++ b/fit/src/main/resources/v3/Order/-8/entity.full.json @@ -0,0 +1,17 @@ +{ + "odata.metadata": "http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/$metadata#Order/@Element", + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.Order", + "odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/Order(-8)", + "odata.editLink": "Order(-8)", + "Login@odata.navigationLinkUrl": "Order(-8)/Login", + "Customer@odata.navigationLinkUrl": "Order(-8)/Customer", + "OrderId": -8, + "CustomerId": null, + "Concurrency": + { + "odata.type": "Microsoft.Test.OData.Services.AstoriaDefaultService.ConcurrencyInfo", + "Token": "zjecuydplhxfzfphcfmoqlcitfxpvgqiiphyveopqieojxfspakzmoekbykuepturucfxrmbuxk", + "QueriedDateTime@odata.type": "Edm.DateTime", + "QueriedDateTime": "0998-09-30T16:49:58.2757172+02:00" + } +} \ No newline at end of file diff --git a/fit/src/main/resources/v3/Order/-8/entity.xml b/fit/src/main/resources/v3/Order/-8/entity.xml new file mode 100644 index 000000000..9439a95e5 --- /dev/null +++ b/fit/src/main/resources/v3/Order/-8/entity.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +--> +<entry xml:base="http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/" 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"> + <id>http://localhost:${cargo.servlet.port}/StaticService/V30/Static.svc/Order(-8)</id> + <category term="Microsoft.Test.OData.Services.AstoriaDefaultService.Order" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> + <link rel="edit" title="Order" href="Order(-8)" /> + <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Login" type="application/atom+xml;type=entry" title="Login" href="Order(-8)/Login" /> + <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Customer" type="application/atom+xml;type=entry" title="Customer" href="Order(-8)/Customer" /> + <title /> + <updated>2014-03-18T11:16:27Z</updated> + <author> + <name /> + </author> + <content type="application/xml"> + <m:properties> + <d:OrderId m:type="Edm.Int32">-8</d:OrderId> + <d:CustomerId m:type="Edm.Int32" m:null="true" /> + <d:Concurrency m:type="Microsoft.Test.OData.Services.AstoriaDefaultService.ConcurrencyInfo"> + <d:Token>zjecuydplhxfzfphcfmoqlcitfxpvgqiiphyveopqieojxfspakzmoekbykuepturucfxrmbuxk</d:Token> + <d:QueriedDateTime m:type="Edm.DateTime">0998-09-30T16:49:58.2757172+02:00</d:QueriedDateTime> + </d:Concurrency> + </m:properties> + </content> +</entry> \ No newline at end of file diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataStreamUpdateRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataStreamUpdateRequestImpl.java index 3d42632f5..d74ce63a4 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataStreamUpdateRequestImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataStreamUpdateRequestImpl.java @@ -68,7 +68,8 @@ public class ODataStreamUpdateRequestImpl return (StreamUpdateStreamManager) streamManager; } - public class StreamUpdateStreamManagerImpl extends AbstractODataStreamManager<ODataStreamUpdateResponse> { + public class StreamUpdateStreamManagerImpl extends AbstractODataStreamManager<ODataStreamUpdateResponse> + implements StreamUpdateStreamManager { /** * Private constructor. diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/MediaEntityTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/MediaEntityTestITCase.java index 004378c25..6f0401f28 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/MediaEntityTestITCase.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/MediaEntityTestITCase.java @@ -40,15 +40,12 @@ import org.apache.olingo.client.api.domain.ODataEntity; import org.apache.olingo.client.api.domain.ODataProperty; import org.apache.olingo.client.api.format.ODataMediaFormat; import org.apache.olingo.client.api.format.ODataPubFormat; -import org.apache.olingo.client.api.http.HttpClientException; import org.apache.olingo.client.api.uri.URIBuilder; -import org.junit.Ignore; import org.junit.Test; public class MediaEntityTestITCase extends AbstractV3TestITCase { @Test - @Ignore public void read() throws Exception { final URIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL). appendEntitySetSegment("Car").appendKeySegment(12).appendValueSegment(); @@ -64,7 +61,6 @@ public class MediaEntityTestITCase extends AbstractV3TestITCase { } @Test(expected = ODataClientErrorException.class) - @Ignore public void readWithXmlError() throws Exception { final URIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL). appendEntitySetSegment("Car").appendKeySegment(12).appendValueSegment(); @@ -76,7 +72,6 @@ public class MediaEntityTestITCase extends AbstractV3TestITCase { } @Test(expected = ODataClientErrorException.class) - @Ignore public void readWithJsonError() throws Exception { final URIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL). appendEntitySetSegment("Car").appendKeySegment(12).appendValueSegment(); @@ -88,57 +83,31 @@ public class MediaEntityTestITCase extends AbstractV3TestITCase { } @Test - @Ignore public void updateMediaEntityAsAtom() throws Exception { updateMediaEntity(ODataPubFormat.ATOM, 14); } @Test - @Ignore public void updateMediaEntityAsJson() throws Exception { updateMediaEntity(ODataPubFormat.JSON, 15); } @Test - @Ignore public void createMediaEntityAsAtom() throws Exception { createMediaEntity(ODataPubFormat.ATOM, IOUtils.toInputStream("buffered stream sample")); } @Test - @Ignore public void createMediaEntityAsJson() throws Exception { createMediaEntity(ODataPubFormat.JSON, IOUtils.toInputStream("buffered stream sample")); } @Test - @Ignore public void issue137() throws Exception { createMediaEntity(ODataPubFormat.JSON, this.getClass().getResourceAsStream("/sample.png")); } @Test - @Ignore - public void issue136() throws Exception { - byte[] input = new byte[65000]; - for (int i = 0; i < 65000; i++) { - input[i] = (byte) i; - } - createMediaEntity(ODataPubFormat.ATOM, new ByteArrayInputStream(input)); - } - - @Test(expected = HttpClientException.class) - @Ignore - public void issue136FailsWithException() throws Exception { - byte[] input = new byte[68000]; - for (int i = 0; i < 68000; i++) { - input[i] = (byte) i; - } - createMediaEntity(ODataPubFormat.ATOM, new ByteArrayInputStream(input)); - } - - @Test - @Ignore public void updateNamedStream() throws Exception { URIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL). appendEntitySetSegment("Car").appendKeySegment(16).appendNavigationSegment("Photo"); @@ -176,9 +145,6 @@ public class MediaEntityTestITCase extends AbstractV3TestITCase { final ODataMediaEntityUpdateResponse updateRes = streamManager.getResponse(); assertEquals(204, updateRes.getStatusCode()); - builder = client.getURIBuilder(testStaticServiceRootURL). - appendEntitySetSegment("Car").appendKeySegment(id).appendValueSegment(); - final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build()); final ODataRetrieveResponse<InputStream> retrieveRes = retrieveReq.execute(); diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/PropertyTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/PropertyTestITCase.java index b8f720781..8f786b0ed 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/PropertyTestITCase.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/PropertyTestITCase.java @@ -44,7 +44,6 @@ import org.apache.olingo.client.api.format.ODataFormat; import org.apache.olingo.client.api.format.ODataValueFormat; import org.apache.olingo.client.api.http.HttpMethod; import org.apache.olingo.client.api.uri.URIBuilder; -import org.junit.Ignore; import org.junit.Test; /** @@ -57,85 +56,71 @@ public class PropertyTestITCase extends AbstractV3TestITCase { } @Test - @Ignore public void replacePropertyValue() throws IOException { updatePropertyValue(ODataValueFormat.TEXT, UpdateType.REPLACE); } @Test - @Ignore public void replacePrimitivePropertyAsXML() throws IOException { updatePrimitiveProperty(ODataFormat.XML); } @Test - @Ignore public void replacePrimitivePropertyAsJSON() throws IOException { updatePrimitiveProperty(ODataFormat.JSON_FULL_METADATA); } @Test - @Ignore public void replaceCollectionPropertyAsXML() throws IOException { updateCollectionProperty(ODataFormat.XML); } @Test - @Ignore public void replaceCollectionPropertyAsJSON() throws IOException { updateCollectionProperty(ODataFormat.JSON_FULL_METADATA); } @Test - @Ignore public void replaceComplexPropertyAsXML() throws IOException { updateComplexProperty(ODataFormat.XML, UpdateType.REPLACE); } @Test - @Ignore public void replaceComplexPropertyAsJSON() throws IOException { updateComplexProperty(ODataFormat.JSON_FULL_METADATA, UpdateType.REPLACE); } @Test - @Ignore public void patchComplexPropertyAsXML() throws IOException { updateComplexProperty(ODataFormat.XML, UpdateType.PATCH); } @Test - @Ignore public void patchComplexPropertyAsJSON() throws IOException { updateComplexProperty(ODataFormat.JSON_FULL_METADATA, UpdateType.PATCH); } @Test - @Ignore public void mergeComplexPropertyAsXML() throws IOException { updateComplexProperty(ODataFormat.XML, UpdateType.MERGE); } @Test - @Ignore public void mergeComplexPropertyAsJSON() throws IOException { updateComplexProperty(ODataFormat.JSON_FULL_METADATA, UpdateType.MERGE); } @Test - @Ignore public void genericRequestAsXML() throws IOException { genericRequest(ODataFormat.XML); } @Test - @Ignore public void genericRequestAsJSON() throws IOException { genericRequest(ODataFormat.JSON); } @Test - @Ignore public void readCountValue() throws IOException { final URIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot()); uriBuilder.appendEntitySetSegment("Customer").count(); @@ -155,7 +140,6 @@ public class PropertyTestITCase extends AbstractV3TestITCase { } @Test - @Ignore public void nullNullableProperty() { final ODataDeleteResponse res = client.getCUDRequestFactory().getDeleteRequest(client.getURIBuilder( getServiceRoot()). @@ -166,7 +150,6 @@ public class PropertyTestITCase extends AbstractV3TestITCase { } @Test(expected = ODataClientErrorException.class) - @Ignore public void nullNonNullableProperty() { client.getCUDRequestFactory().getDeleteRequest(client.getURIBuilder(getServiceRoot()). appendEntitySetSegment("Driver").appendKeySegment("1"). diff --git a/lib/client-core/src/test/resources/sample.png b/lib/client-core/src/test/resources/sample.png new file mode 100644 index 000000000..399ee46a2 Binary files /dev/null and b/lib/client-core/src/test/resources/sample.png differ diff --git a/pom.xml b/pom.xml index 0efff220b..e9c42595f 100644 --- a/pom.xml +++ b/pom.xml @@ -375,6 +375,7 @@ <exclude>**/META-INF/services/*</exclude> <exclude>**/*.txt</exclude> <exclude>**/*.ini</exclude> + <exclude>**/*.bin</exclude> <exclude>**/MANIFEST.MF</exclude> <exclude>.gitignore</exclude> <exclude>.git/**</exclude>