我们有两个不同的jax-ws @WebServices,它们具有不同的目标命名空间。但是,这两个服务都声明了一个具有相同名称但具有不同参数类型的@WebMethod(在两种情况下都是单个自定义java类)。我们将它们部署到websphere服务器并动态生成WSDL / XSD。
显然,我们最终得到两套WSDL / XSD,其中我们有不同的端口,所有内容都有不同的命名空间,但是相同的操作 name 和相同的请求/响应类型名称和元素名称(同样,命名空间也不同)。
当我们调用这些web服务时,其中一个工作,另一个无法解组消息,因为它神奇地期望来自第一个的请求类型,这在我们收到的例外中清楚地说明。
我能够在本地重现这个,只使用jaxb,问题似乎如下:SOAP消息如“soap:Body / ns1:request1”和“soap:Body / ns2:request1”在某种程度上与彼此冲突它们在同一个JAXBContext中被解组,并且最后一个jaxb注释类被引用。
WSDL规范没有说明这一点(因为端口不同),甚至互联网也根本不了解这一点,所以我想知道我们做的事情是否真的有问题。常识表明这一定是完全可能的。
这个问题非常类似于[未答复]帖子:http://www.coderanch.com/t/463070/Web-Services/java/method-classes-conflict。并且与[未回复的]帖子完全相同:Jaxb objects with same name(这个家伙并没有真正解释,为什么不推荐这种做事方式。)
问题的确如此:是否可以使用具有相同名称但不同参数的方法声明两个jax-ws服务,然后将它们部署在一个Web应用程序中?