`
colorfish
  • 浏览: 26477 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

webService学习一

阅读更多
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学习1.docx

    一、新建一个Web项目 二、Web发布 三、IIS设定 四、新建一个控制台项目 五、添加Web Service引用 六、调试应用

    webservice 学习的c#版本实例

    你想要了解webservice么,那么就下载它吧,通过学习它,你就可以了解webservice的整个过程,但是需要vs2010的支持。是系统分析师考试的一个考试要点。

    java注解webservice学习第一篇

    NULL 博文链接:https://lsz1023-126-com.iteye.com/blog/2048234

    WebService CXF学习文档

    做开发时,查了大量资料,发现一比较全面的资料,分享一下!...WebService CXF学习——高级篇(一)(二) 1.整合Spring框架 2.CXF+Spring+Hibernate 3.WS-Security WebService CXF学习——JAXB剖析

    webservice.学习笔记.docx

    SAP与其他外围系统交互使用的一种通讯方式,具体讲述了WSDL文件的发布与在SAP中的部署,以及接口的测试和配置方式

    Android调用WebService

    最近学习的是在android端如何去调用远程WebService,都说WebService是一种基于SOAP协议的远程调用标准,对于这个协议理解不深,知道webservice可以将不同操作系统平台、不同语言、不同技术整合到一块,android SDK...

    webservice学习之Axis2 (一)

    NULL 博文链接:https://chilongxph.iteye.com/blog/516018

    黑马程序员_WebService_webservice从入门到上手企业开发资料.

    WebService是一个新概念,它的系统架构、实现技术是现有应用的面向Internet的一个延伸。Web是为了程序到用户的交互,而Web Service是为程序到程序的交互作准备,Web Service已成为IT产业近几年来探索的热点课题之一...

    xfire调用webservice

    1. 学习曲线陡峭:xfire的学习曲线较陡峭,需要开发者有较强的Java编程基础和WebService开发经验。 2. 配置复杂:xfire的配置相对复杂,需要开发者有较强的配置和部署经验。 在本文中,我们讨论了xfire的基本概念、...

    Jersey RESTful WebService框架学习(一)

    NULL 博文链接:https://1197581932.iteye.com/blog/2400218

    用C#写的winform调用webservice天气预报小软件教程

    在本教程中,我们将学习如何使用C#语言在WinForm中调用WebService来实现一个天气预报小软件。这个小软件可以根据城市名称获取天气信息,并将其显示在WinForm窗体上。 C#语言基础 在开始学习本教程之前,需要具备...

    学习CXF WebService入门实例一.pdf

    学习CXF WebService入门实例一.pdf学习CXF WebService入门实例一.pdf

    java使用XFire调用webService接口

    在本文中,我们将学习如何使用 XFire 框架在 Java 中调用 webService 接口。XFIRE 是一个基于 Java 的开源框架,用于简化 Web 服务的开发和集成。下面,我们将通过一个简单的例子,展示如何使用 XFire 调用 ...

    webservice asp.net

    一个简单的webservice asp.net 的例子 新手学习webservice 的教材

    webService视频资源

    webService视频教程,包括源码等一系列全套资源,需要学习的多多交流

    WebService服务使用Md5和SHA1加密验证登陆

    在WebService使用Md5和SHA1加密技术对用户密码进行加密处理,从而增加用户安全性。登陆判断同样通过Md5和SHA1加密密码然后和数据库经过加密密码进行比较来(它们可都是二进制滴哦!)验证用户是否存在 很好滴东西 ...

    Axis2集成SSH搭建WebService支持事务(图文详解含核心代码)

    今天特意将项目中用Axis2集成SSH实现WebService的过程记录下来,一方面做一下笔记,另一方面,方便广大码农朋友,希望能跟大家交流学习。 本文介绍用Axis2集成SSH搭建WebService。会达到的效果: 1.按照传统我们用...

    webservice远程调用,返回数据生成xml文件,并通过SAX解析出来

    webservice远程调用,返回String数据并生成xml文件到本地工程,在通过SAX解析器把数据解析出来。这是webservice应用的一个简单的例子。根据该例子的思想,可以实现很多功能了。...我们可以学习其中的一种就可以了

    WebService课件

    微软课程的WebService课件,用于教学与学习,是一到十一章的内容.

    webservice 学习总结

     Web Service提供一份详细的接口说明书,来帮助用户构建应用程序,这个接口说明书叫作WSDL(Web Service Description Language)。 通常已发布的Web Service要注册到管理服务器,这样便于使用者查询和使用。这个是...

Global site tag (gtag.js) - Google Analytics