java - 接受任何名称作为 XML 元素 - JAXB、CXF

标签 java xml wsdl jaxb cxf

我有一个 XML 文档,元素 <elementName>在其中和在 WSDL 文件中设置的层次结构。生成的类(来自 WSDL 文件)正确映射所有内容(CXF 做到了)。但是,如果我需要接受 <elementName> 怎么办?每个名字?我怎样才能接受任何名称并拥有正确的层次结构?我希望你能理解我要解释的内容:)

我尝试使用 @XmlElement(name="")@XmlElement(name="*") ,但这没有用。

更新:

@XmlAnyElement
protected Container c;

而且我想在它上面映射 XML 中同一级别的每个元素。

具体来说,我希望将这两个示例映射到同一个类(如上的 Container.class):

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

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

最佳答案

你应该使用@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();
}
}

当然,这段代码丑陋并且效率不高。我会在提交之前重构它。

关于java - 接受任何名称作为 XML 元素 - JAXB、CXF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4734104/

相关文章:

java - forName 和 GetClassLoader 的使用

android - 如何更改android studio中的默认布局(activity_main)

python - 从 XSD 生成 Python 类和 SQLAlchemy 代码以将 XML 存储在 Postgres 上

java - 将 wsdl 生成的 XmlGregorianCalendar 类型的日期替换为 java.util.Date?

java - wsgen:返回一个抽象类

delphi - WSDL导入器,用于带有负数的枚举类型

Java 说我必须返回一个对象,但我抛出异常

java - 如何让一个线程等待并执行另一个???

java - Unity-Android _ CommandInvokationFailure : Unable to convert classes into dex format

java - DocumentBuilder 解析在命中 '&amp;' 时中断字符串