The whole issue was because of:
@XmlElementRef(name = "parent", namespace = "abc", type = JAXBElement.class)
protected JAXBElement<? extends Parent> parent;
After many futile attempts to fix it, I came across this defect: https://bugs.eclipse.org/bugs/show_bug.cgi?id=327811
After referring to its code, I saw that it addressed a situation very similar to mine, but used just @XmlElementRef annotation on the supertype, without using anything else like JAXBElement or supplying any other parameters to @XmlElementRef.
I tried that (and removed its mapping from oxm file) and it worked like a charm! I hope this answer helps anybody else who is stuck with the same problem.