WebParam 不允许使用 XmlElement 注释
Posted
技术标签:
【中文标题】WebParam 不允许使用 XmlElement 注释【英文标题】:XmlElement annotation dissallowed with WebParam 【发布时间】:2012-01-02 22:17:30 【问题描述】:我在 web 服务中有一个方法,具有以下签名:
@WebResult(name="purchaseId") public int CreatePurchase(
@XmlElement(required=true)
@WebParam(name = "item") String item
...
在我看来(基于我发现的信息)这个应该工作。不幸的是,我在编译时收到以下错误消息:
The annotation @XmlElement is disallowed for this location
有人知道如何解决这个问题吗?
【问题讨论】:
您是否使用任何特定的 JAXB 实现,或者只是 Java EE 或 Web 容器提供的实现?参考实现真的不喜欢非 JAXB 注释妨碍它。 不是 100% 确定我理解这个问题(我对 Java EE 比较陌生),但项目构建路径中包含 Apache CFX 2.3.7,并且包含一些 jaxb JAR。跨度> This two 可能会有所帮助 谢谢,我已经通读了。不幸的是,我在那些线程中找不到任何可以帮助我解决问题的内容。 【参考方案1】:JAX-B 默认包含在 JDK 中。特定 JDK 附带的版本的更新频率几乎没有 JAX-B 本身那么频繁。 JDK (1.6) 附带的当前版本是 JAX-B 2.1.10(记录在 here)。
@XmlElement 仅允许用于从 JAX-B 2.2 开始的方法参数
当 Java 加载库时,它会先加载 JDK 附带的库,然后再加载类路径上的库。升级到 Java 7 可以解决您的问题。如果您无法升级到 Java 7,还有一个过程可以告诉 Java 您想使用更新的库。这些称为“认可”库,您必须将库放在同一个库中JDK 本身的文件夹结构。该过程描述为here。
【讨论】:
哇,非常感谢,解决了这个问题并提供了一个很好的信息。 我使用 Java 7 作为默认 JRE,但同样的错误也发生在我身上。你能帮我解决这个问题吗?【参考方案2】:当您收到以下错误消息:“该位置不允许使用 @XmlElement 注释”时,可能是您使用了错误的导入语句。
改成:
import javax.xml.bind.annotation.XmlElement;
由于 Eclipse 建议将另一个包作为第一个选项,这是一个非常常见的错误。
【讨论】:
以上是关于WebParam 不允许使用 XmlElement 注释的主要内容,如果未能解决你的问题,请参考以下文章
将 Jersey/Jackson 配置为不使用 @XmlElement 字段注释进行 JSON 字段命名
WebLogic在SpringBoot CXF应用程序中使用@WebParam部署异常