Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
公开WCF服务以便从Java/CXF轻松使用它的最佳方式是什么?_Java_Wcf_Cxf - Fatal编程技术网

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

公开WCF服务以便从Java/CXF轻松使用它的最佳方式是什么?,java,wcf,cxf,Java,Wcf,Cxf,我们已经编写了一个WCF服务供Java商店使用,该商店正在使用CXF生成适配器。我们对Java不太熟悉,但已经使用basicHttpBinding、SSL和基本身份验证公开了该服务。集成测试表明.NET客户端可以很好地使用该服务。但是,Java商店在使用该服务时遇到了问题。具体地说,它们得到以下JAXB错误:两个声明导致ObjectFactory类中发生冲突。当CXF尝试创建适配器类时,如果两个操作具有相同的名称和命名空间,则通常会导致这种情况 我们找不到任何类型或操作名称会导致任何类型的冲突。

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


我们找不到任何类型或操作名称会导致任何类型的冲突。我们已经确保所有自定义类型都指定了一个名称空间,并且在WSDL中的任何地方都没有指定tempuri.org。Java商店怀疑错误是因为生成的WSDL包含您的Java客户机与WCF组件对话的唯一方式将是HTTP方法之一,如MS所建议的basicHttpBinding、ws*等。Java无法通过TCP、namedPipes或MSMQ等与WCF通信


我将从一个超级简单的WCF组件开始——它具有一个吐出字符串的方法。用Java实现这一点,然后逐步提高。确保您公开的所有内容都使用基本类型或定义良好的[DataContract]对象。

我已经使用Axis2客户端开发了WCF。我成功使用的身份验证方法是BasicHttpBinding/SSL/Basic(传输)和WS-Security with Username(和MTOM)

SUN和Microsoft使用Metro实现来测试互操作:

很抱歉,对于WCF为架构定义生成的导入没有任何线索。

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

这可能会导致错误。另一种方法是使用连字符和下划线等通常被删除并加上大写的字符: 和


在2.1.4中,您可以尝试使用-autonamesolution标志运行wsdl2java。这有时会有所帮助,但并不总是如此。不幸的是,JAXB在这些情况下提供的信息几乎一文不值,很多时候,找到冲突类型只是反复尝试-(

xsd:import的问题非常常见。某些工具包或运行时无法解决此问题。要解决此问题,您可以展平WCF生成的WSDL。 检查


关于CXF是否是正确的Java堆栈-我从未听说过它?我成功地使用了AXIS和JAX-WS。两者都非常简单。

我深入研究了Java和WCF的互操作性。正如其他人所说,如果您使用基于文件的WSDL,您需要展平您的WSDL。但是,我使用的是Netbeans 6.5,如果您指向一个真实的url,比如,Netbeans可以轻松处理WCF生成的默认wsdl。 在现实生活中,你需要考虑的其他事项是服务版本控制、可选数据文件(在java中不太好,所以我建议让所有数据文件都是必需的=真)、订单等。
真正困难的是安全性。我必须使相互证书身份验证正常工作,但它仍然存在一些问题。

这是Jaxb问题。我遇到了同样的问题,但在wsdl2java客户端生成中使用了xmlbeans选项。老实说,我似乎更喜欢xmlbeans对象而不是Jaxb对象,因为消费者不喜欢它他的Web服务。

根据记录,我的WCF服务中存在名为“OperationNameRequest”和“OperationNameResponse”的类型,这与java生成的同名类型冲突。java开发人员能够通过处理WSDL来修复。