Вы должны использовать @XmlAnyElement, см. Информацию здесь:
http://jaxb.java.net/tutorial/section_6_2_7_6-Collecting-Unspecified-Elements-XmlAnyElement.html#Collecting%20Unspecified%20Elements:%20XmlAnyElement
, например:
public class ZooType {
protected List<Element> animals;
public ZooType(){
}
@XmlAnyElement
public List<Element> getAnimals(){
if( animals == null ) animals = new ArrayList<Element>();
return animals;
}
public void setAnimals( List value ){
animals = value;
}
}
, позже вы можете извлечь имя и значение элемента:
for( Element el: doc.getZoo().getAnimals() ){
System.out.println( el.getNodeName() + "->" +
el.getTextContent() );
}
РЕДАКТИРОВАТЬ :
в качестве ответа на обновление вопроса можно предложить обходное решение.
Извините, я никогда не программировал XML, так что, вероятно, есть лучший способ сделать обтекание и замену элемента.
Суть в следующем: используйте @XmlAnyElement, чтобы получить узел ... и направить его в свой контейнер (который также имеет аннотацию @XmlRootElement)
@XmlRootElement
public class Root {
public Container c;
@XmlAnyElement
public void setElements(Element e) throws JAXBException, ParserConfigurationException {
Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element container = d.createElement("container");
d.appendChild(container);
Node node = d.adoptNode(e.getFirstChild());
container.appendChild(node);
c = (Container) JAXBContext.newInstance(Container.class).createUnmarshaller().unmarshal(d);
}
public Element getElements() {
throw new UnsupportedOperationException();
}
}
конечно, этот код некрасив и не эффективен .Я бы переделал его перед коммитом.