最近一直在学习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:
<?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!后续会对此例升级!
分享到:
相关推荐
webservice学习笔记doc文档,喜欢或想要了解webservice的朋友可以下载学习一下。
JAVA的WebService支持V3.0.pdf JAVA6开发WebService WebService CXF学习:整合Spring框架
Eclipse下WebService学习.doc
springboot2.0webService学习
WebService学习资料(很全)WebService学习资料(很全)WebService学习资料(很全)WebService学习资料(很全)WebService学习资料(很全)WebService学习资料(很全)
webService学习笔记
axis+webservice学习教程 网络转载,他人贡献。 在此表示感谢
webservice初学者适用
尚硅谷Webservice学习笔记,详情请参看文档,仅供个人学习
webservice学习资料和样例webservice学习资料和样例webservice学习资料和样例webservice学习资料和样例webservice学习资料和样例webservice学习资料和样例
WebService学习笔记 比较经典
webservice学习资料XMLWSDL教程,webservice学习资料XMLWSDL教程
WebService学习过程中,知识点的总结,和例子。
WebService学习和了解 WebService的优点 SOAP是什么?WSDL是什么?
WebService其实就是向外部(跨语言甚至平台)公开一些函数方法等等内容,使外部能访问到所要发布的“服务”
你想要了解webservice么,那么就下载它吧,通过学习它,你就可以了解webservice的整个过程,但是需要vs2010的支持。是系统分析师考试的一个考试要点。
Webservice学习笔记
对于网络服务不是很了解的朋友就下载看看吧。
Webservice学习Webservice学习