Hmmm, it seems to work now for adding the file to the folder. See my
code below. I was contrasting it to my code that previously didn't work.

Maybe it was because I didn't put in the JcrConstants.NT_FILE
before?


```java
Node root, folder;
root = session.getRootNode();
folder = root.getNode("bar");

Node child = folder.addNode("grade.png", JcrConstants.NT_FILE);
Node content = child.addNode(JcrConstants.JCR_CONTENT,
JcrConstants.NT_RESOURCE);
// Set the property for the node.
content.setProperty(JcrConstants.JCR_DATA,
        root.getSession().getValueFactory().createBinary(new
        FileInputStream("grade.png")));
        content.setProperty(JcrConstants.JCR_MIMETYPE,
        "image/png");
Calendar rightNow = Calendar.getInstance();
content.setProperty(JcrConstants.JCR_LASTMODIFIED, rightNow);
```

On Thu, Aug 26, 2021 at 02:28:30PM -0700, Eric Norman wrote:
> >
> > "No child node definition for grade.png found in node /bar"
> 
> 
> I see.  Well, the folder you created via webdav must be a "nt:folder" node
> type?  In that case, the type of the child must extend "nt:hierarchyNode"
> to conform with the "nt:folder" node type definition.
> 
> In the example I provided in my last reply,  the child node is created
> using the JcrConstants.NT_FILE node type which would satisfy that condition
> since "nt:file" extends the "nt:hierarchyNode" node type.
> 
> Hope that helps.
> 
> Regards,
> -Eric
> 
> On Thu, Aug 26, 2021 at 2:17 PM Brian E. Lavender <[email protected]> wrote:
> 
> > I clarified the root node and made a new variable to hold the node for
> > the bar folder.
> >
> > ```java
> > // bar is a folder created through the webdav interface.
> > Node root,folder;
> > root = session.getRootNode();
> > folder = root.getNode("bar");
> >
> > // fails here
> > Node child = folder.addNode("grade.png");
> > ```
> >
> > Error message is the following
> >
> > "No child node definition for grade.png found in node /bar"
> >
> > On Thu, Aug 26, 2021 at 02:03:27PM -0700, Eric Norman wrote:
> > > Maybe this a typo?  It looks like your sample code added the child to the
> > > root node, not under "/bar" where you were doing the lookup.
> > >
> > > Node child = *root*.addNode("grade.png");
> > >
> > >
> > > On Thu, Aug 26, 2021 at 1:47 PM Brian E. Lavender <[email protected]>
> > wrote:
> > >
> > > > I still can not seem to add a file.
> > > >
> > > > I went through the webdav interface and I created a 'folder' called
> > bar.
> > > > Then, I tried to programmatically add a file to that folder. I am
> > > > getting nothing.
> > > >
> > > > ```java
> > > > // get the path for where to add the file.
> > > > // We want to put it in the `bar` folder
> > > > Node root;
> > > > root = session.getRootNode();
> > > > root = root.getNode("bar");
> > > >
> > > >
> > > > System.out.print("Adding binary ");
> > > > Calendar rightNow = Calendar.getInstance();
> > > > // Add a node for the file
> > > > // It fails here
> > > > Node child = root.addNode("grade.png");
> > > >
> > > > // Set the property for the node.
> > > > child.setProperty(JcrConstants.JCR_DATA,
> > > >         root.getSession().getValueFactory().createBinary(new
> > > > FileInputStream("grade.png")));
> > > > child.setProperty(JcrConstants.JCR_MIMETYPE, "image/png");
> > > > child.setProperty(JcrConstants.JCR_LASTMODIFIED, rightNow);
> > > >
> > > > session.save();
> > > > ```
> > > >
> > > > ```
> > > > javax.jcr.nodetype.ConstraintViolationException: No child node
> > > > definition for grade.png found in node /bar
> > > > <snip>
> > > > at
> > > >
> > org.apache.jackrabbit.rmi.server.ServerObject.getRepositoryException(ServerObject.java:109)
> > > > at
> > org.apache.jackrabbit.rmi.client.ClientNode.addNode(ClientNode.java:95)
> > > > at gov.ca.brea.jackrabbit.FifthHop.main(FifthHop.java:74)
> > > >
> > > >
> > > >
> > > > On Thu, Aug 26, 2021 at 01:04:35AM +0200, Jakub Kaniewski wrote:
> > > > > For this you use ValueFactory
> > > > >
> > > > > Example
> > > > >
> > > >
> > node.setProperty(JcrConstants.JCR_DATA,node.getSession().getValueFactory().createBinary
> > > > <
> > > >
> > https://www.tabnine.com/code/java/methods/javax.jcr.ValueFactory/createBinary
> > >(new
> > > > FileInputStream(“/tmp/test.jpg)));
> > > > >
> > > > >
> > > > > —
> > > > > Jakub Kaniewski | 666 831 500 | [email protected]
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > > On 26 Aug 2021, at 00:59, Brian E. Lavender <[email protected]>
> > wrote:
> > > > > >
> > > > > > How is it I add a binary to a Node?
> > > > > >
> > > > > > I see the following method.
> > > > > > Property setProperty(java.lang.String name, Binary value)
> > > > > >
> > > > > > I see that Binary is an interface, yet I am not sure how to create
> > a
> > > > > > Binary from a File that I open.
> > > > > >
> > > > > > Or, stated another way, say I want to add a jpg image from my disk
> > to
> > > > > > a node. Would I use this setProperty method? How would I do it?
> > > > > >
> > > > > > Brian
> > > > > > --
> > > > > > Brian Lavender
> > > > > > http://www.brie.com/brian/
> > > > > >
> > > > > > "There are two ways of constructing a software design. One way is
> > to
> > > > > > make it so simple that there are obviously no deficiencies. And the
> > > > other
> > > > > > way is to make it so complicated that there are no obvious
> > > > deficiencies."
> > > > > >
> > > > > > Professor C. A. R. Hoare
> > > > > > The 1980 Turing award lecture
> > > > >
> > > >
> > > > --
> > > > Brian Lavender
> > > > http://www.brie.com/brian/
> > > >
> > > > "There are two ways of constructing a software design. One way is to
> > > > make it so simple that there are obviously no deficiencies. And the
> > other
> > > > way is to make it so complicated that there are no obvious
> > deficiencies."
> > > >
> > > > Professor C. A. R. Hoare
> > > > The 1980 Turing award lecture
> > > >
> >
> > --
> > Brian Lavender
> > http://www.brie.com/brian/
> >
> > "There are two ways of constructing a software design. One way is to
> > make it so simple that there are obviously no deficiencies. And the other
> > way is to make it so complicated that there are no obvious deficiencies."
> >
> > Professor C. A. R. Hoare
> > The 1980 Turing award lecture
> >

-- 
Brian Lavender
http://www.brie.com/brian/

"There are two ways of constructing a software design. One way is to
make it so simple that there are obviously no deficiencies. And the other
way is to make it so complicated that there are no obvious deficiencies."

Professor C. A. R. Hoare
The 1980 Turing award lecture

Reply via email to