怎么在wsdl中使用java中的类?

J2EE 码拜 7年前 (2015-11-12) 891次浏览
最近要使用webservice做项目,学习了一下,但是在计划重构现在的项目时,遇到了一个问题。例如说,本人有一个方法来执行数据库的查询,这个方法返回的是一个ResultSet,就ResultSet这种类型在wsdl中该怎么定义呢?

/*
* 通过执行sql语句来进行查询
* @param sql 查询语句,形式为"select * from userinformation where username = \""张三\"""
*
* @return ResultSet 查询的结果
*/
public ResultSet queryData (String sql) {
	//这里省略了具体的执行代码
	return ResultSet;
}

本人猜测是定义不了的,原因是wsdl是与语言与平台无关的。
本人想出另一个解决方案是,在服务器端就对这个ResultSet进行处理。但是这样又会有一个问题,例如说,本人想用上面的那个方法统一进行对数据库的查询操作,为了解决wsdl中没有ResultSet这种数据类型的问题,那本人就在服务器端对ResultSet进行处理,让上面的那个方法返回的是String的数组,这样就能使用wsdl了。可是,随着用户具体的查询操作的不同,返回的ResultSet中包含的数据也可能是不一致的。比方说,执行”select * from userinformation where username=\””张三\”””时,原因是这个表中有四列,那么上面的方法会返回一个String[4]的数组,而假如通过上面的方法执行”select * from projectinformation where projectname = \””时间管理器\”””,原因是projectinformation表中有两列,所以上面的方法会返回一个String[2]的数组。这样肯定是不行的,原因是wsdl中的<wsdl:message>中这个方法的返回的message中,我们只能有一种类型。
那本人应该怎么样根据用户输入的查询语句的不同,通过执行同一个方法,并且用wsdl返回给用户对应的数据?
假如根据用户输入的查询语句的不同,都生成一个不同的方法,那么太繁琐,并且也不能达到多态的目的。
请大神指点。

解决方案:10分
最终还是字符串数组集合这样的比较方便。
解决方案:10分
解决方案:20分
webService应该可以传递自定义类的,wsdl应该是webservice自动生成的,客户端部署的时候,可以自动生成自定义类。
–本人也是刚开始学,只用过JAX-WS,反正JAX-WS在JAVA服务端和客户端之间是可以直接传递自定义类的,其他webservice技术以及其他语言没试过,不过本人觉得应该都是可以传递自定义类的,假如都要手动拼字符串,应该不能叫跨平台了吧。
解决方案:30分
直接使用非常不好 主要是把内部数据全部展现过外部系统
定义一个接口对象,把内部数据转换一下,屏蔽掉敏感数据,完成接口。不要图省事
解决方案:30分
首先,对象(包括数组)和字符串是可以互相转换的,做得正规点叫序列化,本人手工做就是拼字符串,然后通过web service传字符串。
举例:
Class Ppl
{
String id = “”;
String name = “”;
String age =””;
}
实例化时对象{“001″,”王伟”,”30″}
拼成字符串001#王伟#30,然后传到网络另一头,用#分割解析。
假如你是多个对象的集合(数组),那么可以001#王伟#30*002#张三#33这样的形式。
这个方法有一个小缺点,就是分隔符是不能传的,最好用一些比较复杂的分隔符,例如&^这种。
当然,也可以拼成JSON字符串传输,这样传输量大一些,但是没有分隔符的问题。
然后,你想把ResultSet作为WSDL的参数,这个在层级上是有问题的,ResultSet是JDBC层的对象,合适的做法是应该先把ResultSet转成ArrayList对象(即数组),再把这个数组拼成本人刚刚说的那种字符串或JSON字符串传输。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明怎么在wsdl中使用java中的类?
喜欢 (0)
[1034331897@qq.com]
分享 (0)