我已经为我的 web 服务创建了一个 XML 架构,ServerResponse 的元素包含类型为 xs:any 的元素的无限序列。
我正在从我的模式中生成类(使用 xjc),因此这个序列在生成的 ServerResponse 类中被转换为列表。
ServerResponse 类有一个方法 getAny(),它返回此列表并允许我对其进行更改..但我无法弄清楚如何执行此操作。
假设我想向响应中任何对象的序列添加几个元素,以便响应的 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 cannot be cast to org.w3.dom.Element”。
谁能帮我做这个?我确信有一个非常简单的解决方案!
感谢您的帮助:)
最佳答案
Object
没有实现 Element
,所以这个 Actor 总是会失败。
您可以使用 DocumentBuilder
创建 Element
实例你可以从 DocumentBuilderFactory
得到.
这是一些示例 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 绑定(bind))- 如果它不起作用,我会开始挖掘 javax.xml.soap包。
关于java - JAX-WS - 如何创建类型为 xs :any from server side code? 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6800556/