关于使用基于第三方wsdl文件的Web服务,我有一个问题。

我已使用给定的wsdl并生成了所需的120多个Java文件。通过使用 xjc 完成此过程。在 Sping 环境中,我能够通过调用几个公开的服务成功创建了几个 JUnit 测试。

但是,为了成功测试这些服务,我必须将 @XmlRootElement 批注添加到生成的Java文件中。否则,我会遇到一个错误,指出





我已经筋疲力尽了……我无法控制wsdl文件的创建/结构方式。我该如何生成Java文件以确保包含@XmlRootElement批注,或者如何以避免上述错误的方式编写客户端代码?

谢谢你。

最佳答案

如果您确实需要@XmlRootElement,并且您的类型仅用于一个元素,则可以使用简单的绑定(bind)模式。此处解释了JAXB默认不包含注释的原因以及如何使用简单绑定(bind)的原因:https://community.oracle.com/blogs/kohsuke/2006/03/03/why-does-jaxb-put-xmlrootelement-sometimes-not-always:







该示例似乎在移动博客时迷路了,但它看起来像这样:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="1.0" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" jaxb:extensionbindingprefixes="xjc">
  <xs:annotation>
    <xs:appinfo>
      <jaxb:globalbindings>
        <xjc:simple/>
      </jaxb:globalbindings>
    </xs:appinfo>
  </xs:annotation>
  <xs:element name="foo" type="bar"/>
  <xs:complextype name="bar"/>
</xs:schema>

另一个可能性是将其包装在JAXBElement中。 ObjectFactory应该包括一个用于创建这些包装对象的方法。

10-07 23:36