public function provider() { $v1 = Version::v1(); $v2 = Version::v2(); $v3 = Version::v3(); return array(array(101, TargetKind::METADATA(), $v1, null, null, MimeTypes::MIME_APPLICATION_XML), array(102, TargetKind::METADATA(), $v1, MimeTypes::MIME_APPLICATION_XML, null, MimeTypes::MIME_APPLICATION_XML), array(103, TargetKind::METADATA(), $v1, MimeTypes::MIME_APPLICATION_ATOM, null, null), array(104, TargetKind::METADATA(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(105, TargetKind::METADATA(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(106, TargetKind::METADATA(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(108, TargetKind::METADATA(), $v1, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, null), array(109, TargetKind::METADATA(), $v2, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, null), array(110, TargetKind::METADATA(), $v3, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, null), array(111, TargetKind::METADATA(), $v1, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, null), array(112, TargetKind::METADATA(), $v2, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, null), array(113, TargetKind::METADATA(), $v3, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, null), array(114, TargetKind::METADATA(), $v1, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, null), array(115, TargetKind::METADATA(), $v2, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, null), array(116, TargetKind::METADATA(), $v3, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, null), array(124, TargetKind::METADATA(), $v1, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, null), array(125, TargetKind::METADATA(), $v2, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, null), array(126, TargetKind::METADATA(), $v3, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, null), array(201, TargetKind::SERVICE_DIRECTORY(), $v1, null, null, MimeTypes::MIME_APPLICATION_XML), array(202, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_ATOMSERVICE, null, MimeTypes::MIME_APPLICATION_ATOMSERVICE), array(203, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_JSON, null, MimeTypes::MIME_APPLICATION_JSON), array(204, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_ATOM, null, null), array(205, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_ATOM, MimeTypes::MIME_APPLICATION_JSON, MimeTypes::MIME_APPLICATION_JSON), array(206, TargetKind::SERVICE_DIRECTORY(), $v2, MimeTypes::MIME_APPLICATION_ATOM, MimeTypes::MIME_APPLICATION_JSON, MimeTypes::MIME_APPLICATION_JSON), array(207, TargetKind::SERVICE_DIRECTORY(), $v3, MimeTypes::MIME_APPLICATION_ATOM, MimeTypes::MIME_APPLICATION_JSON, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(208, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(209, TargetKind::SERVICE_DIRECTORY(), $v2, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(210, TargetKind::SERVICE_DIRECTORY(), $v3, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(211, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(212, TargetKind::SERVICE_DIRECTORY(), $v2, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(213, TargetKind::SERVICE_DIRECTORY(), $v3, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(214, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(215, TargetKind::SERVICE_DIRECTORY(), $v2, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(216, TargetKind::SERVICE_DIRECTORY(), $v3, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(224, TargetKind::SERVICE_DIRECTORY(), $v1, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(225, TargetKind::SERVICE_DIRECTORY(), $v2, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(226, TargetKind::SERVICE_DIRECTORY(), $v3, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(400, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_XML, null, MimeTypes::MIME_APPLICATION_XML), array(401, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_TEXTXML, null, MimeTypes::MIME_TEXTXML), array(402, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_JSON, null, MimeTypes::MIME_APPLICATION_JSON), array(403, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_ATOM, null, null), array(404, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(405, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(406, TargetKind::PRIMITIVE(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(407, TargetKind::PRIMITIVE(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(408, TargetKind::PRIMITIVE(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(409, TargetKind::PRIMITIVE(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(418, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(419, TargetKind::PRIMITIVE(), $v2, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(420, TargetKind::PRIMITIVE(), $v3, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(421, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(422, TargetKind::PRIMITIVE(), $v2, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(423, TargetKind::PRIMITIVE(), $v3, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(424, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(425, TargetKind::PRIMITIVE(), $v2, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(426, TargetKind::PRIMITIVE(), $v3, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(434, TargetKind::PRIMITIVE(), $v1, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(435, TargetKind::PRIMITIVE(), $v2, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(436, TargetKind::PRIMITIVE(), $v3, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(500, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_XML, null, MimeTypes::MIME_APPLICATION_XML), array(501, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_TEXTXML, null, MimeTypes::MIME_TEXTXML), array(502, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_JSON, null, MimeTypes::MIME_APPLICATION_JSON), array(503, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_ATOM, null, null), array(504, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(505, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(506, TargetKind::COMPLEX_OBJECT(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(507, TargetKind::COMPLEX_OBJECT(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(508, TargetKind::COMPLEX_OBJECT(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(509, TargetKind::COMPLEX_OBJECT(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(518, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(519, TargetKind::COMPLEX_OBJECT(), $v2, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(520, TargetKind::COMPLEX_OBJECT(), $v3, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(521, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(522, TargetKind::COMPLEX_OBJECT(), $v2, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(523, TargetKind::COMPLEX_OBJECT(), $v3, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(524, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(525, TargetKind::COMPLEX_OBJECT(), $v2, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(526, TargetKind::COMPLEX_OBJECT(), $v3, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(534, TargetKind::COMPLEX_OBJECT(), $v1, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(535, TargetKind::COMPLEX_OBJECT(), $v2, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(536, TargetKind::COMPLEX_OBJECT(), $v3, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(600, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_XML, null, MimeTypes::MIME_APPLICATION_XML), array(601, TargetKind::BAG(), $v1, MimeTypes::MIME_TEXTXML, null, MimeTypes::MIME_TEXTXML), array(602, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_JSON, null, MimeTypes::MIME_APPLICATION_JSON), array(603, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_ATOM, null, null), array(604, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(605, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(606, TargetKind::BAG(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(607, TargetKind::BAG(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(608, TargetKind::BAG(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(609, TargetKind::BAG(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(618, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(619, TargetKind::BAG(), $v2, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(620, TargetKind::BAG(), $v3, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(621, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(622, TargetKind::BAG(), $v2, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(623, TargetKind::BAG(), $v3, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(624, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(625, TargetKind::BAG(), $v2, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(626, TargetKind::BAG(), $v3, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(634, TargetKind::BAG(), $v1, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(635, TargetKind::BAG(), $v2, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(636, TargetKind::BAG(), $v3, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(700, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_XML, null, MimeTypes::MIME_APPLICATION_XML), array(701, TargetKind::LINK(), $v1, MimeTypes::MIME_TEXTXML, null, MimeTypes::MIME_TEXTXML), array(702, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_JSON, null, MimeTypes::MIME_APPLICATION_JSON), array(703, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_ATOM, null, null), array(704, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(705, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(706, TargetKind::LINK(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(707, TargetKind::LINK(), $v2, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(708, TargetKind::LINK(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_XML, MimeTypes::MIME_APPLICATION_XML), array(709, TargetKind::LINK(), $v3, MimeTypes::MIME_APPLICATION_ATOM, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(718, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(719, TargetKind::LINK(), $v2, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(720, TargetKind::LINK(), $v3, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(721, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(722, TargetKind::LINK(), $v2, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(723, TargetKind::LINK(), $v3, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(724, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(725, TargetKind::LINK(), $v2, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(726, TargetKind::LINK(), $v3, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(734, TargetKind::LINK(), $v1, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(735, TargetKind::LINK(), $v2, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(736, TargetKind::LINK(), $v3, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(800, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_ATOM, null, MimeTypes::MIME_APPLICATION_ATOM), array(802, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_JSON, null, MimeTypes::MIME_APPLICATION_JSON), array(803, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_XML, null, null), array(804, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_XML, ODataConstants::FORMAT_ATOM, MimeTypes::MIME_APPLICATION_ATOM), array(805, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_XML, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(806, TargetKind::RESOURCE(), $v2, MimeTypes::MIME_APPLICATION_XML, ODataConstants::FORMAT_ATOM, MimeTypes::MIME_APPLICATION_ATOM), array(807, TargetKind::RESOURCE(), $v2, MimeTypes::MIME_APPLICATION_XML, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON), array(808, TargetKind::RESOURCE(), $v3, MimeTypes::MIME_APPLICATION_XML, ODataConstants::FORMAT_ATOM, MimeTypes::MIME_APPLICATION_ATOM), array(809, TargetKind::RESOURCE(), $v3, MimeTypes::MIME_APPLICATION_XML, ODataConstants::FORMAT_JSON, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(818, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(819, TargetKind::RESOURCE(), $v2, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(820, TargetKind::RESOURCE(), $v3, MimeTypes::MIME_APPLICATION_JSON_FULL_META, null, MimeTypes::MIME_APPLICATION_JSON_FULL_META), array(821, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(822, TargetKind::RESOURCE(), $v2, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(823, TargetKind::RESOURCE(), $v3, MimeTypes::MIME_APPLICATION_JSON_NO_META, null, MimeTypes::MIME_APPLICATION_JSON_NO_META), array(824, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(825, TargetKind::RESOURCE(), $v2, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(826, TargetKind::RESOURCE(), $v3, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, null, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META), array(834, TargetKind::RESOURCE(), $v1, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(835, TargetKind::RESOURCE(), $v2, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE), array(836, TargetKind::RESOURCE(), $v3, MimeTypes::MIME_APPLICATION_JSON_VERBOSE, null, MimeTypes::MIME_APPLICATION_JSON_VERBOSE)); }
/** * Test with request uri where TargetKind is NONE. TargetKind will be * NONE for service directory, metadata and batch. */ public function testUriProcessorWithRequestUriOfNoneTargetSourceKind() { //Request for service directory $hostInfo = array('AbsoluteRequestUri' => new Url('http://localhost:8083/NorthWindDataService.svc'), 'AbsoluteServiceUri' => new Url('http://localhost:8083/NorthWindDataService.svc'), 'QueryString' => null); $host = new ServiceHostTestFake($hostInfo); $dataService = new NorthWindService2(); $dataService->setHost($host); $uriProcessor = $dataService->handleRequest(); $requestDescription = $uriProcessor->getRequest(); $this->assertEquals($requestDescription->getTargetSource(), TargetSource::NONE); $this->assertEquals($requestDescription->getTargetKind(), TargetKind::SERVICE_DIRECTORY()); //Request for metadata $hostInfo = array('AbsoluteRequestUri' => new Url('http://localhost:8083/NorthWindDataService.svc/$metadata'), 'AbsoluteServiceUri' => new Url('http://localhost:8083/NorthWindDataService.svc'), 'QueryString' => null); $host = new ServiceHostTestFake($hostInfo); $dataService = new NorthWindService2(); $dataService->setHost($host); $uriProcessor = $dataService->handleRequest(); $requestDescription = $uriProcessor->getRequest(); $this->assertEquals($requestDescription->getTargetSource(), TargetSource::NONE); $this->assertEquals($requestDescription->getTargetKind(), TargetKind::METADATA()); //Request for batch $hostInfo = array('AbsoluteRequestUri' => new Url('http://localhost:8083/NorthWindDataService.svc/$batch'), 'AbsoluteServiceUri' => new Url('http://localhost:8083/NorthWindDataService.svc'), 'QueryString' => null); $host = new ServiceHostTestFake($hostInfo); $dataService = new NorthWindService2(); $dataService->setHost($host); $uriProcessor = $dataService->handleRequest(); $requestDescription = $uriProcessor->getRequest(); $this->assertEquals($requestDescription->getTargetSource(), TargetSource::NONE); $this->assertEquals($requestDescription->getTargetKind(), TargetKind::BATCH()); }
public function testEmptySegments() { $segments = array(); $segmentDescriptors = SegmentParser::parseRequestUriSegments($segments, $this->providersWrapper); //No segment means request for service directory $this->assertTrue(!empty($segmentDescriptors)); $this->assertEquals(count($segmentDescriptors), 1); $this->assertEquals($segmentDescriptors[0]->getTargetKind(), TargetKind::SERVICE_DIRECTORY()); $this->assertEquals($segmentDescriptors[0]->getTargetSource(), TargetSource::NONE); }
/** * Process the request Uri and creates an instance of * RequestDescription from the processed uri. * * @param IService $service Reference to the data service instance. * * @return RequestDescription * * @throws ODataException If any exception occurs while processing the segments * or in case of any version incompatibility. */ public static function process(IService $service) { $host = $service->getHost(); $absoluteRequestUri = $host->getAbsoluteRequestUri(); $absoluteServiceUri = $host->getAbsoluteServiceUri(); $requestUriSegments = array_slice($absoluteRequestUri->getSegments(), $absoluteServiceUri->getSegmentCount()); $segments = SegmentParser::parseRequestUriSegments($requestUriSegments, $service->getProvidersWrapper(), true); $request = new RequestDescription($segments, $absoluteRequestUri, $service->getConfiguration()->getMaxDataServiceVersion(), $host->getRequestVersion(), $host->getRequestMaxVersion()); $kind = $request->getTargetKind(); if ($kind == TargetKind::METADATA() || $kind == TargetKind::BATCH() || $kind == TargetKind::SERVICE_DIRECTORY()) { return $request; } if ($kind == TargetKind::PRIMITIVE_VALUE() || $kind == TargetKind::MEDIA_RESOURCE()) { // http://odata/NW.svc/Orders/$count // http://odata/NW.svc/Orders(123)/Customer/CustomerID/$value // http://odata/NW.svc/Employees(1)/$value // http://odata/NW.svc/Employees(1)/ThumbNail_48X48/$value $request->setContainerName($segments[count($segments) - 2]->getIdentifier()); } else { $request->setContainerName($request->getIdentifier()); } if ($request->getIdentifier() === ODataConstants::URI_COUNT_SEGMENT) { if (!$service->getConfiguration()->getAcceptCountRequests()) { throw ODataException::createBadRequestError(Messages::configurationCountNotAccepted()); } $request->queryType = QueryType::COUNT(); // use of $count requires request DataServiceVersion // and MaxDataServiceVersion greater than or equal to 2.0 $request->raiseResponseVersion(2, 0); $request->raiseMinVersionRequirement(2, 0); } else { if ($request->isNamedStream()) { $request->raiseMinVersionRequirement(3, 0); } else { if ($request->getTargetKind() == TargetKind::RESOURCE()) { if (!$request->isLinkUri()) { $resourceSetWrapper = $request->getTargetResourceSetWrapper(); //assert($resourceSetWrapper != null) $hasNamedStream = $resourceSetWrapper->hasNamedStreams($service->getProvidersWrapper()); $hasBagProperty = $resourceSetWrapper->hasBagProperty($service->getProvidersWrapper()); if ($hasNamedStream || $hasBagProperty) { $request->raiseResponseVersion(3, 0); } } } else { if ($request->getTargetKind() == TargetKind::BAG()) { $request->raiseResponseVersion(3, 0); } } } } return $request; }
/** * Gets the response format for the requested resource. * * @param RequestDescription $request The request submitted by client and it's execution result. * @param UriProcessor $uriProcessor The reference to the UriProcessor. * @param IService $service Reference to the service implementation instance * * @return string the response content-type, a null value means the requested resource * is named stream and IDSSP2::getStreamContentType returned null * * @throws ODataException, HttpHeaderFailure */ public static function getResponseContentType(RequestDescription $request, UriProcessor $uriProcessor, IService $service) { // The Accept request-header field specifies media types which are acceptable for the response $host = $service->getHost(); $requestAcceptText = $host->getRequestAccept(); $requestVersion = $request->getResponseVersion(); //if the $format header is present it overrides the accepts header $format = $host->getQueryStringItem(ODataConstants::HTTPQUERY_STRING_FORMAT); if (!is_null($format)) { //There's a strange edge case..if application/json is supplied and it's V3 if ($format == MimeTypes::MIME_APPLICATION_JSON && $requestVersion == Version::v3()) { //then it's actual minimalmetadata //TODO: should this be done with the header text too? $format = MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META; } $requestAcceptText = ServiceHost::translateFormatToMime($requestVersion, $format); } //The response format can be dictated by the target resource kind. IE a $value will be different then expected //getTargetKind doesn't deal with link resources directly and this can change things $targetKind = $request->isLinkUri() ? TargetKind::LINK() : $request->getTargetKind(); switch ($targetKind) { case TargetKind::METADATA(): return HttpProcessUtility::selectMimeType($requestAcceptText, array(MimeTypes::MIME_APPLICATION_XML)); case TargetKind::SERVICE_DIRECTORY(): return HttpProcessUtility::selectMimeType($requestAcceptText, array(MimeTypes::MIME_APPLICATION_XML, MimeTypes::MIME_APPLICATION_ATOMSERVICE, MimeTypes::MIME_APPLICATION_JSON, MimeTypes::MIME_APPLICATION_JSON_FULL_META, MimeTypes::MIME_APPLICATION_JSON_NO_META, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, MimeTypes::MIME_APPLICATION_JSON_VERBOSE)); case TargetKind::PRIMITIVE_VALUE(): $supportedResponseMimeTypes = array(MimeTypes::MIME_TEXTPLAIN); if ($request->getIdentifier() != '$count') { $projectedProperty = $request->getProjectedProperty(); self::assert(!is_null($projectedProperty), '!is_null($projectedProperty)'); $type = $projectedProperty->getInstanceType(); self::assert(!is_null($type) && $type instanceof IType, '!is_null($type) && $type instanceof IType'); if ($type instanceof Binary) { $supportedResponseMimeTypes = array(MimeTypes::MIME_APPLICATION_OCTETSTREAM); } } return HttpProcessUtility::selectMimeType($requestAcceptText, $supportedResponseMimeTypes); case TargetKind::PRIMITIVE(): case TargetKind::COMPLEX_OBJECT(): case TargetKind::BAG(): case TargetKind::LINK(): return HttpProcessUtility::selectMimeType($requestAcceptText, array(MimeTypes::MIME_APPLICATION_XML, MimeTypes::MIME_TEXTXML, MimeTypes::MIME_APPLICATION_JSON, MimeTypes::MIME_APPLICATION_JSON_FULL_META, MimeTypes::MIME_APPLICATION_JSON_NO_META, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, MimeTypes::MIME_APPLICATION_JSON_VERBOSE)); case TargetKind::RESOURCE(): return HttpProcessUtility::selectMimeType($requestAcceptText, array(MimeTypes::MIME_APPLICATION_ATOM, MimeTypes::MIME_APPLICATION_JSON, MimeTypes::MIME_APPLICATION_JSON_FULL_META, MimeTypes::MIME_APPLICATION_JSON_NO_META, MimeTypes::MIME_APPLICATION_JSON_MINIMAL_META, MimeTypes::MIME_APPLICATION_JSON_VERBOSE)); case TargetKind::MEDIA_RESOURCE(): if (!$request->isNamedStream() && !$request->getTargetResourceType()->isMediaLinkEntry()) { throw ODataException::createBadRequestError(Messages::badRequestInvalidUriForMediaResource($host->getAbsoluteRequestUri()->getUrlAsString())); } $uriProcessor->execute(); $request->setExecuted(); // DSSW::getStreamContentType can throw error in 2 cases // 1. If the required stream implementation not found // 2. If IDSSP::getStreamContentType returns NULL for MLE $responseContentType = $service->getStreamProviderWrapper()->getStreamContentType($request->getTargetResult(), $request->getResourceStreamInfo()); // Note StreamWrapper::getStreamContentType can return NULL if the requested named stream has not // yet been uploaded. But for an MLE if IDSSP::getStreamContentType returns NULL then StreamWrapper will throw error if (!is_null($responseContentType)) { $responseContentType = HttpProcessUtility::selectMimeType($requestAcceptText, array($responseContentType)); } return $responseContentType; } //If we got here, we just don't know what it is... throw new ODataException(Messages::unsupportedMediaType(), 415); }
/** * To check whether to execute the query using IDSQP. * * @return boolean True if query need to be executed, False otherwise. */ public function needExecution() { return !$this->_isExecuted && $this->lastSegment->getTargetKind() != TargetKind::METADATA() && $this->lastSegment->getTargetKind() != TargetKind::SERVICE_DIRECTORY(); }
/** * Process a collection of OData URI segment strings and turn them into segment descriptors * * @param string[] $segments array of segments strings to parse * @param boolean $checkRights Whether to check for rights or not * * @throws ODataException Exception in case of any error found while precessing segments */ private function createSegmentDescriptors($segments, $checkRights) { if (empty($segments)) { //If there's no segments, then it's the service root $descriptor = new SegmentDescriptor(); $descriptor->setTargetKind(TargetKind::SERVICE_DIRECTORY()); $this->_segmentDescriptors[] = $descriptor; return; } $segmentCount = count($segments); $identifier = $keyPredicate = null; $this->extractSegmentIdentifierAndKeyPredicate($segments[0], $identifier, $keyPredicate); $previous = $this->_createFirstSegmentDescriptor($identifier, $keyPredicate, $checkRights); $this->_segmentDescriptors[0] = $previous; for ($i = 1; $i < $segmentCount; $i++) { $current = $this->createNextSegment($previous, $segments[$i], $checkRights); $current->setPrevious($previous); $previous->setNext($current); $this->_segmentDescriptors[] = $current; $previous = $current; } //At this point $previous is the final segment..which cannot be a $link if ($previous->getTargetKind() == TargetKind::LINK()) { throw ODataException::createBadRequestError(Messages::segmentParserMissingSegmentAfterLink()); } }