【问题标题】:CXF - Schema name conflict in collectionCXF - 集合中的模式名称冲突
【发布时间】:2012-03-01 15:15:03
【问题描述】:

问题陈述: 目前,有两个要求,即在 SOAP 故障中正确填充“”元素,以及尽可能接近 SOAP 请求和 SOAP 响应之间的匹配,以便从 Axis Web 服务迁移前和后迁移的 CXF Web 服务。

针对上述第一个需求,我们探索了以下选项:

  1. 我们为 CXF 配置了自定义拦截器类,它将根据需要处理 SOAP 错误。我们还修改了服务实现中的方法,使得“元素的内容可以直接在Java代码中设置。但是,我们遇到了与 JAXB 上下文相关的问题,无法将 Java 异常正确解组到 SOAP 错误中
  2. 我们创建了两个新类,一个是作为简单 Java bean 的异常的实际容器,另一个是扩展 Java 异常类的包装器。我们在服务实现中使用了异常包装类,以允许将应用程序异常转换为 SOAP 故障。但是,我们遇到了 JAXB 上下文不知道这些类的问题
  3. 我们尝试使用 wsdl2java 工具为 JAX-WS 和 JAXB 生成各种工件 - 我们引入了更改以在可用的(即来自 Axis / WebLogic 的遗留)WSDL 中指定 XSD 片段中的 SOAP 故障,并使用JAXB 工件,尤其是处理 JAXB 上下文的 ObjectFactory 和 DamageCatalogElementArray 类。发布这个,我们遇到了各种 XML 类型的错误,即它们所引用的相应类在指定的命名空间中是未定义的
  4. 我们使各种类中使用的命名空间(QName 实例)保持一致,并使用另一个类 package-info 来指定与包结构的架构映射。此时,我们收到错误,即特定类的数组的集合中的模式冲突,服务实现方法中的 DamageCatalogElement,与类 DamageCatalogElementArray 相关的 catalogDamage()。这是因为该方法在服务实现中的返回类型是一个类型为 DamageCatalogElement 的数组,而当我们在 ObjectFactory 中返回 JAXBElement 实例时,我们必须使用类 DamageCatalogElementArray

我们正在使用 CXF 2.4.2、JDK1.6、JBoss AS 4.2。 任何帮助或指点将不胜感激!

【问题讨论】:

    标签: jaxb jax-ws cxf


    【解决方案1】:

    最后我们解决了这个问题。 诀窍是,使用 CXF 工具 wsdl2java 通过提供 Axis 的 WSDL 并替换遗留代码中的 JAXB 相关类来生成类。 在这样做时,我们需要进行一些重构,但这很好。 我们放置生成的类的那一刻,一切正常。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-30
      • 2011-08-21
      • 2010-11-05
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      相关资源
      最近更新 更多