2011-01-19 62 views
2

我有一個XML文檔,元素<elementName>在它和層次在WSDL文件中設置。生成的類(來自WSDL文件)正確映射所有內容(CXF執行它)。但是如果我需要接受各個名字的<elementName>呢?我如何接受任何名字並擁有正確的層次結構?我希望你明白我想解釋的是什麼:)接受任何名稱作爲XML元素 - JAXB,CXF

我試圖使用@XmlElement(name="")@XmlElement(name="*"),但這並不奏效。

UPDATE:

@XmlAnyElement 
protected Container c; 

我想每個元素在它的XML同一級別的地圖。

具體而言,我想這兩個例子被映射到同一類(Container.class如上):

... XML hierarchy ... 
    <element> 
     ... XML content ... 
    </element> 

... XML hierarchy ... 
    <elementWithUglyNameaodsafh> 
     ... same XML content as above... 
    </elementWithUglyNameaodsafh> 
+0

您希望jaxb識別內容與Container相匹配,或者您希望每個* uglyElement *都將是Container? – ekeren 2011-01-20 12:16:18

+1

查看我的更新,這是一個合適的解決方案嗎? – ekeren 2011-01-21 14:19:34

回答

2

你應該使用@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得到節點...它元帥到Container(whihc也有@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(); 
} 
} 

場外,這個代碼是醜陋效率不高。在提交之前我會重構它。