java - JAX-WS - 如何创建类型为 xs :any from server side code? 的元素

标签 java xml web-services xsd jax-ws

我已经为我的 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/

相关文章:

javascript - jQuery 跨域 ajax 调用 - 解释为脚本,但使用 MIME 类型 text/xml 进行传输

java - 比较java单元文本中的Xml,忽略节点中的属性

web-services - Spring-WS:将 SOAP 错误转换为特定异常

java - 我想知道如何从另一个应用程序获取使用 Spring Security 保护的 Web 服务 RES 的内容

c# - 为什么 Visual Studio 2012 生成的 Web 服务代理类以小写字母开头?

java - Hive 查询 Json 错误

java - 是否有提供 LDAP 样式解析的独立 Java 库?

java - 线程池中的代码运行速度比非线程慢得多

java - AndroidManifest.xml 'package.name.Activity' 不可分配给 'android.app.Activity'

java - javanica 中的 Hystrix 异步方法未在 spring-boot java 应用程序中运行