Adding a child to a virtual document and getting error
Question:
I tried to add a child XML based content to a XML based virtual content programatically and getting the following error. The child content and virtual content reside in the repository. Any idea why I am getting the following error.
thanks in advance
java.lang.ClassCastException: com.documentum.vdm.impl.AdaptiveNode.
sample code
public boolean checkoutVDM(String docId){
try {
IDfCheckoutOperation coOp = clientx.getCheckoutOperation();
//coOp.setDestinationDirectory(“E://aaa/TempArea”);
IDfDocument doc = (IDfDocument) session.getObject(new DfId(docId));
IDfCheckoutNode coNode;
if (doc.isVirtualDocument()){
IDfVirtualDocument vDoc = doc.asVirtualDocument( “CURRENT”,false);
coNode = (IDfCheckoutNode)coOp.add(vDoc);
} else {
coNode = (IDfCheckoutNode)coOp.add(doc);
}
if (coOp.execute()) {
return true;
} else {
return false;
}
} catch(Exception ex){
ex.printStackTrace();
System.out.println(“checkoutVDM Error: ” + ex.getLocalizedMessage());
}
return false;
}
public boolean checkinVDM(String docId){
try {
IDfCheckinOperation cio = clientx.getCheckinOperation();
cio.setCheckinVersion(IDfCheckinOperation.NEXT_MAJOR);
cio.setVersionLabels(“CURRENT”);
IDfDocument doc = (IDfDocument) session.getObject(new DfId(docId));
if (doc.isVirtualDocument()){
IDfVirtualDocument vDoc = doc.asVirtualDocument( “CURRENT”,false);
IDfCheckinNode node = (IDfCheckinNode) cio.add(vDoc);
} else{
IDfCheckinNode node = (IDfCheckinNode) cio.add(doc);
}
if (!cio.execute())
{
return false;
}
} catch(Exception ex){
ex.printStackTrace();
System.out.println(“checkinVDM Error: ” + ex.getLocalizedMessage());
}
return true;
}
public boolean createVDMNode(String parentIdString, String childIdString, String versionLabel, String siblingIdString){
try {
boolean bCheckoutSuccess = checkoutVDM(parentIdString);
if (bCheckoutSuccess) {
IDfVirtualDocument vDoc = null;
IDfId parentIdObject = clientx.getId(parentIdString);
IDfSysObject sysObj = (IDfSysObject) session.getObject(parentIdObject);
if (versionLabel.equals(“”)) versionLabel = null;
if (sysObj != null){
vDoc = sysObj.asVirtualDocument(null,false);
IDfVirtualDocumentNode root = vDoc.getRootNode();
IDfId childId = session.getIdByQualification(“dm_sysobject where r_object_id=’” + childIdString + “‘”);
IDfSysObject childObj = (IDfSysObject) session.getObject(childId);
IDfVirtualDocumentNode siblingNode = null;
if (!siblingIdString.equals(null) & !siblingIdString.equals(“”)){
IDfId siblingId = session.getIdByQualification(“dm_sysobject where r_object_id=’” + siblingIdString + “‘”);
IDfSysObject siblingObj = (IDfSysObject) session.getObject(siblingId);
String siblingChronId = siblingObj.getChronicleId().toString();
siblingNode = vDoc.find(root,siblingChronId,”i_chronicle_id”,0);
}
IDfVirtualDocumentNode childVDNode = vDoc.addNode(root, siblingNode, childObj.getChronicleId(), null, false, false);
//vDoc.addNode(root, siblingNode, childObj.getChronicleId(), null, false, false);
boolean bCheckinSuccess = checkinVDM(parentIdString);
if (bCheckinSuccess) {
return true;
} else {
return false;
}
}
}
} catch(Exception ex){
ex.printStackTrace();
System.out.println(“checkinVDM Error: ” + ex.getLocalizedMessage());
}
return false;
}
Solution:
Are you using a XML Application for this VD? Is the childNode compatible with the chunking logic in that XML Application?