web-services - 如何同时指定 jaxws 和 jaxb 绑定(bind)以实现@XmlRootElement

标签 web-services jaxb wsdl jax-ws cxf

我继承了一个与基于 SOAP 的 Web 服务通信的项目。我在这方面完全是个菜鸟,虽然我已经做了很多年 Java 并且在 XML 方面做得很好。 .

我们有一个 WSDL服务的文件,其中包含顶部的架构和下面的所有消息定义内容。问题的核心是,当我尝试通过我们的代码连接到服务时,我得到了可怕的无法编码类型“https.api_blah_com.services.v4.Product”作为元素,因为它缺少 @XmlRootElement。注解]

我的项目已经有一个 jaxws 绑定(bind)文件:

<jaxws:bindings wsdlLocation="../resources/wsdl/BlahAPI.wsdl"
  xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
  xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
  <jaxws:bindings  
    node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='https:api.blah.com/services/v4']">
    <jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xjc:generateElementProperty>true</xjc:generateElementProperty>
    </jxb:globalBindings>`
  </jaxws:bindings>
</jaxws:bindings>

现在我已经阅读了这篇文章,以便让我的所有 Java 类都使用 @XmlRootElement 生成。 ,我需要添加一个jaxb:globalBinding开启简单模式。

我尝试将 WSDL 添加到我的本地副本中。这:
<xs:annotation>
  <xs:appinfo>
    <jaxb:globalBindings>
      <xjc:simple />
    </jaxb:globalBindings>
  </xs:appinfo>
</xs:annotation>

但是 JAXB编译器提示它不能接受这个 globalBindings 自定义,因为它附加到错误的位置或与其他绑定(bind)不一致。

所以我尝试为 jaxb 添加另一个绑定(bind)文件,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings version="1.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
  xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
  xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <jaxb:bindings schemaLocation="../resources/wsdl/blah.wsdl">
    <jaxb:globalBindings>
      <xjc:simple />
    </jaxb:globalBindings>
  </jaxb:bindings>
</jaxb:bindings>

但后来我得到一个错误,blah.wsdl 不是这个编译的一部分。

我非常接近调用这项服务......我只是无法超越这一件事,这对我来说都是新的,所以我不确定还有什么可以尝试的。

我可以拆分他们的WSDL进入 XSDWSDL ?这是完成这项工作所必需的吗?

最佳答案

我认为您必须在此位置绑定(bind) xsd 文件而不是 wsdl。 <jaxb:bindings schemaLocation="../resources/wsdl/blah.wsdl"> .请引用 link 上的“外部绑定(bind)自定义文件”部分.

关于web-services - 如何同时指定 jaxws 和 jaxb 绑定(bind)以实现@XmlRootElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19597642/

相关文章:

java - 我如何让 XJC ant 任务使用多个绑定(bind)文件?

java - 如何通过WSDL获取方法的签名?

php - 看似随机的 SoapFault : not a valid method

java - 更改 JSON 格式

ios - 无法接收 GET 请求 ios 的最后一次重定向的 URL

c# - Javascript - jquery ajax 发布错误让我发疯

java - 文件重新加载后台线程与基于请求

java - SAXParseException XML-20221 文本中的无效字符

java - 使用 Decorator 进行 JBoss RESTeasy JAX-RS JAXB 模式验证

python - 泡沫抛出错误 'type not found' 使用 SOAP 服务