首先,我们在eclipse中建立一个WebService工程作为服务端,并编写如下代码:
IHelloService.java 服务接口,有一个方法,参数和返回值均为复杂类型User

package
test;



public
interface
IHelloService
...
{

public User getUser(User user);

}

User.java
注意,这个javabean里必须要有一个默认没有参数的构造方法,否则在进行aegis绑定会有不能实例化user对象的异常

package
test;


import
java.io.Serializable;



public
class
User
...
{

private String username;

private String password;


public User()...{


}


public User(String username, String password) ...{

super();

this.username = username;

this.password = password;

}


public String getpassword() ...{

return password;

}


public void setPassword(String password) ...{

this.password = password;

}


public String getUsername() ...{

return username;

}


public void setUsername(String username) ...{

this.username = username;

}

}

HelloServiceImpl.java
方法实现是传进来一个user对象,把这个对象的username,password变成我们设置的数值,然后返回这个对象

package
test;



public
class
HelloServiceImpl
implements
IHelloService
@H_620_
404@...
{



public void print() ...{

System.out.println("action");


}



public User getUser(User user) ...{


user.setUsername("new name");

user.setPassword("new password");

return user;

}


}

IHelloService.aegis.xml 为复杂参数和返回类型绑定,和IHelloService在一个包下

<?
xml version="1.0" encoding="UTF-8"
?>


<
mappings
>

<
mapping
>

<
method
name
="getUser"
>

<
parameter
index
="0"
componentType
="test.User"
/>

<
return-type
componentType
="test.User"
/>


</
method
>



</
mapping
>

</
mappings
>



services.xml xFire发布文件

<?
xml version
=
"
1.0
"
encoding
=
"
UTF-8
"
?>



<
beans
>

<
service xmlns
=
"
http://xfire.codehaus.org/config/1.0
"
>

<
name
>
HelloService
</
name
>

<
namespace
>
http:
//
test/HelloService</namespace>

<
serviceClass
>
test.IHelloService
</
serviceClass
>

<
implementationClass
>
test.HelloServiceImpl
</
implementationClass
>


</
service
>

</
beans
>
部署到tomcat中,在浏览器中运行http://localhost:8080/XFire/services/HelloService?wsdl
如果部署正确,讲出现XFire生成的wsdl文件
把IHelloService.java,IHelloService.aegis.xm,User.java打包成jar
下面,我们编写消费WS的客户端
新建一个java工程,把服务端的jar放到classpath中,当然,服务和客户端都要有XFire的类库
编写代码

package
test;

import
java.net.MalformedURLException;


import
org.codehaus.xfire.client.XFireProxyFactory;

import
org.codehaus.xfire.service.Service;

import
org.codehaus.xfire.service.binding.ObjectServiceFactory;


import
test.IHelloService;

import
test.User;







public
class
Client
...
{



/** *//**

* @param args

*/


public static void main(String[] args) ...{

User user=new User("2","2");

String serviceURL="http://localhost:8080/XFire/services/HelloService";

Service serviceModel = new ObjectServiceFactory().create(IHelloService.class,null,"http://test/HelloService",null);

XFireProxyFactory serviceFactory = new XFireProxyFactory();

IHelloService service = null;


try ...{

service = (IHelloService) serviceFactory.create(serviceModel, serviceURL);


user=service.getUser(user);


System.out.println(user.getUsername()+" - "+user.getpassword());


} catch (MalformedURLException e) ...{


e.printstacktrace();

}

}


}

在tomca安装目录下的bin中启动tomcat(注意不要使用eclipse环境中的启动插件,否则运行客户端时候会自动关掉服务)
运行结果:
new name - new password
真是我们想要的结果
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。