我为我的webservice创建了一个XML模式,ServerResponse的元素包含xs:any的无限元素序列。
我正在从我的模式生成类(使用xjc),因此在生成的ServerResponse类中将此序列转换为List。
ServerResponse类有一个方法getAny(),它返回这个List并允许我对它进行更改..但我无法弄清楚到底是怎么做的。
假设我想在响应中的任何对象的序列中添加几个元素,以便响应的XML将包含此元素。
<someelement1>sometext</someelement1>
<someelement2>somemoretext</someelement2>
从Java服务器端代码,我如何将这两个元素添加到getAny()对象? 我认为可以这样做:
Object element = new Object();
((Element)element).setNodeValue("someelement1");
((Element)element).setTextContent("sometext");
requestobject.getAny().add(element);
但是这不起作用,因为它抛出一个错误,指出“java.lang.object无法强制转换为org.w3.dom.Element”。
任何人都可以帮我这样做吗?我确信这是一个非常简单的解决方案!
感谢您的帮助:)
答案 0 :(得分:4)
您可以使用DocumentBuilder
创建Element
个实例,您可以从DocumentBuilderFactory
获取。{/ p>
以下是一些示例JAXB代码:
@XmlRootElement
public class Anything {
private Object any;
@XmlAnyElement
public Object getAny() { return any; }
public void setAny(Object any) { this.any = any; }
public static void main(String[] args) throws DOMException,
ParserConfigurationException {
Element foo = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.newDocument()
.createElement("foo");
Anything a = new Anything();
a.setAny(foo);
JAXB.marshal(a, System.out);
}
}
我没有在JAX-WS下尝试过这个(JAX-WS使用JAXB绑定) - 如果它不起作用,我会开始挖掘javax.xml.soap包。