`
colorfish
  • 浏览: 26410 次
  • 性别: 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产业近几年来探索的热点课题之一...

    Jersey RESTful WebService框架学习(一)

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

    学习CXF WebService入门实例一.pdf

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

    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要注册到管理服务器,这样便于使用者查询和使用。这个是...

    WebService简介

    WebService学习,java端通过Axis2,Cxf发布WebService的应用

    springboot整合CXF发布webservice和客户端调用

    springboot整合CXF发布webservice和客户端调用 项目中每个类都有详细的注释,保证都能看懂,不失为一个学习springboot整合cxf来学习webservice发布调用的好例子

    ava-webservice例子

    一个学习java-webservice不错的例子,服务端接口、客户端都有

Global site tag (gtag.js) - Google Analytics