webService开发的问题一览:
前提:本人采用xfile框架进行开发,xfile相比axis来说,xfile更方便支持复杂类型,xfile能支持List、map以及用户自定义的类型。
问题1:在发布的服务器类我只提供了一个带有参数(参数类型是自己定义的一种类型)的构造方法,结果在客户端调用webService时报错:
Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Couldn't instantiate service object.
解答:A.在服务器端中要进行webService接口发布的类,如果提供一个带了形参的构造函数,就报上面的错误。这是因为java的规定:
一个类在实例化时,如果没有构造函数,那么就执行其父类的构造函数,如果自己定义了构造函数,则就执行自己的构造函数。
正是因为如此,一个发布的类提供了带参数的构造函数,而在webService的客户端实例化该类的时候没有提供该构造函数所需的
实参,所以就不能实例化,报异常。
B.如果该类中要发布的接口方法使用了类初始化时初始化的数据,那么必须提供一个无参的构造方法。不然就报空指针异常。
问题2:对于返回类型用到了List、map、自定义的类型时,部署解析的xml问题?
解答:对于发布接口的方法中的参数涉及到List、Map或自定义的类时,必须提供一个解析的xml,告诉服务器你接口方法的参数是什么类型。
该xml文件的命名及xml文件的放置位置都有规定。
xml文件命名:<发布的类名>.aegis.xml
xml文件放置的位置:和发布的类在同一个文件目录下面
xml文件的格式:
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
<mapping >
<method name="getAllUsers(发布的接口方法名)">
<return-type componentType="com.example.webservice.servicepackage.User(自定义的类)"/>
</method>
</mapping>
</mappings>
com.example.webservice.servicepackage.User(自定义的类)参见如下:
package com.example.webservice.servicepackage;
public class User {
private String userId;
private String password;
private String userName;
/**
* @return the userId
*/
public String getUserId() {
return userId;
}
/**
* @param userId the userId to set
*/
public void setUserId(String userId) {
this.userId = userId;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return the userName
*/
public String getUserName() {
return userName;
}
/**
* @param userName the userName to set
*/
public void setUserName(String userName) {
this.userName = userName;
}
}
问题3:客户端如何取得webservice方法返回的List<自定义类型>的值?
解答:详见如下代码,可以看得更加清楚。
try {
/** 如果返回值为List,webService在生成客户端代码时,会生成一个包含了List的类,如:ArrayOfUser
* ArrayOfUser就是一个包含List<User>的类,且你调用服务器方法 【public List getAllUsers(String fromIndex,String endIndex)】
* 时,得到的并不是一个List,webService都要封装一层,得到的是webService定义的ArrayOfUser。
**/
ArrayOfUser users = service.getAllUsers("1", "5"); //取得list返回值
System.err.println("users="+users.getUser().size());
for (int i = 0; i < users.user.size(); i++) {
User user = (User) users.user.get(i);
System.err.print(user.getUserId().getValue()); //取自定义的类,还必须getValue()才能取得真正的值。webService封装了一层(正如上面所讲的那样)
System.err.print(user.getPassword().getValue());
System.err.println(user.getUserName().getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
问题4:在真正发布webService的接口时,尽量不要使用这种复杂数据类型,而是采用符合xml文档规则的字符串。这是为什么呢?
解答:因为服务器端修改已经发布的接口及xml文档,服务器端和客户端都要重新生成,这对于项目开发来说无疑是不允许的。所以发布接口时,就应该把接口的入参和返回类型
都定义好,最好都是采用符合xml规则的字符串。所以以后不管接口业务发生什么变化,只要服务器和客户端统一xml的内容规则就行,接口
方法不需要变化,因此增强了代码的健壮性。
分享到:
相关推荐
一、新建一个Web项目 二、Web发布 三、IIS设定 四、新建一个控制台项目 五、添加Web Service引用 六、调试应用
你想要了解webservice么,那么就下载它吧,通过学习它,你就可以了解webservice的整个过程,但是需要vs2010的支持。是系统分析师考试的一个考试要点。
NULL 博文链接:https://lsz1023-126-com.iteye.com/blog/2048234
做开发时,查了大量资料,发现一比较全面的资料,分享一下!...WebService CXF学习——高级篇(一)(二) 1.整合Spring框架 2.CXF+Spring+Hibernate 3.WS-Security WebService CXF学习——JAXB剖析
SAP与其他外围系统交互使用的一种通讯方式,具体讲述了WSDL文件的发布与在SAP中的部署,以及接口的测试和配置方式
最近学习的是在android端如何去调用远程WebService,都说WebService是一种基于SOAP协议的远程调用标准,对于这个协议理解不深,知道webservice可以将不同操作系统平台、不同语言、不同技术整合到一块,android SDK...
NULL 博文链接:https://chilongxph.iteye.com/blog/516018
WebService是一个新概念,它的系统架构、实现技术是现有应用的面向Internet的一个延伸。Web是为了程序到用户的交互,而Web Service是为程序到程序的交互作准备,Web Service已成为IT产业近几年来探索的热点课题之一...
NULL 博文链接:https://1197581932.iteye.com/blog/2400218
学习CXF WebService入门实例一.pdf学习CXF WebService入门实例一.pdf
一个简单的webservice asp.net 的例子 新手学习webservice 的教材
webService视频教程,包括源码等一系列全套资源,需要学习的多多交流
在WebService使用Md5和SHA1加密技术对用户密码进行加密处理,从而增加用户安全性。登陆判断同样通过Md5和SHA1加密密码然后和数据库经过加密密码进行比较来(它们可都是二进制滴哦!)验证用户是否存在 很好滴东西 ...
今天特意将项目中用Axis2集成SSH实现WebService的过程记录下来,一方面做一下笔记,另一方面,方便广大码农朋友,希望能跟大家交流学习。 本文介绍用Axis2集成SSH搭建WebService。会达到的效果: 1.按照传统我们用...
webservice远程调用,返回String数据并生成xml文件到本地工程,在通过SAX解析器把数据解析出来。这是webservice应用的一个简单的例子。根据该例子的思想,可以实现很多功能了。...我们可以学习其中的一种就可以了
微软课程的WebService课件,用于教学与学习,是一到十一章的内容.
Web Service提供一份详细的接口说明书,来帮助用户构建应用程序,这个接口说明书叫作WSDL(Web Service Description Language)。 通常已发布的Web Service要注册到管理服务器,这样便于使用者查询和使用。这个是...
WebService学习,java端通过Axis2,Cxf发布WebService的应用
springboot整合CXF发布webservice和客户端调用 项目中每个类都有详细的注释,保证都能看懂,不失为一个学习springboot整合cxf来学习webservice发布调用的好例子
一个学习java-webservice不错的例子,服务端接口、客户端都有