当前位置: 代码迷 >> Web前端 >> groovy编纂webservice服务端和客户端
  详细解决方案

groovy编纂webservice服务端和客户端

热度:444   发布时间:2012-07-03 13:37:43.0
groovy编写webservice服务端和客户端
个人总结,网上几乎没有此方面资料,有一篇帖子,按照其内容无法运行。
注意:请以帖子内容为准,附件为参考

环境:windows7+jdk1.6.0.31+groovy1.8.6

1. 安装jdk和groovy并配置环境变量,略。
2. 安装groovyws0.5.2
命令行>:grape install org.codehaus.groovy.modules groovyws 0.5.2

3. 编写服务(这里写2个例子,一个是算术、一个是格式化日期):
  1)算术服务
class MathService {
	double add(double arg0, double arg1) {
		return (arg0 + arg1)
	}
	double square(double arg0) {
		return (arg0 * arg0)
	}
}

  2)格式化日期服务
class DateFormatService{
	String format(long time){
		new Date(time).format('yyyy年MM月dd日')
	}
}


3. 编写服务启动groovy脚本
import groovyx.net.ws.WSServer
@Grab(group='org.codehaus.groovy.modules', module='groovyws', version='0.5.2')
def server = new WSServer()
server.setNode("DateFormatService", "http://10.14.3.149:6980/DateFormatService")
server.start()
def s1 = new WSServer()
s1.setNode("MathService", "http://10.14.3.149:6980/MathService")
s1.start()


4. 编写客户端测试groovy脚本
import groovyx.net.ws.WSClient

@Grab(group='org.codehaus.groovy.modules', module='groovyws', version='0.5.2')
def printDate(){
	def proxy = new WSClient("http://10.14.3.149:6980/DateFormatService?wsdl", this.class.classLoader)
	proxy.initialize()
	println "今天是${proxy.format(new Date().time)}"
}
printDate()



============= 华丽的分割线 =================
补充:编写连接数据库的服务并返回JSON格式数据

DataService.groovy
import groovy.sql.Sql
import groovy.json.JsonOutput

class DataService{
	String poses(){
		def db = Sql.newInstance("jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.14.3.148)(PORT = 1521)))(CONNECT_DATA =(SID = orcl)))","ecard","ecard","oracle.jdbc.driver.OracleDriver")
		def poses = db.rows("select * from OCS_DM_Terminal ")
		def retJson = new JsonOutput()
		return retJson.toJson(poses)
	}
}


并添加到服务启动的groovy脚本中:
import groovyx.net.ws.WSServer
@Grab(group='org.codehaus.groovy.modules', module='groovyws', version='0.5.2')
def server = new WSServer()
server.setNode("DateFormatService", "http://10.14.131.114:6980/DateFormatService")
server.start()
def s1 = new WSServer()
s1.setNode("MathService", "http://10.14.131.114:6980/MathService")
s1.start()
def s2 = new WSServer()
s2.setNode("DataService", "http://10.14.131.114:6980/DataService")
s2.start()


调用方法1:
import groovyx.net.ws.WSClient

@Grab(group='org.codehaus.groovy.modules', module='groovyws', version='0.5.2')
def test(){
	def url = "http://10.14.131.114:6980/DataService?WSDL"
	def proxy = new WSClient(url, this.class.classLoader)
	proxy.initialize()
	def ret = proxy.poses()
	println ret.toString()
}

test()


输出结果:
[{"ID":181,"SYS_CODE":"02","CLIENT_ID":null,"GROUP_ID":24,"MERC_NO":41,"TYPE":null,"KIND":6,"STATIONNO":2,"NAME":null,"STATIONNO_ID":null,"DESCRIPTION":
null,"BANK_ID":"10019999","SET_DATE":"2011-10-08T08:32:29+0000","FLAG":"0","BLACK_FLAG":0,"CANCEL_BLACK_FLAG":0,"BLACK_LIST_ID":0,"TERM_NAME":null,"MENU
_VERSION":"0","BATCHNO":"000000"},{"ID":161,"SYS_CODE":"04","CLIENT_ID":null,"GROUP_ID":205,"MERC_NO":1,"TYPE":null,"KIND":6,"STATIONNO":4,"NAME":null,"
STATIONNO_ID":null,"DESCRIPTION":null,"BANK_ID":"55555555","SET_DATE":"2011-09-17T03:38:33+0000","FLAG":"1","BLACK_FLAG":0,"CANCEL_BLACK_FLAG":0,"BLACK_
LIST_ID":0,"TERM_NAME":null,"MENU_VERSION":"0","BATCHNO":"000000"},{"ID":101,"SYS_CODE":"01","CLIENT_ID":205,"GROUP_ID":124,"MERC_NO":1,"TYPE":"11","KIN
D":7,"STATIONNO":1,"NAME":null,"STATIONNO_ID":null,"DESCRIPTION":null,"BANK_ID":"22019999","SET_DATE":"2011-09-26T08:40:24+0000","FLAG":"0","BLACK_FLAG"
:0,"CANCEL_BLACK_FLAG":0,"BLACK_LIST_ID":0,"TERM_NAME":null,"MENU_VERSION":"0520110916170215","BATCHNO":"000012"},{"ID":102,"SYS_CODE":"02","CLIENT_ID":
26,"GROUP_ID":24,"MERC_NO":41,"TYPE":"11","KIND":8,"STATIONNO":1,"NAME":null,"STATIONNO_ID":null,"DESCRIPTION":null,"BANK_ID":"11019999","SET_DATE":"201
1-09-16T05:37:24+0000","FLAG":"1","BLACK_FLAG":0,"CANCEL_BLACK_FLAG":0,"BLACK_LIST_ID":0,"TERM_NAME":null,"MENU_VERSION":"0520110906111247","BATCHNO":"0
00000"},{"ID":121,"SYS_CODE":"01","CLIENT_ID":null,"GROUP_ID":124,"MERC_NO":1,"TYPE":null,"KIND":6,"STATIONNO":2,"NAME":null,"STATIONNO_ID":null,"DESCRI
PTION":null,"BANK_ID":"33019999","SET_DATE":"2011-10-08T01:34:28+0000","FLAG":"0","BLACK_FLAG":0,"CANCEL_BLACK_FLAG":0,"BLACK_LIST_ID":0,"TERM_NAME":nul
l,"MENU_VERSION":"0520110916170215","BATCHNO":"000000"},{"ID":141,"SYS_CODE":"01","CLIENT_ID":null,"GROUP_ID":124,"MERC_NO":41,"TYPE":null,"KIND":9,"STA
TIONNO":3,"NAME":null,"STATIONNO_ID":null,"DESCRIPTION":null,"BANK_ID":"33333333","SET_DATE":"2011-10-10T08:19:57+0000","FLAG":"0","BLACK_FLAG":0,"CANCE
L_BLACK_FLAG":0,"BLACK_LIST_ID":0,"TERM_NAME":null,"MENU_VERSION":"0","BATCHNO":"000000"},{"ID":201,"SYS_CODE":"02","CLIENT_ID":325,"GROUP_ID":24,"MERC_
NO":41,"TYPE":"11","KIND":8,"STATIONNO":3,"NAME":"\u89E6\u6478\u5C4F","STATIONNO_ID":"3","DESCRIPTION":null,"BANK_ID":"10010001","SET_DATE":"2011-10-09T
09:35:50+0000","FLAG":"0","BLACK_FLAG":0,"CANCEL_BLACK_FLAG":0,"BLACK_LIST_ID":0,"TERM_NAME":null,"MENU_VERSION":"0","BATCHNO":"000000"}]


调用方法2:
import groovyx.net.ws.WSClient
import groovy.json.JsonSlurper

@Grab(group='org.codehaus.groovy.modules', module='groovyws', version='0.5.2')
def test(){
	def url = "http://10.14.131.114:6980/DataService?WSDL"
	def proxy = new WSClient(url, this.class.classLoader)
	proxy.initialize()
	def ret = proxy.poses()
	def slurper = new JsonSlurper()
	def states = slurper.parseText(ret)

	states.each{
		println it.NAME
	}
//	println ret
}

test()


输出结果:
null
null
null
null
null
null
触摸屏


调用方法3:
import groovyx.net.ws.WSClient
import groovy.json.JsonSlurper
import groovy.json.JsonOutput
import groovy.json.JsonBuilder

@Grab(group='org.codehaus.groovy.modules', module='groovyws', version='0.5.2')
def test(){
	def url = "http://10.14.131.114:6980/DataService?WSDL"
	def proxy = new WSClient(url, this.class.classLoader)
	proxy.initialize()
	def ret = proxy.poses()
	def slurper = new JsonSlurper()
	def states = slurper.parseText(ret)

	def x = new JsonBuilder (states)
	println x.toPrettyString()
	//println JsonOutput.prettyPrint(states.toString())

/*	states.each{
		println it.NAME
	}*/
//	println ret
}

test()


输出结果:
[
    {
        "GROUP_ID": 24,
        "TERM_NAME": null,
        "NAME": null,
        "DESCRIPTION": null,
        "CLIENT_ID": null,
        "STATIONNO": 2,
        "MENU_VERSION": "0",
        "BLACK_FLAG": 0,
        "MERC_NO": 41,
        "BATCHNO": "000000",
        "SET_DATE": "2011-10-08T08:32:29+0000",
        "ID": 181,
        "SYS_CODE": "02",
        "BANK_ID": "10019999",
        "BLACK_LIST_ID": 0,
        "STATIONNO_ID": null,
        "KIND": 6,
        "CANCEL_BLACK_FLAG": 0,
        "FLAG": "0",
        "TYPE": null
    },
    {
        "GROUP_ID": 205,
        "TERM_NAME": null,
        "NAME": null,
        "DESCRIPTION": null,
        "CLIENT_ID": null,
        "STATIONNO": 4,
        "MENU_VERSION": "0",
        "BLACK_FLAG": 0,
        "MERC_NO": 1,
        "BATCHNO": "000000",
        "SET_DATE": "2011-09-17T03:38:33+0000",
        "ID": 161,
        "SYS_CODE": "04",
        "BANK_ID": "55555555",
        "BLACK_LIST_ID": 0,
        "STATIONNO_ID": null,
        "KIND": 6,
        "CANCEL_BLACK_FLAG": 0,
        "FLAG": "1",
        "TYPE": null
    },
    {
        "GROUP_ID": 124,
        "TERM_NAME": null,
        "NAME": null,
        "DESCRIPTION": null,
        "CLIENT_ID": 205,
        "STATIONNO": 1,
        "MENU_VERSION": "0520110916170215",
        "BLACK_FLAG": 0,
        "MERC_NO": 1,
        "BATCHNO": "000012",
        "SET_DATE": "2011-09-26T08:40:24+0000",
        "ID": 101,
        "SYS_CODE": "01",
        "BANK_ID": "22019999",
        "BLACK_LIST_ID": 0,
        "STATIONNO_ID": null,
        "KIND": 7,
        "CANCEL_BLACK_FLAG": 0,
        "FLAG": "0",
        "TYPE": "11"
    },
    {
        "GROUP_ID": 24,
        "TERM_NAME": null,
        "NAME": null,
        "DESCRIPTION": null,
        "CLIENT_ID": 26,
        "STATIONNO": 1,
        "MENU_VERSION": "0520110906111247",
        "BLACK_FLAG": 0,
        "MERC_NO": 41,
        "BATCHNO": "000000",
        "SET_DATE": "2011-09-16T05:37:24+0000",
        "ID": 102,
        "SYS_CODE": "02",
        "BANK_ID": "11019999",
        "BLACK_LIST_ID": 0,
        "STATIONNO_ID": null,
        "KIND": 8,
        "CANCEL_BLACK_FLAG": 0,
        "FLAG": "1",
        "TYPE": "11"
    },
    {
        "GROUP_ID": 124,
        "TERM_NAME": null,
        "NAME": null,
        "DESCRIPTION": null,
        "CLIENT_ID": null,
        "STATIONNO": 2,
        "MENU_VERSION": "0520110916170215",
        "BLACK_FLAG": 0,
        "MERC_NO": 1,
        "BATCHNO": "000000",
        "SET_DATE": "2011-10-08T01:34:28+0000",
        "ID": 121,
        "SYS_CODE": "01",
        "BANK_ID": "33019999",
        "BLACK_LIST_ID": 0,
        "STATIONNO_ID": null,
        "KIND": 6,
        "CANCEL_BLACK_FLAG": 0,
        "FLAG": "0",
        "TYPE": null
    },
    {
        "GROUP_ID": 124,
        "TERM_NAME": null,
        "NAME": null,
        "DESCRIPTION": null,
        "CLIENT_ID": null,
        "STATIONNO": 3,
        "MENU_VERSION": "0",
        "BLACK_FLAG": 0,
        "MERC_NO": 41,
        "BATCHNO": "000000",
        "SET_DATE": "2011-10-10T08:19:57+0000",
        "ID": 141,
        "SYS_CODE": "01",
        "BANK_ID": "33333333",
        "BLACK_LIST_ID": 0,
        "STATIONNO_ID": null,
        "KIND": 9,
        "CANCEL_BLACK_FLAG": 0,
        "FLAG": "0",
        "TYPE": null
    },
    {
        "GROUP_ID": 24,
        "TERM_NAME": null,
        "NAME": "触摸屏",
        "DESCRIPTION": null,
        "CLIENT_ID": 325,
        "STATIONNO": 3,
        "MENU_VERSION": "0",
        "BLACK_FLAG": 0,
        "MERC_NO": 41,
        "BATCHNO": "000000",
        "SET_DATE": "2011-10-09T09:35:50+0000",
        "ID": 201,
        "SYS_CODE": "02",
        "BANK_ID": "10010001",
        "BLACK_LIST_ID": 0,
        "STATIONNO_ID": "3",
        "KIND": 8,
        "CANCEL_BLACK_FLAG": 0,
        "FLAG": "0",
        "TYPE": "11"
    }
]
  相关解决方案