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的内容规则就行,接口
方法不需要变化,因此增强了代码的健壮性。
分享到:
相关推荐
【WebService学习】 WebService是一种基于XML的互联网交互协议,它允许不同系统间的应用程序进行通信,消除了语言和平台的障碍。在C#中,通过使用ASP.NET技术,我们可以轻松创建和消费WebService。以下是一个初学者...
标题“webservice学习”表明我们将探讨WebService的基本概念、重要性以及如何在Java环境中进行开发。这里涉及的知识点主要包括: 1. **WSDL**:WSDL是一种XML格式的规范,用于定义Web服务接口。它描述了服务的位置...
【Eclipse下WebService学习】 在IT领域,WebService是一种基于开放标准的、允许不同系统之间进行交互的技术。在Eclipse这个流行的Java集成开发环境中,开发者可以方便地创建、部署和测试WebService。本文档主要介绍...
【WebService学习】 WebService是一种基于互联网的、松散耦合的分布式计算模型,它允许不同的系统之间进行数据交换和业务交互。这项技术的核心是利用XML(可扩展标记语言)作为数据交换的标准格式,SOAP(简单对象...
Web Service是互联网上的一种应用程序接口,它允许不同的系统之间交换数据和服务,从而实现跨平台的互操作性。Web Service的核心技术包括SOAP(Simple Object Access Protocol)、WSDL(Web Services Description ...
【Eclipse下WebService学习】 在IT行业中,Web Service是一种基于开放标准(如XML、WSDL和SOAP)的互操作技术,允许不同系统间的应用程序通过网络进行通信。它提供了一种松散耦合的方式,使得软件组件可以跨越各种...
1. Apache Axis2:Axis2是Apache基金会的一个开源项目,提供了一套完整的Web Service开发工具,支持SOAP和RESTful风格的服务。 2. JAX-WS:Java API for XML Web Services,是Java平台上的Web Service标准,用于...
Webservice是一种基于互联网的、平台无关的通信协议,允许不同系统之间进行数据交换。在C#环境下,开发Webservice主要依赖于.NET Framework提供的ASMX(ASP.NET Web Services)或者WCF(Windows Communication ...
【WebService学习笔记】 WebService是一种基于互联网的、标准化的、跨平台的、跨语言的通信机制,使得不同系统间的应用程序可以互相交互数据和服务。它的核心理念是服务导向架构(SOA),即通过服务的方式实现应用...
- 发布Web Service需要定义Service Endpoint Interface (SEI),使用`@WebService`和`@WebMethod`注解,然后通过`Endpoint.publish(url, SEIImplObject)`发布服务。 - 请求Web Service时,通常先根据WSDL文档生成...
1. `@WebService`:这是JAX-WS中定义的一个注解,用于标记一个类作为Web服务的接口。它需要指定服务名称和服务端点接口(SEI,Service Endpoint Interface)。 ```java @WebService(name = "MyWebService", ...
在本篇WebService学习笔记中,我们将探讨几个关键的概念和技术,包括SOAP协议、JAX-WS、WSDL文档以及一些常用的Web服务框架。 首先,SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于在分布式环境...
【WebService学习之路三】 在IT领域,WebService是一种用于构建分布式应用程序的技术,它允许不同系统间的交互,不受平台或编程语言的限制。本篇主要聚焦于WebService的学习,通过深入理解其原理和实践,来提升我们...
【WebService学习之路四】 在IT领域,WebService是一种基于标准协议(如SOAP、WSDL和UDDI)的开放式网络服务,允许不同系统间的应用程序通过互联网进行通信。本篇将深入探讨WebService的学习路径,重点关注其核心...
【WebService学习笔记0001】 在IT领域,WebService是一种基于开放标准(如XML、SOAP、WSDL和UDDI)的互操作性技术,它允许不同系统间的应用程序通过网络进行通信。本学习笔记将围绕WebService的核心概念、工作原理...
总的来说,这份“webService学习资料”提供了从基础到进阶的全面学习资源,包括了Web服务的核心技术和实际应用,对于想要深入理解和开发Web服务的IT专业人士来说是一份宝贵的资料。通过下载并研究这些内容,学习者...