Spring+CXF+Maven发布Webservice

简介: 使用CXF发布WebService简单又快速,还可以与Spring集成,当Web容器启动时一起发布WebService服务。本例是简单的客户端给服务端发送订单信息,服务端返回订单转为json的字符串。 1.使用maven管理jar包,首先在maven添加使用到的cxf jar包依赖,到CXF官网上找到Maven的依赖内容。

使用CXF发布WebService简单又快速,还可以与Spring集成,当Web容器启动时一起发布WebService服务。本例是简单的客户端给服务端发送订单信息,服务端返回订单转为json的字符串。

1.使用maven管理jar包,首先在maven添加使用到的cxf jar包依赖,到CXF官网上找到Maven的依赖内容。

网址如下:http://cxf.apache.org/docs/using-cxf-with-maven.html

我使用的是Tomcat所以引用前两项就可以了

<properties>
  <cxf.version>2.2.3</cxf.version>
</properties>
<dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>${cxf.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>${cxf.version}</version>
    </dependency>

其它jar包依赖

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.32</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-core</artifactId>
	<version>${spring.version}</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-web</artifactId>
	<version>${spring.version}</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>${spring.version}</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-beans</artifactId>
	<version>${spring.version}</version>
</dependency>

2.创建简单的订单类:

package com.ken.model;

import java.io.Serializable;

public class Order implements Serializable {
	
	private String OrderNo;
	private String itemCode;
	private String itemName;
	private Long quantity;
	
	public String getOrderNo() {
		return OrderNo;
	}
	public void setOrderNo(String orderNo) {
		OrderNo = orderNo;
	}
	public String getItemCode() {
		return itemCode;
	}
	public void setItemCode(String itemCode) {
		this.itemCode = itemCode;
	}
	public String getItemName() {
		return itemName;
	}
	public void setItemName(String itemName) {
		this.itemName = itemName;
	}
	public Long getQuantity() {
		return quantity;
	}
	public void setQuantity(Long quantity) {
		this.quantity = quantity;
	}

}

3.WebService接口及实现类:

3.1接口

package com.ken.webservice;

import java.util.List;

import javax.jws.WebParam;
import javax.jws.WebService;

import com.ken.model.Order;

@WebService
public interface IRemoteService {
	
	public String showRemoteMessage(@WebParam(name="arg0") String message);
	
	public String addOrder(List<Order> orders);

}

3.2接口实现类

package com.ken.webservice.impl;

import java.util.List;

import javax.jws.WebService;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.ken.model.Order;
import com.ken.webservice.IRemoteService;


@WebService(endpointInterface="com.ken.webservice.IRemoteService") //endpointInterface这个不能写错了
public class RemoteServiceImpl implements IRemoteService {
	
	public String showRemoteMessage(String message) {
		return "You message is "+ message;
	}

	public String addOrder(List<Order> orders) {
		return JSONArray.toJSONString(orders,true);
	}
	
}

4.配置Spring-context.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:jaxws="http://cxf.apache.org/jaxws"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://cxf.apache.org/jaxws
       http://cxf.apache.org/schemas/jaxws.xsd">

    <import resource="classpath*:META-INF/cxf/cxf.xml" />
    <import resource="classpath*:META-INF/cxf/cxf-extension-soap.xml" />
    <import resource="classpath*:META-INF/cxf/cxf-servlet.xml" />
    
    <jaxws:endpoint id="remoteServiceEndPoint" implementor="com.ken.webservice.impl.RemoteServiceImpl" address="/RemoteService"></jaxws:endpoint>
</beans>

5.配置web.xml文件

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>classpath:spring-context.xml</param-value>
  </context-param>
  
  <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <servlet>
  	<servlet-name>CXFServlet</servlet-name>
  	<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  	 <load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
     <servlet-name>CXFServlet</servlet-name>
     <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
</web-app>

 完成上面的步骤后就可以启动Tomcat并访问

wsdl:

http://localhost:8080/IHealth.Web/services/RemoteService?wsdl

6.客户端调用服务

cmd到其项目的src目录并执行命令就会解析生成相应的调用代码,命令:wsimport -keep http://localhost:8080/IHealth.Web/services/RemoteService?wsdl

 

生成好刷新下src目录就会看到生成的代码,如下

 

此时就可以写调用代码了:

package com.ken.client;

import java.util.ArrayList;
import java.util.List;

import com.ken.webservice.Order;
import com.ken.webservice.impl.IRemoteService;
import com.ken.webservice.impl.RemoteServiceImplService;

public class Client {

	public static void main(String[] args) {
		
		 //创建一个用于产生RemoteServiceImplService实例的工厂,RemoteServiceImplService类是wsimport工具生成的
		RemoteServiceImplService factory = new RemoteServiceImplService(); 
		
		//通过工厂生成一个IRemoteService实例,IRemoteService是wsimport工具生成的
		IRemoteService service = factory.getRemoteServiceImplPort();
		
		String result = service.showRemoteMessage("Ken");
		System.out.println(result);
		
		List<Order> orders = new ArrayList<Order>();
		Order order1 = new Order();
		order1.setOrderNo("201706048888");
		order1.setItemCode("A10000001");
		order1.setItemName("IPHONE");
		order1.setQuantity(100L);
		orders.add(order1);
		
		Order order2 = new Order();
		order2.setOrderNo("201706048888");
		order2.setItemCode("A10000002");
		order2.setItemName("MAC");
		order2.setQuantity(200L);
		orders.add(order2);
		
		String resultOrder = service.addOrder(orders);
		System.out.println(resultOrder);
		

	}

}

 运行后控制台内容:

You message is Ken
[
	{
		"itemCode":"A10000001",
		"itemName":"IPHONE",
		"orderNo":"201706048888",
		"quantity":100
	},
	{
		"itemCode":"A10000002",
		"itemName":"MAC",
		"orderNo":"201706048888",
		"quantity":200
	}
]

  

目录
相关文章
|
Java Maven 微服务
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的 maven 依赖
在项目中使用Swagger2工具时,需导入Maven依赖。尽管官方最高版本为2.8.0,但其展示效果不够理想且稳定性欠佳。实际开发中常用2.2.2版本,因其稳定且界面友好。以下是围绕2.2.2版本的Maven依赖配置,包括`springfox-swagger2`和`springfox-swagger-ui`两个模块。
573 0
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
227 0
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
1215 1
Maven——创建 Spring Boot项目
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
578 1
如何使用 maven 创建一个 Spring Boot项目
【Azure App Service】PowerShell脚本批量添加IP地址到Web App允许访问IP列表中
Web App取消公网访问后,只允许特定IP能访问Web App。需要写一下段PowerShell脚本,批量添加IP到Web App的允许访问IP列表里!
284 2
|
Java 应用服务中间件 Maven
idea+maven+tomcat+spring 创建一个jsp项目
这篇文章介绍了如何在IntelliJ IDEA中使用Maven和Tomcat创建一个JSP项目,包括配置Maven依赖、设置Tomcat服务器、编写JSP页面、创建控制器和配置文件,以及项目的运行结果。
1121 0
idea+maven+tomcat+spring 创建一个jsp项目
|
关系型数据库 MySQL Linux
【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
155 0
【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
|
Shell PHP Windows
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
266 0
|
Linux 应用服务中间件 网络安全
【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?
【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?
174 0
【Azure 应用服务】通过 Web.config 开启 dotnet 应用的 stdoutLog 日志,查看App Service 产生500错误的原因
【Azure 应用服务】通过 Web.config 开启 dotnet 应用的 stdoutLog 日志,查看App Service 产生500错误的原因
374 0

推荐镜像

更多
下一篇
开通oss服务