This can be reproduced in 9.2.4 and 9.3.3 (only tried those 2 versions)

 

We are using java:HashMap, and we are seeing that when we insert a node into the HashMap from a file and do a subsequent hash:get, the generate-id() for the hash:get is different than the original generate-id value from the hash:put.

Note:  when we read the XML from a file, that is when we see the issue, if we declare the XML in Basex GUI, we do NOT see this behavior.  Here are the examples:

 

Scenario #1:  XML is a variable in the BaseX GUI session --- no bug

----------------------------------------------------------------------------------------

declare namespace hash = "java:java.util.HashMap";

let $data := <A>

   <B>

       <C>

           <Message>Hi there</Message>

           <Message>How are you</Message>

           <D>

               <E>1</E>

           </D>

       </C>

   </B>

</A>

let $node := $data//*:C

 

let $kb := hash:new()

let $nullOp := hash:put($kb, generate-id($node), $node)

let $getNode := hash:get($kb,  generate-id($node))

return

(generate-id($node), generate-id($getNode))

 

Result: 

id6312150

id6312150

 

Scenario #2:  XML is  read in from a file --- bug appears

----------------------------------------------------------------------------------------

Move the data into a file and then read in from the file, that is when we see the issue.

 

declare namespace hash = "java:java.util.HashMap";

let $file := doc('SampleData.xml')

let $node := $file//*:C[1]

 

let $kb := hash:new()

let $null := hash:put($kb, generate-id($node), $node)

let $getNode := hash:get($kb,  generate-id($node))

return

(generate-id($node), generate-id($getNode))

 

Result: 

id30601d5

id30602d0

 

 

Thanks in advance for your assistance

 

Buddy