gpt4 book ai didi

spring - 从 wsdl 创建客户端时缺少 @XmlRootElement

转载 作者:行者123 更新时间:2023-12-04 15:47:23 24 4
gpt4 key购买 nike

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

我采用了给定的 wsdl 并生成了所需的 120 多个 java 文件。这个过程是通过使用 完成的。 xjc .内 Spring 环境,我能够成功创建几个 JUnit 通过调用几个公开的服务进行测试。

但是,为了成功测试这些服务,我必须添加 @XmlRootElement 对生成的 java 文件进行注释。否则,我会遇到错误说明

"com.sun.istack.SAXException2: unable to marshal type "com.beam.services.client.UserGetRequestData" as an element because it is missing an @XmlRootElement annotation"



.

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

谢谢你。

最佳答案

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

your schema might be used by other schemas that XJC isn't compiling right now





Such notion isn't defined in the spec, but as an experiment we have such aggressive optimization mode in XJC, tentatively called "simple-minded binding mode".



移动博客时,示例似乎丢失了,但看起来像这样:
<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 应该包含一个用于创建这些包装对象的方法。

关于spring - 从 wsdl 创建客户端时缺少 @XmlRootElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8810116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com