學習地址: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
正常完成