所以,我的问题是:
- 除了CXF,还有比CXF更好的方法让Java商店使用WCF服务吗?Project Tango看起来很有趣,但我不知道足够的信息告诉他们考虑使用它。CXF是否是Java的事实标准?
- BasicHttpBinding / SSL / Basic Auth是MS推荐的互操作场景,但客户端仍然存在互操作问题。我们应该考虑其他绑定或设置,以使其更容易使用吗?
- 是否有一种方法可以配置WCF始终输出没有模式导入的单个WDSL?
我深入研究Java和WCF互操作性。正如其他人所说,如果您正在使用基于文件的WSDL,则需要扁平化您的WSDL。但是,我使用的是Netbeans 6.5,如果您指向一个真实的URL,例如http://myservice/?wsdl,Netbeans可以轻松处理WCF生成的默认WSDL。
在现实生活中,您需要考虑的其他事情包括服务版本控制、可选数据成员(在Java中不太好用,因此建议将所有数据成员IsRequired=true)、顺序等。
真正困难的是安全性。我必须使双向证书身份验证工作,并且它仍然存在一些问题。
这是一个Jaxb问题。我遇到了同样的问题,但在wsdl2java客户端生成中使用了xmlbeans选项。老实说,就消费者而言,我似乎更喜欢xmlbeans对象而不是jaxb对象。
你的Java客户端与WCF组件通信的唯一方式将是使用HTTP方法之一 - basicHttpBinding,ws*等,就像微软建议的那样。Java无法通过TCP或namedPipes或MSMQ等协议与WCF通信。
我建议从一个超级简单的WCF组件开始 - 一个只有一个方法并输出字符串的组件。确保它能够与Java通信,然后逐步增加功能。确保你暴露的所有内容都是使用基本类型或定义良好的[DataContract]对象工作的。
我已经使用Axis2客户端开发了WCF。我成功使用的身份验证方法是BasicHttpBinding/SSL/Basic(传输)和带有用户名的WS-Security(以及MTOM)。
SUN和Microsoft使用Metro实现来测试互操作性: http://weblogs.java.net/blog/haroldcarr/archive/2007/11/metro_web_servi.html
很抱歉,我不清楚WCF为模式定义生成的导入。
xsd:import的问题非常常见。一些工具包或者运行时环境无法处理它。为了解决这个问题,你可以压缩WCF生成的WSDL文件。 请参阅this post。
关于CXF是否是正确的Java堆栈 - 我从未听说过?我成功地使用了AXIS和JAX-WS,两者都相当简单明了。