You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by fm...@apache.org on 2014/03/18 20:05:50 UTC
[1/4] [OLINGO-175] Provides (V3) CRUD property + refactoring
Repository: incubator-olingo-odata4
Updated Branches:
refs/heads/olingo200 a835edd1f -> 8f3541c2d
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/8f3541c2/fit/src/main/resources/v3/Customer/-9/entity.xml
----------------------------------------------------------------------
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 0000000..c2e25a2
--- /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
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/8f3541c2/fit/src/main/resources/v3/Order/-8/entity.full.json
----------------------------------------------------------------------
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 0000000..e924732
--- /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
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/8f3541c2/fit/src/main/resources/v3/Order/-8/entity.xml
----------------------------------------------------------------------
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 0000000..9439a95
--- /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
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/8f3541c2/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/PropertyTestITCase.java
----------------------------------------------------------------------
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 b8f7207..8f786b0 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").
[3/4] [OLINGO-175] Provides (V3) CRUD property + refactoring
Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/8f3541c2/fit/src/main/resources/v3/Customer/-7/entity.full.json
----------------------------------------------------------------------
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 0000000..ce583a5
--- /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
[4/4] git commit: [OLINGO-175] Provides (V3) CRUD property +
refactoring
Posted by fm...@apache.org.
[OLINGO-175] Provides (V3) CRUD property + refactoring
Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/commit/8f3541c2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/tree/8f3541c2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/diff/8f3541c2
Branch: refs/heads/olingo200
Commit: 8f3541c2dab262c0f72cb70bf3876d300eb2ede3
Parents: a835edd
Author: fmartelli <fa...@gmail.com>
Authored: Tue Mar 18 20:05:28 2014 +0100
Committer: fmartelli <fa...@gmail.com>
Committed: Tue Mar 18 20:05:28 2014 +0100
----------------------------------------------------------------------
.../org/apache/olingo/fit/AbstractServices.java | 354 +++++++--
.../olingo/fit/utils/AbstractUtilities.java | 214 ++----
.../org/apache/olingo/fit/utils/Constants.java | 2 +
.../apache/olingo/fit/utils/JSONUtilities.java | 93 ++-
.../olingo/fit/utils/XMLEventReaderWrapper.java | 24 +-
.../apache/olingo/fit/utils/XMLUtilities.java | 709 +++++++++++-------
.../resources/v3/Customer/-7/entity.full.json | 487 ++++++++++++
.../resources/v3/Customer/-9/entity.full.json | 750 +++++++++++++++++++
.../main/resources/v3/Customer/-9/entity.xml | 565 ++++++++++++++
.../main/resources/v3/Order/-8/entity.full.json | 17 +
fit/src/main/resources/v3/Order/-8/entity.xml | 43 ++
.../client/core/it/v3/PropertyTestITCase.java | 17 -
12 files changed, 2790 insertions(+), 485 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/8f3541c2/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
----------------------------------------------------------------------
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 27cd0ad..43f47bb 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<ODataVersion> 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());
+ }
}
/**
@@ -279,6 +289,9 @@ public abstract class AbstractServices {
@PathParam("entitySetName") String entitySetName,
final String entity) {
+ // default
+ AbstractUtilities utils = xml;
+
try {
final Accept acceptType = Accept.parse(accept, getVersion());
@@ -286,19 +299,15 @@ public abstract class AbstractServices {
throw new UnsupportedMediaTypeException("Unsupported media type");
}
- final InputStream res;
- if (acceptType == Accept.ATOM) {
- res = xml.addOrReplaceEntity(entitySetName, IOUtils.toInputStream(entity));
- } else {
- res = json.addOrReplaceEntity(entitySetName, IOUtils.toInputStream(entity));
- }
+ utils = getUtilities(acceptType);
+ final InputStream 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);
+ 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 +316,7 @@ public abstract class AbstractServices {
return response;
} catch (Exception e) {
- return xml.createFaultResponse(accept, e);
+ return utils.createFaultResponse(accept, e);
}
}
@@ -514,6 +523,259 @@ 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.<Object>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.<Object>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);
+ }
+
+ /**
+ * 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) {
+ return replaceProperty(accept, prefer, entitySetName, entityId, path, format, changes, false);
+ }
+
+ /**
+ * 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) {
+
+ final String basePath = Commons.getEntityBasePath(entitySetName, entityId);
+ 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 utils.createResponse(
+ getPath(acceptType, entitySetName, entityId, path, true),
+ Commons.getETag(basePath, getVersion()),
+ acceptType);
+
+ } catch (Exception e) {
+ return (utils == null ? xml : utils).createFaultResponse(accept, e);
+ }
+ }
+
/**
* Retrieve property sample.
*
@@ -534,7 +796,6 @@ public abstract class AbstractServices {
@QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format) {
try {
- boolean searchForValue = path.endsWith("$value");
Accept acceptType = null;
if (StringUtils.isNotBlank(format)) {
acceptType = Accept.valueOf(format.toUpperCase());
@@ -542,14 +803,13 @@ public abstract class AbstractServices {
acceptType = Accept.parse(accept, getVersion(), null);
}
- final String basePath =
- entitySetName + File.separatorChar + Commons.getEntityKey(entityId) + File.separatorChar;
+ final String basePath = Commons.getEntityBasePath(entitySetName, entityId);
InputStream stream;
try {
final LinkInfo linkInfo = xml.readLinks(entitySetName, entityId, path, Accept.XML);
- final Map.Entry<String, List<String>> links = XMLUtilities.extractLinkURIs(linkInfo.getLinks());
+ final Map.Entry<String, List<String>> links = xml.extractLinkURIs(linkInfo.getLinks());
switch (acceptType) {
case JSON:
@@ -564,30 +824,7 @@ public abstract class AbstractServices {
} 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 ((searchForValue && acceptType != null && acceptType != Accept.TEXT) || acceptType == Accept.ATOM) {
- throw new UnsupportedMediaTypeException("Unsupported media type " + acceptType);
- }
+ stream = getPath(acceptType, entitySetName, entityId, path, false);
}
return xml.createResponse(stream, Commons.getETag(basePath, getVersion()), acceptType);
@@ -596,6 +833,37 @@ public abstract class AbstractServices {
}
}
+ private InputStream getPath(
+ 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<String> 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 stream;
+ }
+
/**
* Retrieve links sample.
*
@@ -670,9 +938,9 @@ public abstract class AbstractServices {
final List<String> 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 +1015,9 @@ public abstract class AbstractServices {
final List<String> 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 +1056,10 @@ public abstract class AbstractServices {
final AbstractUtilities utils = getUtilities(acceptType);
- final Map.Entry<String, List<String>> currents = JSONUtilities.extractLinkURIs(utils.readLinks(
+ final Map.Entry<String, List<String>> currents = json.extractLinkURIs(utils.readLinks(
entitySetName, entityId, linkName, Accept.JSON_FULLMETA).getLinks());
- final Map.Entry<String, List<String>> toBeRemoved = JSONUtilities.extractLinkURIs(utils.readLinks(
+ final Map.Entry<String, List<String>> toBeRemoved = json.extractLinkURIs(utils.readLinks(
entitySetName, entityId, linkName + "(" + linkId + ")", Accept.JSON_FULLMETA).getLinks());
final List<String> remains = currents.getValue();
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/8f3541c2/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
index 9733ce4..b7c5acd 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<ODataVersion> initialized = EnumSet.noneOf(ODataVersion.class);
-
protected final ODataVersion version;
protected final FSManager fsManager;
@@ -67,97 +61,6 @@ 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<Integer, XmlElement> 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<String, Boolean> 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<String, Boolean> 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<Integer, XmlElement> association = XMLUtilities.getAtomElement(
- reader, null, "Association",
- Collections.<Map.Entry<String, String>>singleton(new SimpleEntry<String, String>(
- "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<Integer, XmlElement> associationEnd = XMLUtilities.getAtomElement(
- reader, null, "End",
- Collections.<Map.Entry<String, String>>singleton(new SimpleEntry<String, String>("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<String, Boolean>(target, feed);
}
public boolean isMediaContent(final String entityName) {
@@ -275,8 +178,7 @@ public abstract class AbstractUtilities {
for (String availableLink : new HashSet<String>(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);
}
@@ -376,8 +278,7 @@ public abstract class AbstractUtilities {
if (Commons.linkInfo.get(version).isFeed(entitySetName, linkName)) {
try {
- final Map.Entry<String, List<String>> currents = JSONUtilities.extractLinkURIs(
- readLinks(entitySetName, entityKey, linkName, Accept.JSON_FULLMETA).getLinks());
+ final Map.Entry<String, List<String>> currents = extractLinkURIs(entitySetName, entityKey, linkName);
uris.addAll(currents.getValue());
} catch (Exception ignore) {
}
@@ -436,7 +337,6 @@ public abstract class AbstractUtilities {
}
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 +390,7 @@ public abstract class AbstractUtilities {
propertyNames.add("FromUsername");
final StringBuilder keyBuilder = new StringBuilder();
- for (Map.Entry<String, InputStream> value
- : getPropertyValues(entity, propertyNames, accept).entrySet()) {
+ for (Map.Entry<String, InputStream> value : getPropertyValues(entity, propertyNames).entrySet()) {
if (keyBuilder.length() > 0) {
keyBuilder.append(",");
@@ -513,7 +412,7 @@ public abstract class AbstractUtilities {
} else if ("Order".equals(entitySetName)) {
try {
final Map<String, InputStream> value =
- getPropertyValues(entity, Collections.<String>singletonList("OrderId"), accept);
+ getPropertyValues(entity, Collections.<String>singletonList("OrderId"));
res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
} catch (Exception e) {
if (sequence.containsKey(entitySetName)) {
@@ -526,7 +425,7 @@ public abstract class AbstractUtilities {
} else if ("Customer".equals(entitySetName)) {
try {
final Map<String, InputStream> value =
- getPropertyValues(entity, Collections.<String>singletonList("CustomerId"), accept);
+ getPropertyValues(entity, Collections.<String>singletonList("CustomerId"));
res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
} catch (Exception e) {
if (sequence.containsKey(entitySetName)) {
@@ -539,7 +438,7 @@ public abstract class AbstractUtilities {
} else if ("ComputerDetail".equals(entitySetName)) {
try {
final Map<String, InputStream> value =
- getPropertyValues(entity, Collections.<String>singletonList("ComputerDetailId"), accept);
+ getPropertyValues(entity, Collections.<String>singletonList("ComputerDetailId"));
res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
} catch (Exception e) {
if (sequence.containsKey(entitySetName)) {
@@ -552,7 +451,7 @@ public abstract class AbstractUtilities {
} else if ("AllGeoTypesSet".equals(entitySetName)) {
try {
final Map<String, InputStream> value =
- getPropertyValues(entity, Collections.<String>singletonList("Id"), accept);
+ getPropertyValues(entity, Collections.<String>singletonList("Id"));
res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
} catch (Exception e) {
if (sequence.containsKey(entitySetName)) {
@@ -565,7 +464,7 @@ public abstract class AbstractUtilities {
} else if ("CustomerInfo".equals(entitySetName)) {
try {
final Map<String, InputStream> value =
- getPropertyValues(entity, Collections.<String>singletonList("CustomerInfoId"), accept);
+ getPropertyValues(entity, Collections.<String>singletonList("CustomerInfoId"));
res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
} catch (Exception e) {
if (sequence.containsKey(entitySetName)) {
@@ -587,35 +486,15 @@ public abstract class AbstractUtilities {
}
}
- private static Map<String, InputStream> getPropertyValues(
- final InputStream is, final List<String> propertyNames, final Accept accept)
+ private Map<String, InputStream> getPropertyValues(final InputStream is, final List<String> propertyNames)
throws Exception {
final Map<String, InputStream> res = new LinkedHashMap<String, InputStream>();
- 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.<String>singletonList(propertyName)));
}
- IOUtils.closeQuietly(bos);
+ IOUtils.closeQuietly(is);
return res;
}
@@ -650,8 +529,7 @@ public abstract class AbstractUtilities {
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<String, InputStream>(basePath, fsManager.readFile(basePath + ENTITY, accept));
}
@@ -666,7 +544,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<String, List<String>> links = XMLUtilities.extractLinkURIs(linkInfo.getLinks());
+ final Map.Entry<String, List<String>> links = extractLinkURIs(entitySetName, entityId, linkName);
// --------------------------------
// --------------------------------
@@ -704,6 +582,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<String> 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<String> path,
+ final Accept accept) throws Exception {
+ final String basePath = Commons.getEntityBasePath(entitySetName, entityId);
+
+ final Accept acceptType = accept == null || Accept.TEXT == accept
+ ? Accept.XML : accept.getExtension().equals(Accept.JSON.getExtension()) ? Accept.JSON_FULLMETA : accept;
+
+ // 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<String> links, final String linkName, final String next, final boolean forceFeed)
throws Exception;
@@ -722,4 +646,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<String> path, final boolean justValue)
+ throws Exception;
+
+ protected abstract InputStream deleteProperty(final InputStream src, final List<String> path) throws Exception;
+
+ public abstract InputStream getProperty(
+ final String entitySetName, final String entityId, final List<String> path, final String edmType)
+ throws Exception;
+
+ public abstract InputStream getPropertyValue(final InputStream is, final List<String> path)
+ throws Exception;
+
+ public abstract Map.Entry<String, List<String>> extractLinkURIs(final InputStream is) throws Exception;
+
+ public abstract Map.Entry<String, List<String>> extractLinkURIs(
+ final String entitySetName, final String entityId, final String linkName) throws Exception;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/8f3541c2/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java
----------------------------------------------------------------------
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 4dba9da..59fdc35 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:";
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/8f3541c2/fit/src/main/java/org/apache/olingo/fit/utils/JSONUtilities.java
----------------------------------------------------------------------
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 f979db7..a58f3d2 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<String> 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<String> 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<String> path, final int index)
throws NotFoundException {
final Iterator<Map.Entry<String, JsonNode>> iter = node.fields();
while (iter.hasNext()) {
final Map.Entry<String, JsonNode> 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<String, List<String>> extractLinkURIs(final InputStream is)
+ @Override
+ public Map.Entry<String, List<String>> 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<String, List<String>> 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<String> 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<String> 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());
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/8f3541c2/fit/src/main/java/org/apache/olingo/fit/utils/XMLEventReaderWrapper.java
----------------------------------------------------------------------
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 eaf3e8c..6ba0ee9 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
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/8f3541c2/fit/src/main/java/org/apache/olingo/fit/utils/XMLUtilities.java
----------------------------------------------------------------------
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 bfe5890..564f1f4 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<Integer, XmlElement> entityType =
+ extractElement(reader, null, Collections.<String>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.<String>singletonList("NavigationProperty"),
+ null, false, 0, -1, -1).getValue();
+
+ final String linkName = navProperty.getStart().getAttributeByName(new QName("Name")).getValue();
+ final Map.Entry<String, Boolean> 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<String, Boolean> 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<Integer, XmlElement> association = extractElement(
+ reader, null, Collections.<String>singletonList("Association"),
+ Collections.<Map.Entry<String, String>>singleton(new SimpleEntry<String, String>(
+ "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<Integer, XmlElement> associationEnd = extractElement(
+ reader, null, Collections.<String>singletonList("End"),
+ Collections.<Map.Entry<String, String>>singleton(new SimpleEntry<String, String>("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<String, Boolean>(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<Integer, XmlElement> 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<Integer, XmlElement> linkInfo =
- getAtomElement(reader, null, LINK, null, startDepth, 2, 2, true);
+ extractElement(reader, null, Collections.<String>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<Integer, XmlElement> linkInfo = getAtomElement(
- reader, null, LINK, filter, startDepth, 2, 2, true);
+ final Map.Entry<Integer, XmlElement> linkInfo = extractElement(
+ reader, null, Collections.<String>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.<String>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.<String>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.<String>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<Map.Entry<String, String>> filterAttrs)
- throws Exception {
- return getAtomElement(reader, discarded, name, filterAttrs, 0, -1, -1, false).getValue();
- }
-
- public static Map.Entry<Integer, XmlElement> getAtomElement(
- final XMLEventReader reader,
- final XMLEventWriter discarded,
- final String name,
- final Collection<Map.Entry<String, String>> 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<String, String> filterAttr : filterAttrs == null
- ? Collections.<Map.Entry<String, String>>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, XmlElement>(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("<link rel=\"edit\" title=\"%s\" href=\"%s\" />", title, href);
try {
// check edit link existence
- getAtomElement(reader, writer, LINK,
+ extractElement(reader, writer, Collections.<String>singletonList(LINK),
Collections.<Map.Entry<String, String>>singletonList(
- new AbstractMap.SimpleEntry<String, String>("rel", "edit")));
+ new AbstractMap.SimpleEntry<String, String>("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.<String>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.<String>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.<String>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.<String>singletonList(PROPERTIES), 0, 2, 3).getValue();
addAtomElement(
IOUtils.toInputStream("<content type=\"application/xml\">"),
@@ -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.<String>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<Integer, XmlElement> extractElement(
+ final XMLEventReader reader, final XMLEventWriter writer, final List<String> path,
+ final int startPathPos, final int minPathPos, final int maxPathPos)
throws Exception {
- int pos = 0;
-
- StartElement property = null;
-
- while (propReader.hasNext() && pos < path.length) {
- final XMLEvent event = propReader.nextEvent();
-
- 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();
- }
- }
- }
-
- if (property == null) {
- throw new NotFoundException();
- }
-
- return property;
+ return extractElement(reader, writer, path, null, false, startPathPos, minPathPos, maxPathPos);
}
- public String getEdmTypeFromXML(final InputStream is, final String[] path)
+ public Map.Entry<Integer, XmlElement> extractElement(
+ final XMLEventReader reader, final XMLEventWriter writer, final List<String> path,
+ final Collection<Map.Entry<String, String>> filter,
+ final boolean filterInOr,
+ final int startPathPos, final int minPathPos, final int maxPathPos)
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();
- }
+ StartElement start = null;
+ int searchFor = 0;
+ int depth = startPathPos;
- return type.getValue();
- }
+ // Current inspected element
+ String current = null;
- 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();
+ // set defaults
+ final List<String> pathElementNames = path == null ? Collections.<String>emptyList() : path;
+ final Collection<Map.Entry<String, String>> filterAttrs =
+ filter == null ? Collections.<Map.Entry<String, String>>emptySet() : filter;
- reader.close();
+ while (reader.hasNext() && start == null) {
+ final XMLEvent event = reader.nextEvent();
- final InputStream propertyStream = writeFromStartToEndElement(
- getPropertyStartTag(propsReader, path),
- propsReader,
- true);
+ if (event.getEventType() == XMLStreamConstants.START_ELEMENT) {
+ depth++;
- if (propertyStream == null) {
- throw new NotFoundException();
- }
+ if (current != null || ((minPathPos < 0 || minPathPos <= depth) && (maxPathPos < 0 || depth <= maxPathPos))) {
+ if (pathElementNames.isEmpty()
+ || pathElementNames.get(searchFor).trim().equals(event.asStartElement().getName().getLocalPart())) {
- return propertyStream;
- }
+ if (searchFor < pathElementNames.size() - 1) {
+ // path exploring not completed
+ writeEvent(event, writer);
+ current = pathElementNames.get(searchFor).trim();
+ searchFor++;
+ } else {
- 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);
+ // path exploring completed ... evaluate filter about path element name attribute
+ boolean match = filterAttrs.isEmpty() || !filterInOr;
+
+ for (Map.Entry<String, String> 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);
+ }
- final QName name = element.getName();
+ } else if (event.getEventType() == XMLStreamConstants.END_ELEMENT) {
+ depth--;
- if (document) {
- final XMLEventFactory eventFactory = XMLEventFactory.newInstance();
- writer.add(eventFactory.createStartDocument("UTF-8", "1.0"));
- writer.add(element);
+ writeEvent(event, writer);
- 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));
+ if (event.asEndElement().getName().getLocalPart().equals(current)) {
+ // back step ....
+ searchFor--;
+ current = searchFor > 0 ? pathElementNames.get(searchFor - 1).trim() : null;
+ }
+ } else {
+ writeEvent(event, writer);
}
- } else {
- writer.add(element);
}
- XMLEvent event = element;
-
- while (reader.hasNext() && !(event.isEndElement() && name.equals(event.asEndElement().getName()))) {
- event = reader.nextEvent();
- writer.add(event);
+ if (start == null) {
+ throw new NotFoundException();
}
- writer.flush();
- writer.close();
-
- return new ByteArrayInputStream(bos.toByteArray());
+ return new SimpleEntry<Integer, XmlElement>(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.<String>singletonList("feed"), 0, 1, 1).getValue();
writer.add(feedElement.getStart());
addAtomElement(IOUtils.toInputStream(String.format("<m:count>%d</m:count>", 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<String> 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<String> pathElements = new ArrayList<String>();
- final InputStream res;
+ for (String element : path) {
+ pathElements.add(ATOM_PROPERTY_PREFIX + element);
+ }
- XMLEvent event = propsReader.nextEvent();
+ final XMLEventReader reader = getEventReader(is);
+ final Map.Entry<Integer, XmlElement> property = extractElement(reader, null, pathElements, 0, 3, 4);
- // 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.");
- }
+ reader.close();
+ IOUtils.closeQuietly(is);
- return res;
+ 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<String> found = new ArrayList<String>(Arrays.asList(propertyNames));
@@ -912,7 +948,11 @@ public class XMLUtilities extends AbstractUtilities {
final Map.Entry<String, String> 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.<String>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<Integer, XmlElement> propertyElement =
- getAtomElement(reader, null, PROPERTIES, null, 0, 2, 3, false);
+ extractElement(reader, null, Collections.<String>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<Integer, XmlElement> linkElement =
- getAtomElement(reader, null, LINK, null, pos, 2, 2, false);
+ extractElement(reader, null, Collections.<String>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<Integer, XmlElement> propertyElement =
- getAtomElement(reader, writer, PROPERTIES, null, 0, 2, 3, false);
+ extractElement(reader, writer, Collections.<String>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.<Map.Entry<String, String>>singleton(new SimpleEntry<String, String>(
- "title", linkName)), 0, 2, 2, false);
+ extractElement(reader, writer, Collections.<String>singletonList(LINK),
+ Collections.<Map.Entry<String, String>>singleton(new SimpleEntry<String, String>("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.<String>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.<Map.Entry<String, String>>singletonList(
- new SimpleEntry<String, String>("title", linkName)));
+ extractElement(reader, writer, Collections.<String>singletonList(LINK),
+ Collections.<Map.Entry<String, String>>singletonList(new SimpleEntry<String, String>("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<String, List<String>> extractLinkURIs(final InputStream is)
+ public String getEdmTypeFromAtom(final String entitySetName, final String entityId, final List<String> path)
+ throws Exception {
+ InputStream src = fsManager.readFile(Commons.getEntityBasePath(entitySetName, entityId) + ENTITY, Accept.XML);
+
+ final List<String> atomPathElements = new ArrayList<String>();
+
+ for (String element : path) {
+ atomPathElements.add(ATOM_PROPERTY_PREFIX + element);
+ }
+
+ final Map.Entry<Integer, XmlElement> 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<String, List<String>> 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<String, List<String>> 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<String> links = new ArrayList<String>();
try {
while (true) {
- links.add(IOUtils.toString(getAtomElement(reader, null, "uri").getContent()));
+ links.add(IOUtils.toString(extractElement(reader, null, Collections.<String>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.<String>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<String, List<String>>(next, links);
}
+
+ @Override
+ public InputStream getProperty(
+ final String entitySetName, final String entityId, final List<String> path, final String edmType)
+ throws Exception {
+ final List<String> pathElements = new ArrayList<String>();
+
+ 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<String> path, final boolean justValue)
+ throws Exception {
+
+ final List<String> pathElements = new ArrayList<String>();
+
+ 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<Integer, XmlElement> 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<String> path) throws Exception {
+
+ final List<String> pathElements = new ArrayList<String>();
+
+ 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<Integer, XmlElement> 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());
+ }
}
[2/4] [OLINGO-175] Provides (V3) CRUD property + refactoring
Posted by fm...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/8f3541c2/fit/src/main/resources/v3/Customer/-9/entity.full.json
----------------------------------------------------------------------
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 0000000..d69bf97
--- /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