站内搜索: 请输入搜索关键词

当前页面: JAVA 编程资料牛鼻论坛Java & J2SE 技术区→浅谈Java中通信机制及与C/C API的集成(下)

浅谈Java中通信机制及与C/C API的集成(下)

发表新主题   回复此主题

第1楼 2008-01-19 05:01 浮云之子 写道:

浅谈Java中通信机制及与C/C API的集成(下)

  【IT168 技术文档】

  接着上次的话题,今天我们聊聊gSOAP这个框架,我们把用C写的旧有系统用gSOAP改造一下,通过SOA的形式发布出去。

  上文提到,利用gSOAP可以做到以下3点:

  1 一个Stand-alone的服务器外壳

  2 一个根据API程序自动生成的Web Services服务

  3 一个WSDL描述符文件

  客户根据 WSDL 描述文档,会生成一个 SOAP 请求消息。Web Services 都是放在Web服务器后面,客户生成的SOAP请求会被嵌入在一个HTTP POST请求中,发送到 Web 服务器来。Web 服务器再把这些请求转发给 Web Services 请求处理器。请求处理器的作用在于,解析收到的 SOAP 请求,调用 Web Services,然后再生成相应的 SOAP 应答。Web 服务器得到 SOAP 应答后,会再通过 HTTP应答的方式把信息送回到客户端。

  WSDL是Web服务中客户端和服务端沟通的桥梁,描述了对象提供的方法。SOAP帮我们制定了一份被官方认可的对象的封装方法。有了WSDL,客户端只关心如何把参数用Soap封装起来发出去,并获取结果。服务端只关心如何对Soap进行拆包->服务->封包。gSOAP可以帮我们实现上述过程中的拆包和封包,而我们可以只关心服务的实现。

  言归正传,在这里我们以一个简单的实现加、减、开放的Web Services的服务为例子,介绍gSOAP的使用:

  为了发布这个Web服务,首先我们需要把服务的接口定义好,这个服务可能是一个现有服务的Adapter,为此我们定义头文件

  calc.h:

  typedef double xsd__double;

  int ns__add(xsd__double a, xsd__double b, xsd__double &result);

  int ns__sub(xsd__double a, xsd__double b, xsd__double &result);

  int ns__sqrt(xsd__double a, xsd__double &result);

  注意到这里面我们把double定义成了xsd__double(两个下划线),这是为了告诉gSOAP,我们需要的soap格式和WSDL格式是基于Document/literal的而非rpc/encoded.为了不把事情搞复杂,在这里我只能说,Java1.6自带的Web Services工具只支持Document/literal格式的WSDL,所以我们生成这种格式的WSDL。至于这两种格式之间选择和他们的long story,大家可以参考下面的文章:

  http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/

  编写好头文件后,我们就可以利用gSOAP提供的工具进行生成了:

  /usr/lib/gsoap-2.7/bin/soapcpp2 -S -2 calc.h

  生成的主要文件详见附件。

  下面我们实现calc.h中定义的函数:


第2楼 2013-08-31 12:44 Robot :

浅谈Java中通信机制及与C/C API的集成(下) 相关


发表新主题   回复此主题