2008-01-24
WebService的学习成长过程(一)
关键字: webservice, soa
最近一直在学习SOA(服务为导向的体系结构),而WebService就是首先要研究的!
概念嘛,我就不说了,网上太多了,一搜就是一堆!
先来做个简单的,用xfire做的例子:
步骤:
1、从xfire官网下载xfire-distribution-1.2.6.zip,将解压缩后的lib下所有包和xfire-all-1.2.6.jar拷贝到你的新建web工程的WEB-INF/lib下。
2、修改web.xml:
3、编写服务接口和实现类:
4、在src下建 META-INF\xfire\services.xml:
哈哈,很简单吧!这样就做好了一个WebService了。
我们可以通过http://localhost:8080/你的工程名/services/UserService?wsdl来访问。看到xml了,就表示你的服务发表成功了!
下面我们来测试一下:
大家可以考虑上面服务接口的代码,如果不用泛型,还可以调用成功吗?
答案是不行的!因为不知道List中到底是什么!这时,就需要有配置文件来描述了,也就是绑定!
WebService的绑定有很多,我们在这里只讨论aegis的绑定。
绑定配置文件的名字必须要和服务的名字一样:UserService.aegis.xml.
UserService.aegis.xml:
这样,我们即使不用泛型也可以测试通过!如果返回类型是map,我们又怎么配呢?
其实都一样的,假如服务接口中方法为:
到此为止,我们就算完全做完了一个WebService!后续会对此例升级!
概念嘛,我就不说了,网上太多了,一搜就是一堆!
先来做个简单的,用xfire做的例子:
步骤:
1、从xfire官网下载xfire-distribution-1.2.6.zip,将解压缩后的lib下所有包和xfire-all-1.2.6.jar拷贝到你的新建web工程的WEB-INF/lib下。
2、修改web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
3、编写服务接口和实现类:
package com.zhuweisky.xfireDemo;
import java.io.Serializable;
public class User implements Serializable {
private String name;
private int age;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String name, int age) {
super();
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.zhuweisky.xfireDemo;
import java.util.List;
public interface UserService {
public User getUser();
public List<User> getUsers();
}
package com.zhuweisky.xfireDemo;
import java.util.List;
import java.util.Vector;
public class UserServiceImpl implements UserService {
public List<User> getUsers(){
List list=new Vector();
User user1 = new User("tom",23);
User user2 = new User("jerry",26);
list.add(user1);
list.add(user2);
return list;
}
public User getUser(){
User user = new User("tom",23);
return user;
}
}
4、在src下建 META-INF\xfire\services.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>UserService</name>
<namespace>http://com.zhuweisky.xfireDemo/UserService</namespace>
<serviceClass>com.zhuweisky.xfireDemo.UserService</serviceClass>
<implementationClass>com.zhuweisky.xfireDemo.UserServiceImpl</implementationClass>
</service>
</beans>
哈哈,很简单吧!这样就做好了一个WebService了。
我们可以通过http://localhost:8080/你的工程名/services/UserService?wsdl来访问。看到xml了,就表示你的服务发表成功了!
下面我们来测试一下:
package com.zhuweisky.xfireDemo.test;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.w3c.dom.Document;
import com.sun.org.apache.xerces.internal.dom.DocumentImpl;
import com.zhuweisky.xfireDemo.User;
import com.zhuweisky.xfireDemo.UserService;
public class TestCallWebService {
public static void main(String[] args)
{
Service srvcModel = new ObjectServiceFactory().create(UserService.class);
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
String helloWorldURL = "http://localhost:8080/XFireZhuweiTest/services/UserService";
try{
UserService srvc = (UserService) factory.create(srvcModel, helloWorldURL);
System.out.println(srvc.getUser().getName());
List users=srvc.getUsers();
for (Iterator iter = users.iterator(); iter.hasNext();) {
User user = (User) iter.next();
System.out.println(user.getName());
}
}catch (MalformedURLException e){
e.printStackTrace();
}
}
}
大家可以考虑上面服务接口的代码,如果不用泛型,还可以调用成功吗?
答案是不行的!因为不知道List中到底是什么!这时,就需要有配置文件来描述了,也就是绑定!
WebService的绑定有很多,我们在这里只讨论aegis的绑定。
绑定配置文件的名字必须要和服务的名字一样:UserService.aegis.xml.
UserService.aegis.xml:
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
<mapping>
<method name="getUsers">
<return-type componentType="com.zhuweisky.xfireDemo.User"/>
</method>
</mapping>
</mappings>
这样,我们即使不用泛型也可以测试通过!如果返回类型是map,我们又怎么配呢?
其实都一样的,假如服务接口中方法为:
public Map getUsersMap(int count);
<mapping> <method name="getUsersMap"> <parameter index="0" mappedName="count" keyType="java.lang.Integer" /> <return-type mappedName="UserMap" keyType="java.lang.Integer" componentType="com.zhuweisky.xfireDemo.User" ignore="true" /> </method> </mapping>
到此为止,我们就算完全做完了一个WebService!后续会对此例升级!
- 16:24
- 浏览 (345)
- 评论 (0)
- 分类: webservice
- 相关推荐
发表评论
- 浏览: 6575 次
- 性别:

- 来自: 西安

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
使用uddi4j连接juddi
org.uddi4j.transport.TransportException: ...
-- by boczj -
WebService的学习成长过程 ...
引用如果你的测试跟服务不是在同一贯饿应用下,你还可以在测试里 拿UserSer ...
-- by 小笨熊 -
WebService的学习成长过程 ...
你好,在你这两个里子中,你是否考虑到你的客户端测试的和你的服务端是在同一个应用下 ...
-- by xuewei -
如何用xfire做一个webSer ...
谢谢。。。。你们的意见对我很有用。。。。
-- by yangpeihai -
如何用xfire做一个webSer ...
没有对数据进行初始化赋值吧
-- by caroline12






评论排行榜