xfire+spring+maven构建webservice服务器和客户端

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

本文转自:http://jishiweili.iteye.com/blog/2087930 

文章主要介绍:

1:用xfire+spring+maven构建webservice服务器。

2:用xfire的eclipse插件生成客户端访问方式。

3:以知接口和bean生成客户端。

4:客户端动态访问。包括返回java自定义对象。

博客代码奉上:http://pan.baidu.com/s/1dFr4EfZ 

1:用xfire+spring+maven构建webservice服务器。

(一)肯定首先配置spring上下文监听器和xfire的servert配置,将下列代码加入web.xml中:

Xml代码  收藏代码

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

  2.     

  3. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    

  4.     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"    

  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"    

  6.     id="WebApp_ID" version="2.5">    

  7.     <display-name>webservice</display-name>    

  8.     <!-- springmvc 上下文监听器 ContextLoaderListener -->  

  9.     <listener>  

  10.           <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  

  11.     </listener>  

  12.     <context-param>  

  13.         <param-name>contextConfigLocation</param-name>  

  14.         <param-value>classpath:spring/*.xml</param-value>  

  15.     </context-param>  

  16.     <!-- springmvc 上下文监听器  ContextLoaderListener-->  

  17.      <servlet>    

  18.       <servlet-name>xfire</servlet-name>    

  19.       <servlet-class>    

  20.        org.codehaus.xfire.spring.XFireSpringServlet    

  21.       </servlet-class>    

  22.      </servlet>    

  23.      <servlet-mapping>    

  24.       <servlet-name>xfire</servlet-name>    

  25.       <url-pattern>/service/*</url-pattern>    

  26.      </servlet-mapping>    

  27. </web-app>  

 (二)配置 spring的配置文件,最基本的包括导入xfire.xml和baseWebService,剩余2个bean是自定义的webservice接口和实现类。代码如下:

Xml代码  收藏代码

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

  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  

  3. <beans>  

  4.         <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />     

  5.          <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">      

  6.           <property name="serviceFactory" ref="xfire.serviceFactory" />      

  7.           <property name="xfire" ref="xfire" />     

  8.          </bean>     

  9.          <bean id="bookWS" class="com.xiaoji.webservice.xfire.service.impl.BookServiceImpl">    

  10.          </bean>     

  11.          <bean id="bookService" parent="baseWebService">      

  12.           <property name="serviceBean" ref="bookWS" />      

  13.           <property name="serviceClass" value="com.xiaoji.webservice.xfire.service.BookService" />     

  14.          </bean>   

  15. </beans>    

 (三)剩下的就是自定义接口和实现类,对象bean.代码如下

book.java

Java代码  收藏代码

  1. package com.xiaoji.webservice.xfire.entity;  

  2.   

  3. public class Book {  

  4.   

  5.     private int bookId;  

  6.     private String name;  

  7.       

  8.     public Book(){  

  9.           

  10.     }  

  11.       

  12.     public Book(int bookId,String name){  

  13.         this.bookId = bookId;  

  14.         this.name = name;  

  15.     }  

  16.   

  17.     public int getBookId() {  

  18.         return bookId;  

  19.     }  

  20.   

  21.     public void setBookId(int bookId) {  

  22.         this.bookId = bookId;  

  23.     }  

  24.   

  25.     public String getName() {  

  26.         return name;  

  27.     }  

  28.   

  29.     public void setName(String name) {  

  30.         this.name = name;  

  31.     }  

  32.       

  33.       

  34. }  

 BookService和BookServiceimpl,定义了2个方法,一个传入字符串并返回字符串,另外一个传入个数字返回个对象:

Java代码  收藏代码

  1. package com.xiaoji.webservice.xfire.service;  

  2.   

  3.   

  4. import com.xiaoji.webservice.xfire.entity.Book;  

  5.   

  6. public interface BookService {  

  7.   

  8.     public Book getBookById(int id);  

  9.     public String sayHello(String str);  

  10. }  

 

Java代码  收藏代码

  1. package com.xiaoji.webservice.xfire.service.impl;  

  2.   

  3. import java.util.ArrayList;  

  4. import java.util.List;  

  5.   

  6. import com.xiaoji.webservice.xfire.entity.Book;  

  7. import com.xiaoji.webservice.xfire.service.BookService;  

  8.   

  9. public class BookServiceImpl implements BookService {  

  10.   

  11.     public Book getBookById(int id) {  

  12.         Book book = new Book(1,"china");  

  13.         return book;  

  14.     }  

  15.   

  16.     public String sayHello(String str) {  

  17.         // TODO Auto-generated method stub  

  18.         return "this is " + str + ".";  

  19.     }  

  20.   

  21.   

  22. }  

 最后还是要贴上pom.xml源码

Java代码  收藏代码

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

  2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  

  3.   <modelVersion>4.0.0</modelVersion>  

  4.   <groupId>com.xiaoji.webservice</groupId>  

  5.   <artifactId>webservice-xfire</artifactId>  

  6.   <packaging>war</packaging>  

  7.   <version>0.0.1-SNAPSHOT</version>  

  8.   <name>webservice-xfire Maven Webapp</name>  

  9.   <url>http://maven.apache.org</url>  

  10.   <dependencies>  

  11.     <dependency>  

  12.       <groupId>junit</groupId>  

  13.       <artifactId>junit</artifactId>  

  14.       <version>3.8.1</version>  

  15.       <scope>test</scope>  

  16.     </dependency>  

  17.     <dependency>  

  18.     <groupId>org.codehaus.xfire</groupId>  

  19.     <artifactId>xfire-core</artifactId>  

  20.     <version>1.2.5</version>  

  21.     </dependency>   

  22.     <dependency>  

  23.         <groupId>org.codehaus.xfire</groupId>  

  24.         <artifactId>xfire-spring</artifactId>  

  25.         <version>1.2.6</version>  

  26.     </dependency>   

  27.     <dependency>    

  28.       <groupId>org.springframework</groupId>    

  29.       <artifactId>spring-web</artifactId>    

  30.       <version>3.2.8.RELEASE</version>    

  31.     </dependency>    

  32.     </dependencies>    

  33.   <build>  

  34.     <finalName>webservice-xfire</finalName>  

  35.   </build>  

  36. </project>  

1.服务器注解:服务器配置基本这样,有一点不理解的地方就是不能返回List,map等集合对象。如果有人实现可以互相交流哈。

启动jetty,访问127.0.0.1:8080/webservice-xfire/service/BookService?wsdl。

启动tomcat7,访问:127.0.0.1:8888/service/BookService?wsdl。

2.用xfire的eclipse插件生成客户端访问方式。

如果你eclipse上没有xfire插件,请参考我的博客:http://jishiweili.iteye.com/admin/blogs/2086145,进行xfire插件安装,

新建个maven-archetype-webapp,右键新建的项目,选择new-》other-》Code generation from WSDL document,wsdl url or path为:127.0.0.1:8080/webservice-xfire/service/BookService?wsdl;output directory选择新建项目下的src/java/main;最后输入package(随便输);确定即可。

你会发现包里面多了个xfire组包 可以删掉,新建个客户端类,代码如下:

Java代码  收藏代码

  1. package com.xiaoji.webservice.xfire.client;  

  2.   

  3. import java.net.MalformedURLException;  

  4.   

  5.   

  6.   

  7. public class WebserviceXfireClient {  

  8.   

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

  10.         //xfire客户端访问webservice第3种方式  

  11.         //xfire自动生成客户端  

  12.         BookServiceClient client = new BookServiceClient();  

  13.         BookServicePortType bs = client.getBookServiceHttpPort();  

  14.         System.out.println(bs.sayHello("小吉"));  

  15.         System.out.println(bs.getBookById(0).getName().getValue());  

  16.     }  

  17.       

  18. }  

 

最后贴上xfire的pom.xml:

Java代码  收藏代码

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

  2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  

  3.   <modelVersion>4.0.0</modelVersion>  

  4.   <groupId>com.xiaoji.webservice.xfire</groupId>  

  5.   <artifactId>eclipseplugin</artifactId>  

  6.   <packaging>war</packaging>  

  7.   <version>0.0.1-SNAPSHOT</version>  

  8.   <name>eclipseplugin Maven Webapp</name>  

  9.   <url>http://maven.apache.org</url>  

  10.   <dependencies>  

  11.       <dependency>  

  12.     <groupId>org.codehaus.xfire</groupId>  

  13.     <artifactId>xfire-all</artifactId>  

  14.     <version>1.2.6</version>  

  15. </dependency>  

  16.   </dependencies>  

  17.   <build>  

  18.     <finalName>eclipseplugin</finalName>  

  19.   </build>  

  20. </project>  

3:第二种访问方式是知道接口的自定义对象bean时用,这里要注意,必须类名和包名一直,要不访问不到的。

这里只贴客户端代码。pom.xml,类和接口如上,

Java代码  收藏代码

  1. // 第一种访问方式需要知道接口和bean  

  2. public static void testClient1() throws MalformedURLException {  

  3.     String serviceUrl = "http://127.0.0.1:8888/service/BookService";  

  4.   

  5.     XFire xfire = XFireFactory.newInstance().getXFire();  

  6.   

  7.     XFireProxyFactory factory = new XFireProxyFactory(xfire);  

  8.   

  9.     Service service = new ObjectServiceFactory().create(BookService.class);  

  10.   

  11.     BookService bs = (BookService) factory.create(service, serviceUrl);  

  12.   

  13.     System.out.println(bs.sayHello("小吉111111"));  

  14.   

  15.     System.out.println(bs.getBookById(0).getName());  

  16. }  

 4:第4中客户端动态访问,这里我刚刚开始的时候始终不能返回自定义对象,返回的类型为DocumentImpl,我就想办法解析这个类型查找类型相关资料,终于解析成功,这里共享给大家:

Java代码  收藏代码

  1. // 动态客户端第2种访问方式  

  2.     public static void testClient2() throws MalformedURLException, Exception {  

  3.         Client client = new Client(  

  4.                 new URL(  

  5.                         "http://127.0.0.1:8888/service/BookService?wsdl"));  

  6.         Object[] results = client.invoke("sayHello"new Object[] { "吉凌夷" });  

  7.         Object[] results2 = client.invoke("getBookById"new Object[] { 1 });  

  8.         System.out.println(results[0]);  

  9.         //返回对象解析  

  10.         Document xmlTree = (Document)results2[0];  

  11.         Element root = xmlTree.getDocumentElement();  

  12.         parseElement(root);  

  13.         System.out.println(map.get("bookId")+"->"+map.get("name"));  

  14.     }  

  15.   

  16.     /** 

  17.      * 解析返回树 

  18.      * @param root 

  19.      */  

  20.     private static void parseElement(Element root) {  

  21.         String key = root.getNodeName();  

  22.         NodeList list = root.getChildNodes();  

  23.         for (int i = 0; i < list.getLength(); i++) {  

  24.             Node node = list.item(i);  

  25.             if (node instanceof Element) {  

  26.                 Element e = (Element) node;  

  27.                 parseElement(e);  

  28.             } else if (node instanceof Text) {  

  29.                 Text t = (Text) node;  

  30.                 map.put(key, t.getNodeValue());  

  31.             }  

  32.         }  

  33.     }  

 注:pom.xml和第2中是一样的,这里要说一下xfire,官网很久没更新,官网上说的是和cxf合并了,具体咋样大家有待考证。

剩下的就是axis2,也是资料最多的。如果不是很忙的话我会很快更新出来。

下面我会上传源码:其中一个是服务器,2个是客户端,第2中访问和第3中访问我放在一起,请自行分别。




本文转自 兴趣e族 51CTO博客,原文链接:http://blog.51cto.com/simplelife/1847131
相关文章
|
27天前
|
存储 开发工具 git
[Git] 深入理解 Git 的客户端与服务器角色
Git 的核心设计理念是分布式,每个仓库既可以是客户端也可以是服务器。通过 GitHub 远程仓库和本地仓库的协作,Git 实现了高效的版本管理和代码协作。GitHub 作为远程裸仓库,存储项目的完整版本历史并支持多客户端协作;本地仓库则通过 `.git` 文件夹独立管理版本历史,可在离线状态下进行提交、回滚等操作,并通过 `git pull` 和 `git push` 与远程仓库同步。这种分布式特性使得 Git 在代码协作中具备强大的灵活性和可靠性。
51 18
[Git] 深入理解 Git 的客户端与服务器角色
|
2月前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
283 15
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
3月前
|
XML Java 测试技术
从零开始学 Maven:简化 Java 项目的构建与管理
Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。
114 1
从零开始学 Maven:简化 Java 项目的构建与管理
|
3月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
65 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
4月前
|
安全 区块链 数据库
|
4月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
124 4
|
4月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
220 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
4月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
247 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
3天前
|
机器学习/深度学习 人工智能 程序员
阿里云出手DeepSeek拒绝服务器繁忙,程序员直呼:真香!
阿里云PAI平台支持一键部署DeepSeek-V3和DeepSeek-R1大模型,用户无需编写代码即可完成从训练到部署的全过程。通过PAI Model Gallery,开发者可轻松选择并部署所需模型版本,享受高效、便捷的AI开发体验。教程详细介绍了开通PAI、选择模型及一键部署的具体步骤,帮助用户快速上手。
|
4天前
|
机器学习/深度学习 存储 弹性计算
阿里云gpu云服务器租用价格:最新收费标准及活动价格参考
阿里云gpu云服务器多少钱?A10卡GN7i GPU云服务器32核188G3213.99/1个月起,V100卡GN6v GPU云服务器8核32G3830.00/1个月起,阿里云GPU云服务器是基于GPU应用的计算服务,多适用于视频解码,图形渲染,深度学习,科学计算等应用场景,该产品具有超强计算能力、网络性能出色、购买方式灵活、高性能实例存储( GA1和GN5特有)等特点。下面小编来介绍下阿里云gpu云服务器最新的收费标准及活动价格。

推荐镜像

更多