CXF - 集合中的架构名称冲突

时间:2012-03-01 15:15:04

标签: jaxb jax-ws cxf

问题陈述: 目前,有两个要求,即在SOAP Fault中具有正确填充的“”元素,并尽可能接近来自Axis Web Service的迁移前和迁移后的CXF Web服务的SOAP Request和SOAP Response之间的匹配。 / p>

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

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

1 个答案:

答案 0 :(得分:1)

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