Commit 52a9d9ac448803cf193a8fae9020af93037f1718
1 parent
5db5412c
CMIS Object Services bubbling up exceptions and applying status code mapping
Story ID:2713417. CMIS working with PHP client Committed by: Paul Barrett
Showing
3 changed files
with
84 additions
and
148 deletions
lib/api/ktcmis/ktObjectService.inc.php
| ... | ... | @@ -93,10 +93,7 @@ class KTObjectService extends KTCMISBase { |
| 93 | 93 | throw $e; |
| 94 | 94 | } |
| 95 | 95 | |
| 96 | - return array( | |
| 97 | - "status_code" => 0, | |
| 98 | - "results" => $properties | |
| 99 | - ); | |
| 96 | + return $properties; | |
| 100 | 97 | } |
| 101 | 98 | |
| 102 | 99 | /** |
| ... | ... | @@ -122,18 +119,11 @@ class KTObjectService extends KTCMISBase { |
| 122 | 119 | $objectId = $this->ObjectService->createDocument($repositoryId, $properties, $folderId, $contentStream, |
| 123 | 120 | $versioningState,$policies, $addACEs, $removeACEs); |
| 124 | 121 | } |
| 125 | - catch (Exception $e) | |
| 126 | - { | |
| 127 | - return array( | |
| 128 | - "status_code" => 1, | |
| 129 | - "message" => $e->getMessage() | |
| 130 | - ); | |
| 122 | + catch (Exception $e) { | |
| 123 | + throw $e; | |
| 131 | 124 | } |
| 132 | 125 | |
| 133 | - return array( | |
| 134 | - 'status_code' => 0, | |
| 135 | - 'results' => $objectId | |
| 136 | - ); | |
| 126 | + return $objectId; | |
| 137 | 127 | } |
| 138 | 128 | |
| 139 | 129 | /** |
| ... | ... | @@ -154,18 +144,11 @@ class KTObjectService extends KTCMISBase { |
| 154 | 144 | try { |
| 155 | 145 | $objectId = $this->ObjectService->createFolder($repositoryId, $properties, $folderId, $policies, $addACEs, $removeACEs); |
| 156 | 146 | } |
| 157 | - catch (Exception $e) | |
| 158 | - { | |
| 159 | - return array( | |
| 160 | - "status_code" => 1, | |
| 161 | - "message" => $e->getMessage() | |
| 162 | - ); | |
| 147 | + catch (Exception $e) { | |
| 148 | + throw $e; | |
| 163 | 149 | } |
| 164 | 150 | |
| 165 | - return array( | |
| 166 | - 'status_code' => 0, | |
| 167 | - 'results' => $objectId | |
| 168 | - ); | |
| 151 | + return $objectId; | |
| 169 | 152 | } |
| 170 | 153 | |
| 171 | 154 | /** |
| ... | ... | @@ -181,18 +164,11 @@ class KTObjectService extends KTCMISBase { |
| 181 | 164 | try { |
| 182 | 165 | $contentStream = $this->ObjectService->getContentStream($repositoryId, $objectId, $streamId); |
| 183 | 166 | } |
| 184 | - catch (Exception $e) | |
| 185 | - { | |
| 186 | - return array( | |
| 187 | - "status_code" => 1, | |
| 188 | - "message" => $e->getMessage() | |
| 189 | - ); | |
| 167 | + catch (Exception $e) { | |
| 168 | + throw $e; | |
| 190 | 169 | } |
| 191 | 170 | |
| 192 | - return array( | |
| 193 | - 'status_code' => 0, | |
| 194 | - 'results' => $contentStream | |
| 195 | - ); | |
| 171 | + return $contentStream; | |
| 196 | 172 | } |
| 197 | 173 | |
| 198 | 174 | /** |
| ... | ... | @@ -209,18 +185,11 @@ class KTObjectService extends KTCMISBase { |
| 209 | 185 | try { |
| 210 | 186 | $this->ObjectService->moveObject($repositoryId, $objectId, $targetFolderId, $sourceFolderId); |
| 211 | 187 | } |
| 212 | - catch (Exception $e) | |
| 213 | - { | |
| 214 | - return array( | |
| 215 | - "status_code" => 1, | |
| 216 | - "message" => $e->getMessage() | |
| 217 | - ); | |
| 188 | + catch (Exception $e) { | |
| 189 | + throw $e; | |
| 218 | 190 | } |
| 219 | 191 | |
| 220 | - return array( | |
| 221 | - 'status_code' => 0, | |
| 222 | - 'results' => $objectId | |
| 223 | - ); | |
| 192 | + return $objectId; | |
| 224 | 193 | } |
| 225 | 194 | |
| 226 | 195 | /** |
| ... | ... | @@ -236,46 +205,30 @@ class KTObjectService extends KTCMISBase { |
| 236 | 205 | try { |
| 237 | 206 | $this->ObjectService->deleteObject($repositoryId, $objectId, $allVersions); |
| 238 | 207 | } |
| 239 | - catch (Exception $e) | |
| 240 | - { | |
| 241 | - return array( | |
| 242 | - "status_code" => 1, | |
| 243 | - "message" => $e->getMessage() | |
| 244 | - ); | |
| 208 | + catch (Exception $e) { | |
| 209 | + throw $e; | |
| 245 | 210 | } |
| 246 | 211 | |
| 247 | - return array( | |
| 248 | - 'status_code' => 0, | |
| 249 | - 'results' => $objectId | |
| 250 | - ); | |
| 212 | + return $objectId; | |
| 251 | 213 | } |
| 252 | 214 | |
| 253 | 215 | public function deleteTree($repositoryId, $objectId, $changeToken = null, $unfileNonfolderObject = 'delete', $continueOnFailure = false) |
| 254 | 216 | { |
| 217 | + $failed = array(); | |
| 218 | + | |
| 255 | 219 | try { |
| 256 | 220 | $result = $this->ObjectService->deleteTree($repositoryId, $objectId, $changeToken, $unfileNonfolderObject, $continueOnFailure); |
| 257 | 221 | } |
| 258 | - catch (Exception $e) | |
| 259 | - { | |
| 260 | - return array( | |
| 261 | - "status_code" => 1, | |
| 262 | - "message" => $e->getMessage() | |
| 263 | - ); | |
| 222 | + catch (Exception $e) { | |
| 223 | + throw $e; | |
| 264 | 224 | } |
| 265 | 225 | |
| 266 | 226 | // check whether there is a list of items which did not delete |
| 267 | - if (count($result) > 0) | |
| 268 | - { | |
| 269 | - return array( | |
| 270 | - "status_code" => 1, | |
| 271 | - "message" => $result | |
| 272 | - ); | |
| 227 | + if (count($result) > 0) { | |
| 228 | + return $result; | |
| 273 | 229 | } |
| 274 | 230 | |
| 275 | - return array( | |
| 276 | - 'status_code' => 0, | |
| 277 | - 'results' => $objectId | |
| 278 | - ); | |
| 231 | + return $failed; | |
| 279 | 232 | } |
| 280 | 233 | |
| 281 | 234 | /** |
| ... | ... | @@ -299,18 +252,11 @@ class KTObjectService extends KTCMISBase { |
| 299 | 252 | try { |
| 300 | 253 | $documentId = $this->ObjectService->setContentStream($repositoryId, $documentId, $overwriteFlag, $contentStream, $changeToken); |
| 301 | 254 | } |
| 302 | - catch (Exception $e) | |
| 303 | - { | |
| 304 | - return array( | |
| 305 | - "status_code" => 1, | |
| 306 | - "message" => $e->getMessage() | |
| 307 | - ); | |
| 255 | + catch (Exception $e) { | |
| 256 | + throw $e; | |
| 308 | 257 | } |
| 309 | 258 | |
| 310 | - return array( | |
| 311 | - 'status_code' => 0, | |
| 312 | - 'results' => $documentId | |
| 313 | - ); | |
| 259 | + return $documentId; | |
| 314 | 260 | } |
| 315 | 261 | |
| 316 | 262 | } | ... | ... |
webservice/atompub/cmis/KT_cmis_atom_server.services.inc.php
| ... | ... | @@ -121,8 +121,6 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { |
| 121 | 121 | return null; |
| 122 | 122 | } |
| 123 | 123 | |
| 124 | - $response = $response['results']; | |
| 125 | - | |
| 126 | 124 | $folderName = $response['properties']['name']['value']; |
| 127 | 125 | } |
| 128 | 126 | // NOTE parent changes to parents in later specification |
| ... | ... | @@ -140,7 +138,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { |
| 140 | 138 | $this->responseFeed = $feed; |
| 141 | 139 | return null; |
| 142 | 140 | } |
| 143 | - | |
| 141 | + | |
| 144 | 142 | // we know that a folder will only have one parent, so we can assume element 0 |
| 145 | 143 | $folderId = $response['properties']['objectId']['value']; |
| 146 | 144 | $folderName = $response['properties']['name']['value']; |
| ... | ... | @@ -151,7 +149,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { |
| 151 | 149 | |
| 152 | 150 | if (!empty($this->params[1]) && (($this->params[1] == 'children') || ($this->params[1] == 'descendants'))) |
| 153 | 151 | { |
| 154 | - print_r($this->params);exit; | |
| 152 | + print_r($this->params);exit; | |
| 155 | 153 | $NavigationService = new KTNavigationService(KT_cmis_atom_service_helper::getKt()); |
| 156 | 154 | $feed = $this->getFolderChildrenFeed($NavigationService, $repositoryId, $folderId, $folderName, $this->params[1]); |
| 157 | 155 | } |
| ... | ... | @@ -232,56 +230,50 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { |
| 232 | 230 | { |
| 233 | 231 | // TODO detection and passing of optional parameters (policies, ACEs, etc...) as well as support for other object-types |
| 234 | 232 | if ($cmisObjectProperties['cmis:objectTypeId'] == 'cmis:folder') { |
| 235 | - $newObjectId = $ObjectService->createFolder($repositoryId, $properties, $folderId); | |
| 233 | + try { | |
| 234 | + $newObjectId = $ObjectService->createFolder($repositoryId, $properties, $folderId); | |
| 235 | + } | |
| 236 | + catch (Exception $e) { | |
| 237 | + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($service, $this->getStatusCode($e), $e->getMessage()); | |
| 238 | + return null; | |
| 239 | + } | |
| 236 | 240 | } |
| 237 | 241 | else { |
| 238 | 242 | // NOTE for the moment only creation in minor versioning state |
| 239 | - $newObjectId = $ObjectService->createDocument($repositoryId, $properties, $folderId, $cmisContent, 'minor'); | |
| 240 | - } | |
| 241 | - | |
| 242 | - if ($newObjectId['status_code'] == 0) { | |
| 243 | - $newObjectId = $newObjectId['results']; | |
| 244 | - // check if returned Object Id is a valid CMIS Object Id | |
| 245 | - CMISUtil::decodeObjectId($newObjectId, $typeId); | |
| 246 | - if ($typeId != 'unknown') { | |
| 247 | - $success = true; | |
| 243 | + try { | |
| 244 | + $newObjectId = $ObjectService->createDocument($repositoryId, $properties, $folderId, $cmisContent, 'minor'); | |
| 248 | 245 | } |
| 249 | - else { | |
| 250 | - $error = 'Unknown Object Type'; | |
| 246 | + catch (Exception $e) { | |
| 247 | + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($service, $this->getStatusCode($e), $e->getMessage()); | |
| 248 | + return null; | |
| 251 | 249 | } |
| 252 | 250 | } |
| 251 | + | |
| 252 | + // check if returned Object Id is a valid CMIS Object Id | |
| 253 | + CMISUtil::decodeObjectId($newObjectId, $typeId); | |
| 254 | + if ($typeId != 'unknown') { | |
| 255 | + $success = true; | |
| 256 | + } | |
| 253 | 257 | else { |
| 254 | - $error = $newObjectId['message']; | |
| 258 | + $error = 'Unknown Object Type'; | |
| 255 | 259 | } |
| 256 | 260 | } |
| 257 | 261 | else if ($action == 'move') |
| 258 | 262 | { |
| 259 | - $response = $ObjectService->moveObject($repositoryId, $objectId, $folderId, $sourceFolderId); | |
| 260 | - | |
| 261 | - if ($response['status_code'] == 0) { | |
| 262 | - $success = true; | |
| 263 | + try { | |
| 264 | + $newObjectId = $ObjectService->moveObject($repositoryId, $objectId, $folderId, $sourceFolderId); | |
| 263 | 265 | } |
| 264 | - else { | |
| 265 | - $error = $response['message']; | |
| 266 | + catch (Exception $e) { | |
| 267 | + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($service, $this->getStatusCode($e), $e->getMessage()); | |
| 268 | + return null; | |
| 266 | 269 | } |
| 267 | 270 | |
| 268 | - // same object as before | |
| 269 | - $newObjectId = $objectId; | |
| 270 | 271 | // FIXME why set this? it does not appear to get used |
| 271 | 272 | $typeId = ucwords($cmisObjectProperties['cmis:objectTypeId']); |
| 272 | 273 | } |
| 273 | 274 | |
| 274 | - if ($success) | |
| 275 | - { | |
| 276 | - $this->setStatus(($action == 'create') ? self::STATUS_CREATED : self::STATUS_UPDATED); | |
| 277 | - $feed = KT_cmis_atom_service_helper::getObjectFeed($this, $ObjectService, $repositoryId, $newObjectId, 'POST'); | |
| 278 | - } | |
| 279 | - else { | |
| 280 | - $feed = KT_cmis_atom_service_helper::getErrorFeed($this, self::STATUS_SERVER_ERROR, $error); | |
| 281 | - } | |
| 282 | - | |
| 283 | - // Expose the responseFeed | |
| 284 | - $this->responseFeed = $feed; | |
| 275 | + $this->setStatus(($action == 'create') ? self::STATUS_CREATED : self::STATUS_UPDATED); | |
| 276 | + $this->responseFeed = KT_cmis_atom_service_helper::getObjectFeed($this, $ObjectService, $repositoryId, $newObjectId, 'POST'); | |
| 285 | 277 | } |
| 286 | 278 | |
| 287 | 279 | /** |
| ... | ... | @@ -302,21 +294,18 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { |
| 302 | 294 | $ObjectService = new KTObjectService(KT_cmis_atom_service_helper::getKt()); |
| 303 | 295 | |
| 304 | 296 | // attempt delete - last parameter sets $deleteAllVersions true |
| 305 | - $response = $ObjectService->deleteTree($repositoryId, $this->params[0], 'delete', true); | |
| 306 | - | |
| 307 | - // error? | |
| 308 | - if ($response['status_code'] == 1) { | |
| 309 | - $feed = KT_cmis_atom_service_helper::getErrorFeed($this, self::STATUS_SERVER_ERROR, $response['message']); | |
| 297 | + try { | |
| 298 | + $response = $ObjectService->deleteTree($repositoryId, $this->params[0], 'delete', true); | |
| 299 | + } | |
| 300 | + catch (Exception $e) { | |
| 301 | + $feed = KT_cmis_atom_service_helper::getErrorFeed($this, $this->getStatusCode($e), $e->getMessage()); | |
| 310 | 302 | // Expose the responseFeed |
| 311 | 303 | $this->responseFeed = $feed; |
| 312 | 304 | return null; |
| 313 | 305 | } |
| 314 | - else { | |
| 315 | - $response = $response['results']; | |
| 316 | - } | |
| 317 | 306 | |
| 318 | - // list of failed objects? | |
| 319 | - if (is_array($response)) | |
| 307 | + // non-empty list of failed objects? | |
| 308 | + if (count($response)) | |
| 320 | 309 | { |
| 321 | 310 | $this->setStatus(self::STATUS_SERVER_ERROR); |
| 322 | 311 | |
| ... | ... | @@ -376,7 +365,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { |
| 376 | 365 | // with only the depth different |
| 377 | 366 | $depth = 2; |
| 378 | 367 | } |
| 379 | - | |
| 368 | + | |
| 380 | 369 | try { |
| 381 | 370 | $entries = $NavigationService->getDescendants($repositoryId, $folderId, $depth); |
| 382 | 371 | } |
| ... | ... | @@ -454,8 +443,7 @@ class KT_cmis_atom_service_document extends KT_cmis_atom_service { |
| 454 | 443 | $response = $NavigationService->getObjectParents($repositoryId, $objectId, false, false); |
| 455 | 444 | } |
| 456 | 445 | catch (Exception $e) { |
| 457 | - $feed = KT_cmis_atom_service_helper::getErrorFeed($this, $this->getStatusCode($e), $e->getMessage()); | |
| 458 | - $this->responseFeed = $feed; | |
| 446 | + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($this, $this->getStatusCode($e), $e->getMessage()); | |
| 459 | 447 | return null; |
| 460 | 448 | } |
| 461 | 449 | |
| ... | ... | @@ -492,12 +480,11 @@ class KT_cmis_atom_service_document extends KT_cmis_atom_service { |
| 492 | 480 | $ObjectService = new KTObjectService(KT_cmis_atom_service_helper::getKt()); |
| 493 | 481 | |
| 494 | 482 | // attempt delete |
| 495 | - $response = $ObjectService->deleteObject($repositoryId, $this->params[0]); | |
| 496 | - | |
| 497 | - if ($response['status_code'] == 1) { | |
| 498 | - $feed = KT_cmis_atom_service_helper::getErrorFeed($this, self::STATUS_SERVER_ERROR, $response['message']); | |
| 499 | - // Expose the responseFeed | |
| 500 | - $this->responseFeed = $feed; | |
| 483 | + try { | |
| 484 | + $response = $ObjectService->deleteObject($repositoryId, $this->params[0]); | |
| 485 | + } | |
| 486 | + catch (Exception $e) { | |
| 487 | + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($this, $this->getStatusCode($e), $e->getMessage()); | |
| 501 | 488 | return null; |
| 502 | 489 | } |
| 503 | 490 | ... | ... |
webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php
| ... | ... | @@ -62,13 +62,14 @@ class KT_cmis_atom_service_helper { |
| 62 | 62 | self::$repositoryId = $repositoryId; |
| 63 | 63 | |
| 64 | 64 | $serviceType = $service->getServiceType(); |
| 65 | - $response = $ObjectService->getProperties($repositoryId, $objectId, false, false); | |
| 66 | - | |
| 67 | - if ($response['status_code'] == 1) { | |
| 68 | - return KT_cmis_atom_service_helper::getErrorFeed($service, KT_cmis_atom_service::STATUS_SERVER_ERROR, $response['message']); | |
| 65 | + try { | |
| 66 | + $response = $ObjectService->getProperties($repositoryId, $objectId, false, false); | |
| 67 | + } | |
| 68 | + catch (Exception $e) { | |
| 69 | + return KT_cmis_atom_service_helper::getErrorFeed($service, $service->getStatusCode($e), $e->getMessage()); | |
| 69 | 70 | } |
| 70 | 71 | |
| 71 | - $cmisEntry = $response['results']; | |
| 72 | + $cmisEntry = $response; | |
| 72 | 73 | $response = null; |
| 73 | 74 | |
| 74 | 75 | // POST/PWC responses only send back an entry, not a feed |
| ... | ... | @@ -709,8 +710,11 @@ class KT_cmis_atom_service_helper { |
| 709 | 710 | */ |
| 710 | 711 | static public function getContentStream(&$service, &$ObjectService, $repositoryId) |
| 711 | 712 | { |
| 712 | - $response = $ObjectService->getProperties($repositoryId, $service->params[0], false, false); | |
| 713 | - if ($response['status_code'] == 1) { | |
| 713 | + // why do we check the properties first? is it just to determine that the object in fact exists? | |
| 714 | + try { | |
| 715 | + $response = $ObjectService->getProperties($repositoryId, $service->params[0], false, false); | |
| 716 | + } | |
| 717 | + catch (Exception $e) { | |
| 714 | 718 | return null; |
| 715 | 719 | } |
| 716 | 720 | |
| ... | ... | @@ -730,15 +734,14 @@ class KT_cmis_atom_service_helper { |
| 730 | 734 | */ |
| 731 | 735 | static public function downloadContentStream(&$service, &$ObjectService, $repositoryId) |
| 732 | 736 | { |
| 733 | - $response = $ObjectService->getProperties($repositoryId, $service->params[0], false, false); | |
| 734 | - if ($response['status_code'] == 1) { | |
| 735 | - $feed = KT_cmis_atom_service_helper::getErrorFeed($service, KT_cmis_atom_service::STATUS_SERVER_ERROR, $response['message']); | |
| 737 | + try { | |
| 738 | + $response = $ObjectService->getProperties($repositoryId, $service->params[0], false, false); | |
| 739 | + } | |
| 740 | + catch (Exception $e) { | |
| 741 | + $feed = KT_cmis_atom_service_helper::getErrorFeed($service, $service->getStatusCode($e), $e->getMessage()); | |
| 736 | 742 | $service->responseFeed = $feed; |
| 737 | 743 | return null; |
| 738 | 744 | } |
| 739 | - else { | |
| 740 | - $response = $response['results']; | |
| 741 | - } | |
| 742 | 745 | |
| 743 | 746 | // TODO also check If-Modified-Since? |
| 744 | 747 | // $service->headers['If-Modified-Since'] => 2009-07-24 17:16:54 | ... | ... |