Jim*_*my 4 java xml xsd web-services jax-ws
我为我的 Web 服务创建了一个 XML 模式,ServerResponse 的元素包含一个无限制的 xs:any 类型元素序列。
我正在从我的模式生成类(使用 xjc),因此这个序列在生成的 ServerResponse 类中被转换为 List。
ServerResponse 类有一个方法 getAny(),它返回这个 List 并允许我对其进行更改......但我无法确切地弄清楚如何做到这一点。
假设我想向响应中任何对象的序列添加几个元素,以便响应的 XML 将包含它。
<someelement1>sometext</someelement1>
<someelement2>somemoretext</someelement2>
Run Code Online (Sandbox Code Playgroud)
从 Java 服务器端代码,我将如何将这两个元素添加到 getAny() 对象?我认为可以这样做:
Object element = new Object();
((Element)element).setNodeValue("someelement1");
((Element)element).setTextContent("sometext");
requestobject.getAny().add(element);
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,因为它会抛出一个错误,指出“java.lang.object cannot be cast to org.w3.dom.Element”。
谁能帮我做到这一点?我相信有一个非常简单的解决方案!
谢谢你的帮助 :)
Object没有实现Element,所以这个演员总是会失败。
您可以Element使用DocumentBuilder从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);
}
}
Run Code Online (Sandbox Code Playgroud)
我还没有在 JAX-WS 下尝试过这个(JAX-WS 使用 JAXB 绑定)——如果它不起作用,我会开始挖掘javax.xml.soap包。
| 归档时间: |
|
| 查看次数: |
5005 次 |
| 最近记录: |