Web服务SOAP集成

时间:2015-08-31 20:23:34

标签: java web-services soap axis2

我有点困惑。我有一个WS,它具有与我过去看到的另一个WS不同的“消息格式”。

供应商向我提供了一组他们可以加入的消息(我已经在SoapUI中进行了测试,它确实有效 - 好吧)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:urn="urn:SAMPLE">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:CustomEnvelope>

问题是,在使用CustomEnvelope的地方我会期待任何方法名称(类似urn:calculateSum)。

当我尝试使用Axis2生成java客户端时,与使用ADB数据绑定方法的情况相比,我得到了无法编译的代码。当我使用另一个时,我在我的Stub对象上只有一个名为(例如)calculateSum的方法,并且生成的消息与预期的模式(而不是CustomEnvelope)不对应使用了{{ 1}}。

我的问题是。你知道这种奇怪的格式是什么意思吗?你有什么建议如何整合这样奇怪的WS?我考虑使用JAXB创建整个XML(供应商提供了XSD文件)并使用标准Java API发送到WS或创建SOAPMessages。但我不确定什么是最好的溶剂。

谢谢,Ondrej

1 个答案:

答案 0 :(得分:1)

我在Axis 2客户端存根生成期间遇到了这个问题,它为您提供了无法编译的代码。错误发生在ADBDataSource类。

如果这是你的问题,那么这就是解决方案。我在项目中做了什么,我们使用WebSphere作为Web应用程序服务器,它在项目的类路径中包含一个jar文件(Something)ThinClient.jar。 现在这个jar也包含了一个名为ADBDataSource的类,但它是一个抽象类。这与我们的存根冲突,因为它创建了ADBDataSource的对象。

我建议你试着找出你有没有这样的罐子。

解决方案

从类路径中移除(Something)ThinClient.jar或具有相同类别的人。

如果删除(Something)ThinClient.jar会产生问题,那么改变方法并使用Jax-W而不是Axis 2,这是Java自己的一部分。 (这就是我所做的。)