关于使用基于第三方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应该包括一个用于创建这些包装对象的方法。