{"record":{"id":"11d4249b2047a3e2","repo":"pentaho/pentaho-kettle","slug":"cannot-assemble-shared-object-of-type-s","errorCode":null,"errorMessage":"Cannot assemble shared object of type [%s]","messagePattern":"Cannot assemble shared object of type \\[(.+?)\\]","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/PurRepository.java","lineNumber":1411,"sourceCode":"    // Since type is not preserved in the RepositoryFile we fetch files by type so we don't rely on parsing the name to\n    // determine type afterward\n    // Map must be ordered or we can't match up files with data and version summary\n    LinkedHashMap<RepositoryObjectType, List<RepositoryFile>> filesByType = getFilesByType( allFiles, types );\n    readWriteLock.readLock().lock();\n    try {\n      List<NodeRepositoryFileData> data;\n      List<VersionSummary> versions;\n      data = pur.getDataForReadInBatch( allFiles, NodeRepositoryFileData.class );\n      versions = pur.getVersionSummaryInBatch( allFiles );\n\n      Iterator<NodeRepositoryFileData> dataIter = data.iterator();\n      Iterator<VersionSummary> versionsIter = versions.iterator();\n\n      // Assemble into completely loaded SharedObjectInterfaces by type\n      for ( Entry<RepositoryObjectType, List<RepositoryFile>> entry : filesByType.entrySet() ) {\n        SharedObjectAssembler<?> assembler = sharedObjectAssemblerMap.get( entry.getKey() );\n        if ( assembler == null ) {\n          throw new UnsupportedOperationException(\n            String.format( \"Cannot assemble shared object of type [%s]\", entry.getKey() ) ); //$NON-NLS-1$\n        }\n        // For all files of this type, assemble them from the pieces of data pulled from the repository\n        Iterator<RepositoryFile> filesIter = entry.getValue().iterator();\n        List<SharedObjectInterface<?>> sharedObjects = new ArrayList<>( entry.getValue().size() );\n        // Exceptions are thrown during lookup if data or versions aren't found so all the lists should be the same size\n        // (no need to check for next on all iterators)\n        while ( filesIter.hasNext() ) {\n          RepositoryFile file = filesIter.next();\n          NodeRepositoryFileData repoData = dataIter.next();\n          VersionSummary version = versionsIter.next();\n\n          // TODO: inexistent db types can cause exceptions assembling; prevent total failure\n          try {\n            sharedObjects.add( assembler.assemble( file, repoData, version ) );\n          } catch ( Exception ex ) {\n            // TODO i18n\n            getLog().logError( \"Unable to load shared objects\", ex );","sourceCodeStart":1393,"sourceCodeEnd":1429,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/PurRepository.java#L1393-L1429","documentation":"During shared object loading, PurRepository looks up a SharedObjectAssembler for each repository object type found (e.g. DATABASE, TRANSFORMATION). If a file of a type with no registered assembler is present, an UnsupportedOperationException with this message is thrown.","triggerScenarios":"The repository contains files of a RepositoryObjectType that this PDI version does not know how to assemble (e.g. newer repository content read by an older client, or unsupported types like RDBMS-partitioned metadata in the shared folder).","commonSituations":"Version mismatch between PDI client and Pentaho Server/repository content; custom or new object types added server-side.","solutions":["Upgrade the PDI/pur plugin to a version that supports all object types present in the repository.","Identify the offending type from the message and remove/move those files from the shared objects area.","Register a custom SharedObjectAssembler for the type if you own the extension.","Pin client and server to matching versions."],"exampleFix":"// before\n// older client hits unknown type and throws\n// after\n// upgrade client\n<dependency>\n  <groupId>org.pentaho.di</groupId>\n  <artifactId>pdi-core</artifactId>\n  <version>9.3.0.0-428</version> <!-- match server version -->\n</dependency>","handlingStrategy":"try-catch","validationCode":"// keep client and server versions aligned; check known types before load\nSet<RepositoryObjectType> supported = sharedObjectAssemblerMap.keySet();\n// ensure repository only contains types in `supported`","typeGuard":"boolean assemblable = t -> sharedObjectAssemblerMap.containsKey(t);","tryCatchPattern":"try { readSharedObjects(); } catch (UnsupportedOperationException e) { log.error(\"unknown shared type\", e); }","preventionTips":["Match PDI client version with Pentaho server/repository version.","Avoid manually injecting unknown file types into shared folders.","Filter unsupported types before calling shared object loading.","Keep the pur plugin updated."],"tags":["repository","kettle","unsupported-type","version-mismatch"],"backgroundTag":"unsupported-operation","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}