【WebService学习过程记录(五)】复杂对象的加入

来源:互联网 发布:阿里云os 6.0 破解 编辑:程序博客网 时间:2024/05/16 09:08

学习地址:http://blog.csdn.net/alex197963/article/details/4366867

学习目标:使用javabean作为参数或返回值的使用方式

学习重点:在之前学习的基础上,学会使用.aegis.xml文件

学习项目记录

1、按照 XFire开发Web Service---HelloWord   建立可以发布的web service项目,这里不做多余表述

2、文件夹目录如下

注意:需要一个xml文件来指定所需要的类型。这个文件的路径应该和接口的class文件在同一个包当中,并且它的名字应该是接口.aegis.xml

3、文件内容如下

IHelloS接口

package com.cn.rwq.test.jiekou;import com.cn.rwq.javabean.Person;public interface IHelloS {/** * 最简单的方法 */    String sayHello(String name);    /**     * 根据传入的参数构建一个Person     */    Person creatPerson(String name,int age,boolean sex);    /**     * 将传入的Person转化成一个新的Person      */    Person changePerson(Person person);}

 HelloService 实现

package com.cn.rwq.test.service;import com.cn.rwq.javabean.Person;import com.cn.rwq.test.jiekou.IHelloS;public class HelloService implements IHelloS{      public String sayHello(String name){          return name+",你好!";      }      public Person creatPerson(String name,int age,boolean sex){        Person user = new Person();        user.setName(name);        user.setAge(age);        user.setSex(sex);        return user;    }    public Person changePerson(Person person){        Person user = new Person();        user.setName(person.getName()+",hello");        user.setAge(person.getAge()+2);        user.setSex(!person.isSex());        return user;    }}  
Person实体类

package com.cn.rwq.javabean;public class Person {private String name;private int age;private boolean sex;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public boolean isSex() {return sex;}public void setSex(boolean sex) {this.sex = sex;}}
IHelloS.aegis.xml
<?xml version="1.0" encoding="UTF-8"?>      <mappings>          <mapping>              <method name="creatPerson">                   <parameter index="1" class="int" />                  <parameter index="2" class="boolean" />                  <return-type componentType="com.cn.rwq.javabean.Person" />              </method>              <method name="changePerson">                  <parameter index="0" componentType="com.cn.rwq.javabean.Person" />                  <return-type componentType="com.cn.rwq.javabean.Person" />              </method>          </mapping>     </mappings>  
services.xml

注意:namespace是建立客户端时代码生成的包名,倒序

<!-- START SNIPPET: services -->  <beans xmlns="http://xfire.codehaus.org/config/1.0">    <service>      <name>HelloService</name>        <namespace>http://jiekou.test.rwq.com.cn/IHelloS</namespace>        <serviceClass>com.cn.rwq.test.jiekou.IHelloS</serviceClass>         <implementationClass>com.cn.rwq.test.service.HelloService</implementationClass>  </service>  </beans>  <!-- END SNIPPET: services -->  
web.xml与之前相同,省略

4、发布,并测试正确

5、建立客户端,测试

按照xfire开发webservice客户端建立客户端

客户端测试代码

package cn.com.rwq.hellotest;import cn.com.rwq.test.jiekou.ihellos.HelloServiceClient;import cn.com.rwq.test.jiekou.ihellos.HelloServicePortType;import com.cn.rwq.javabean.Person;public class HelloTest {         /**           * 这个方法调用web服务并返回服务执行的结果         * @param yourName         * @return         */                public static void main(String[] args) {              HelloServiceClient service=new HelloServiceClient();              HelloServicePortType port=service.getHelloServiceHttpPort();              String MyName="zhangsan";              String name = port.sayHello(MyName);            System.out.println(name);                         Person person = port.creatPerson("张三", 10, false);            System.out.println("name="+person.getName().getValue()+" ; age="+person.getAge()+" ; sex="+person.isSex());            Person newPerson =port.changePerson(person);            System.out.println("name="+newPerson.getName().getValue()+" ; age="+newPerson.getAge()+" ; sex="+newPerson.isSex());        }  } 
注意:person.getName()无法直接得到name值需要使用person.getName().getValue()

问题解决学习地址:http://www.2cto.com/kf/201211/166568.html

6、正确运行结果

zhangsan,你好!
name=张三 ; age=10 ; sex=false
name=张三,hello ; age=12 ; sex=true


正常完成