最近一直在学习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!后续会对此例升级!
分享到:
相关推荐
在学习过程中,随书源码是一个宝贵的资源,它能帮助读者通过实际操作理解理论知识。对于C# XML入门经典源码,你可能会找到以下几个部分: 1. XML读写:包含读取XML文件到内存并进行修改,然后保存回文件的示例。 2....
通过这个"TopEng基于BME的WebService开发教程 培训胶片V1.0.ppt",你将获得一系列实践指导和案例研究,帮助你从理论到实践,从初学者成长为WebService开发的专家。无论是进行企业级应用集成还是构建分布式系统,这个...
Java 程序员的成长之路是一个长期的过程,需要不断学习和实践。本文将从初识 Java 到成为一名熟练的 Java 开发者,整个过程中需要掌握的知识点和技能。 首先,需要掌握 Java 的基础知识,包括操作对象、if 和 for ...
在深入学习过程中,教程可能会讲解数据绑定,这是Flex中一个重要的概念,允许视图与模型之间的动态交互。此外,还会涉及事件处理,理解如何响应用户操作并执行相应的代码。ActionScript 3.0的面向对象编程特性,如类...
Java Web 开发是一种使用 Java 技术来处理网络应用程序的技术集合,涵盖了服务器端和客户端的各个方面。在客户端,虽然 Java Applet 使用较少,但在...通过这样的学习路径,逐步成长为一名出色的 Java Web 开发工程师。
Java学习路线图:从入门到精通的全面指南 在IT行业,Java作为一门...总之,“java学习路线图”不仅是学习的指南,更是成长的航标,它指引着每位学习者向着技术的高峰不断攀登,最终在Java的世界里找到属于自己的舞台。
- **个人成长机会**:表达希望在这家公司获得成长和学习的机会,同时强调自己也能为公司带来价值。 #### 三、谈谈你的优点 **知识点:** - **具体事例**:在阐述优点时,最好能结合具体的例子来证明自己的能力。 ...
### Java EE 学习方向详解 #### 一、Java核心编程技术 ...通过上述内容的学习,不仅能够成为一名合格的Java程序员,还能够逐渐成长为Java高级软件工程师乃至Java系统架构师,具备设计和构建复杂系统的能力。
Axis2作为一款流行的WebService引擎,其设计目标在于提供高效、灵活且易于使用的WebService解决方案。它支持多种通信协议,包括SOAP 1.1、SOAP 1.2以及RESTful WebService,这使得开发者能够根据实际需求选择最合适...
本文将深入探讨系统架构设计师这一职业,其必备技能,以及如何从开发人员逐步成长为架构设计师。 首先,系统架构设计师并非仅专注于编写代码,而是通过编写代码积累经验,逐步培养商业意识和管理能力。他们需要广泛...
Java作为一门广泛使用的编程语言,学习它是一项既有挑战又有乐趣的过程。从初识语法到熟练掌握各种框架和技术,每一步都需要扎实的基础和不断的实践。 首先,Java学习的基础是掌握基本语法和核心概念,如操作对象、...
此外,我还学习了新技能,如Webservice和iBatis,以及如何将所学的Struts、Hibernate、Spring框架应用到实际项目中。 【技术学习与应用】 在实习中,我接触了Webservice,这是一种轻量级的通信技术,用于接收并...
同时,还学习了与OMS开发相关的技术,如短信彩信、XML、.NET和WebService,以及Microsoft Solutions Framework (MSF)在项目中的应用。 5. **网络布线实践**:在实习的第三周,实习生参与了实际的网络布线工作,了解...
总体来看,过去两年的Java开发经历是一个不断学习和成长的过程,涉及了Web开发、系统测试、项目管理和技术研究等多个层面。这表明,作为Java开发者,我们需要持续关注新技术,提升自身技能,以便更好地应对日新月异...
.NET编程纪实是一本面向初学者的编程指导书籍,专为希望学习C#编程语言和.NET...总的来说,.NET编程纪实不仅为初学者提供了坚实的技术基础,还为他们指引了学习的方向,帮助他们逐步成长为一名优秀的.NET开发工程师。
在IT公司的技术部门实习是一种宝贵的经历,它不仅提供了实际工作经验,还促进了个人技能的发展和专业知识的深化。以下是对实习期间涉及的关键...实习是一个不断学习、成长的过程,为未来的职业生涯打下了坚实的基础。
总之,这个“Flex完全自学手册电子教案(PPT)”及源码资源是学习Flex的宝贵材料,涵盖了从基础到高级的多个方面,配合实际操作,将有助于你快速成长为一名熟练的Flex开发者。通过学习Flex,你不仅可以创建出富有...
- **《banker:DB2,往事随风》**: 这篇文章讲述了一个DBA如何从一名普通的银行员工成长为一名熟练使用DB2的专业人士的故事。 - **《macrozeng:第一次DB2调优》**: 介绍了作者第一次尝试优化DB2数据库性能的经历...
在这份年终总结中,我们看到一位Java工程师的成长历程,涵盖了项目开发、测试、技术学习等多个方面。 首先,工程师参与了联通116114门户网站的开发,主要负责实现了登录注册、公告模块、短信服务等功能,运用了...
总结来说,这篇实习报告详尽地描述了实习生在软件开发领域的学习和成长过程,涵盖了项目开发的各个环节,同时也突出了实习对于个人专业技能提升和职业发展的重要作用。通过实习,实习生不仅加深了对软件开发流程的...