公开WCF服务以便从Java/CXF轻松使用它的最佳方法是什么?

Dan*_*iel 8 java wcf cxf

我们编写了一个WCF服务供Java商店使用,他正在使用CXF生成适配器.我们不熟悉Java,但使用basicHttpBinding,SSL和基本身份验证公开了服务.集成测试表明.NET客户端可以正常使用该服务.但是,Java商店在使用该服务时遇到了麻烦.具体来说,它们得到以下JAXB错误:两个声明导致ObjectFactory类中的冲突.当CXF尝试创建适配器类时,如果2个操作具有相同的名称和命名空间,则通常会导致这种情况.

我们找不到任何应该导致任何类型冲突的类型或操作名称.我们已确保所有自定义类型都指定了命名空间,并且未在WSDL中的任何位置指定tempuri.org.Java商店怀疑错误是因为生成的WSDL包含<xsd:import元素.

所以,我的问题:

  • 有没有比CXF更好的方法让Java商店使用WCF服务?Project Tango看起来很有趣,但我不知道告诉他们考虑使用它.CXF是Java中的事实标准吗?
  • 对于互操作方案,建议使用BasicHttpBinding/SSL/Basic Auth,但客户端似乎仍然存在互操作问题.我们是否应该考虑其他绑定或设置以使其更容易使用?
  • 有没有办法将WCF配置为始终输出没有模式导入的单个WDSL?

Dan*_*ulp 4

“两个声明导致 ObjectFactory 类中发生冲突”错误消息通常与导入无关。这是一条 JAXB 错误消息,通常是由于多个元素或类似元素导致生成的字段名称相同而导致的。例如,如果您有以下元素:

<element name="Foo" .../> 和 <element name="foo" .../>

这可能会导致该错误。另一种是使用连字符和下划线等通常被消除+限制的东西: <element name="doFoo" .../> 和 <element name="do_foo" .../>

在 2.1.4 中,您可以尝试使用 -autoNameResolution 标志运行 wsdl2java。这有时会有所帮助,但并非总是如此。不幸的是,JAXB 在这些情况下提供的信息几乎毫无价值,而且很多时候只是通过反复试验来找到冲突的类型。:-(