为什么Web服务将所有请求和响应类型指定为字符串?

时间:2009-06-16 07:26:19

标签: java web-services wsdl

我正在使用遗留的Web服务,他们为我们提供了可以使用的WSDL。

现在我的问题是,每个函数指定相同的参数和返回类型。然后将此类型指定为 string

示例:

<definitions targetNamespace="java:the.custom.namespace" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="java:the.custom.namespace" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
 <types>
    <schema targetNamespace="java:the.custom.namespace" xmlns="http://www.w3.org/1999/XMLSchema" /> 
  </types>
  <message name="LegacySystemRequest">
    <part name="arg0" type="xsd:string" /> 
  </message>
  <message name="LegacySystemResponse">
    <part name="return" type="xsd:string" /> 
  </message>
  <portType name="LegacySystemPortType">
    <operation name="HelloWorld">
     <input message="tns:LegacySystemRequest" /> 
     <output message="tns:LegacySystemResponse" /> 
    </operation>
</types>

我不熟悉用Java创建webservices,但是他们可能做错了,因为他们没有暴露他们的DTO结构吗?我从例子中知道它们很复杂,所以我不想写它们全部硬编码到我的代码中。我有什么技术提示可以给他们吗?

3 个答案:

答案 0 :(得分:1)

当他们可以使用更复杂的类型时,通常有两个原因可以使用字符串:
1)创建SOAP服务器的人不太了解,并且缺乏使用更复杂类型的经验 2)调用此Web服务的某些应用程序无法处理比字符串更复杂的数据类型。

正如您所说,它是一项传统服务,因此创建它的人可能缺乏使用SOAP的经验来增加复杂性。考虑到SOAP标准在2003年是最终的,因此找到具有类似简单性的旧服务并不奇怪。那时候太新了。

这对于任何新技术来说并不罕见,因为许多人在完全了解它之前就开始使用它。一旦他们获得了经验,这项技术就会再次过时。

你可以向他们提供一些关于如何改进它的提示,但我猜他们知道他们的服务不是很好。他们可能没有足够的资源去改进它。或许他们已经在改进这项服务,但新服务可能仍处于测试阶段。

答案 1 :(得分:0)

不可能从这个WSDL中肯定地说,但我猜想网络服务只不过是任意数据的载体,并且可能被固定在遗留系统上。

字符串可以是任何东西,可能是XML本身,也可能是CSV数据,或类似的东西。当然不是WSDL设计的一个很好的例子。

你只需要调用它,看看你得到了什么......

此外,此WSDL看起来可能来自rpc编码的Web服务,该服务与需要文档编码的现代java WS堆栈不兼容。但是,较旧的堆栈(如Axis 1)支持它。

答案 2 :(得分:0)

SOAP模式确实提供了许多其他数据类型,因此没有技术上的理由让它们使用String - 尽管由于XML传输,所有参数都以字符串形式传输。

您的示例看起来他们并不打算创建复杂的数据类型来封装他们的参数,只是将其保留为“请求字符串”和“响应字符串”...

这真的取决于在这些字符串中发送的内容,天气与否,它可以更有说服力地表现出来。对我来说,这种情况通常来自于懒惰。

Java有一套非常好的工具可用于自动生成模式以将类映射到SOAP类型。我只是通过我的IDE访问它们所以我不熟悉手动操作,但如果你谷歌wsimport,你应该找到一些东西。