【发布时间】:2012-03-01 15:15:03
【问题描述】:
问题陈述: 目前,有两个要求,即在 SOAP 故障中正确填充“”元素,以及尽可能接近 SOAP 请求和 SOAP 响应之间的匹配,以便从 Axis Web 服务迁移前和后迁移的 CXF Web 服务。
针对上述第一个需求,我们探索了以下选项:
- 我们为 CXF 配置了自定义拦截器类,它将根据需要处理 SOAP 错误。我们还修改了服务实现中的方法,使得“元素的内容可以直接在Java代码中设置。但是,我们遇到了与 JAXB 上下文相关的问题,无法将 Java 异常正确解组到 SOAP 错误中
- 我们创建了两个新类,一个是作为简单 Java bean 的异常的实际容器,另一个是扩展 Java 异常类的包装器。我们在服务实现中使用了异常包装类,以允许将应用程序异常转换为 SOAP 故障。但是,我们遇到了 JAXB 上下文不知道这些类的问题
- 我们尝试使用 wsdl2java 工具为 JAX-WS 和 JAXB 生成各种工件 - 我们引入了更改以在可用的(即来自 Axis / WebLogic 的遗留)WSDL 中指定 XSD 片段中的 SOAP 故障,并使用JAXB 工件,尤其是处理 JAXB 上下文的 ObjectFactory 和 DamageCatalogElementArray 类。发布这个,我们遇到了各种 XML 类型的错误,即它们所引用的相应类在指定的命名空间中是未定义的
- 我们使各种类中使用的命名空间(QName 实例)保持一致,并使用另一个类 package-info 来指定与包结构的架构映射。此时,我们收到错误,即特定类的数组的集合中的模式冲突,服务实现方法中的 DamageCatalogElement,与类 DamageCatalogElementArray 相关的 catalogDamage()。这是因为该方法在服务实现中的返回类型是一个类型为 DamageCatalogElement 的数组,而当我们在 ObjectFactory 中返回 JAXBElement 实例时,我们必须使用类 DamageCatalogElementArray
我们正在使用 CXF 2.4.2、JDK1.6、JBoss AS 4.2。 任何帮助或指点将不胜感激!
【问题讨论】: