このコードを使用して、Modeshape JCR リポジトリにファイルを書き込みます。
Session session = //some session
Node folderNode = session.getRootNode();
//init some calendar and a file from fileSystem
Calendar lastModified = Calendar.getInstance();
File myFile = new File("c://temp//pic.jpg");
//create nt:file node
Node fileNode = folderNode.addNode(myFile.getName(), "nt:file");
// create the mandatory child node - jcr:content
Node resNode = fileNode.addNode("jcr:content", "nt:resource");
resNode.setProperty("jcr:mimeType", "");
resNode.setProperty("jcr:encoding", "");
resNode.setProperty("jcr:lastModified", lastModified);
// add some binary data
InputStream stream = new BufferedInputStream(new FileInputStream(myFile));
Binary binary = session.getValueFactory().createBinary(stream);
lastModified.setTimeInMillis(myFile.lastModified());
resNode.setProperty("jcr:data", binary);
このようなカスタム プロパティを追加したい
resNode.setProperty("myCustomProperty", "some value", PropertyType.STRING)
しかし、すべてのドキュメントで説明されているようConstraintViolationException
に、カスタム プロパティをネイティブ JCR nodeType に追加しようとすると、エラーが発生します。
Native から継承する新しい NodeType を生成nt:resource
し、カスタム プロパティで拡張しようとしました。
Session session = //some session
Workspace workspace = session.getWorkspace();
NodeTypeManager nodeTypeManager = workspace.getNodeTypeManager();
NodeTypeTemplate ndt = nodeTypeManager.createNodeTypeTemplate();
//i define my new custom propertie under the new nodeType
PropertyDefinitionTemplate createPropertyDefinitionTemplate = nodeTypeManager.createPropertyDefinitionTemplate();
createPropertyDefinitionTemplate.setName("myCustomProperty");
createPropertyDefinitionTemplate.setRequiredType(PropertyType.STRING);
ndt.getPropertyDefinitionTemplates().add(createPropertyDefinitionTemplate);
String myNodeTypeName = "newCustimNodeType";
ndt.setName(myNodeTypeName);
//heritates from nt:resource
String[] str = {"nt:resource"};
ndt.setDeclaredSuperTypeNames(str);
nodeTypeManager.registerNodeType(ndt, true);
session.save();
これを行うと回避できConstraintViolationException
ますが、RepositoryException
JCR が新しいタイプのノードをファイル システムに保存できないため、次のメッセージが表示されます。
「有効なプライマリ タイプは、nt:file、nt:folder、nt:resource、および dna:resouce です」
したがって、新しい newNode を superClass から正常に継承していないと思いますnt:resource
。
これはノードにカスタム プロパティを追加する適切な方法ですか? これは、jcr ネイティブのものから継承する新しい nodeType を定義する適切な方法ですか?