我有一个关于使用基于第三方WSDL文件的Web服务的问题。
我已经使用了给定的wsdl并生成了所需的120多个java文件。这个过程是通过使用xjc完成的。在Sping环境中,我能够通过调用几个公开的服务成功地创建几个JUnit测试。
但是,为了成功地测试这些服务,我必须向生成的java文件中添加**@XmlRootElement**注解。
“com.sun.istack.SAXException2:无法将类型“com.beam.services.client.UserGetRequestData”封送为元素,因为它缺少@XmlRootElement注解”
。
我已经搜索了一遍...我无法控制wsdl文件的创建/结构。我该如何生成java文件以确保包含@XmlRootElement注解,或者如何编写客户端代码以避免上述错误?
谢谢
3条答案
按热度按时间falq053o1#
如果你真的需要@XmlRootElement,如果你的类型只用于一个元素,你可以使用简单绑定模式。JAXB默认情况下不包含annotation的原因以及如何使用简单绑定在这里解释:https://web.archive.org/web/20170504081258/https://community.oracle.com/blogs/kohsuke/2006/03/03/why-does-jaxb-put-xmlrootelement-sometimes-not-always:
您的模式可能会被XJC现在没有编译的其他模式使用
和
这种概念在规范中没有定义,但作为一个实验,我们在XJC中有这种积极的优化模式,暂时称为“简单绑定模式”。
当他们移动博客时,样本似乎丢失了,但它看起来像这样:
字符串
另一种可能性是将其 Package 在JAXBElement中。ObjectFactory应该包括一个创建这些 Package 对象的方法。
ergxz8rk2#
如果你正在使用mavem然后检查这个链接,它为我工作。
创建Maven项目。下面你可以看到POM:
字符串
编写XML架构(schema.xsd):
型
定制JAXB绑定(binding.xjb):
型
使用mvn clean install命令运行构建。构建必须成功。生成的类将位于target/generated-sources/xjc目录中。下面是生成的User类的片段:
型
你完了!
im9ewurl3#
关于使用RestAssured和SpringBootTest测试RestController的问题,我使用的是一个外部源的类Document,它缺少@XMLRootElement注解。
我从Document中扩展了一个带有@XMLRootElement注解的类,缺少注解。然后在SpringBootTest中使用新类,即JAXBDocument来调用我的RestController。
@RequestBody注解使用模型类的getter和setter将整个客户端请求Map到模型类。此Map以前失败过,因为缺少@XMLRootElement。
字符串