ApacheCXF实现WebService(基于jaxws)

1.服务端

1.1 创建maven项目

在这里插入图片描述

1.2 创建pom.xml

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

	<groupId>com.green</groupId>
	<artifactId>server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>server</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws -->
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxws</artifactId>
			<version>3.0.1</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http-jetty -->
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http-jetty</artifactId>
			<version>3.0.1</version>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.12</version>
			<scope>test</scope>
		</dependency>

	</dependencies>
	
	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>3.2</version>
					<configuration>
						<source>1.8</source>
						<target>1.8</target>
						<showWarnings>true</showWarnings>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
</project>

1.3 写服务接口

package com.green.service;

import javax.jws.WebService;

/**
 * 对外发布服务的接口
 *
 */
@WebService
public interface HelloServiceI {

	/**
	 * 对外发布服务的接口的方法
	 * @param name
	 * @return
	 */
	public String sayHello(String name);
}

1.4 写服务接口实现类

package com.green.service.impl;

import com.green.service.HelloServiceI;

public class HelloServiceImpl implements HelloServiceI{

	@Override
	public String sayHello(String name) {
		return name;
	}

}

1.5 发布服务

package com.green.server;

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

import com.green.service.impl.HelloServiceImpl;

public class TestServer {

	public static void main(String[] args) {
		//发布服务的工厂
		JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
		
		//设置服务地址
		factory.setAddress("http://localhost:8080/ws/hello");
		
		//设置服务类型
		factory.setServiceBean(new HelloServiceImpl());
		
		//发布服务
		factory.create();
		
		System.out.println("发布服务成功,端口8080");
	}
}

1.6 运行控制台打印

log4j:WARN No appenders could be found for logger (org.apache.cxf.common.logging.LogUtils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
发布服务成功,端口8080

1.7 访问wsdl说明书

在这里插入图片描述

2.客户端

2.1 创建maven项目

在这里插入图片描述

2.2 添加依赖

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

  <groupId>org.example</groupId>
  <artifactId>client</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>client</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

 <dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws -->
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-frontend-jaxws</artifactId>
			<version>3.0.1</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http-jetty -->
		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-transports-http-jetty</artifactId>
			<version>3.0.1</version>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.12</version>
			<scope>test</scope>
		</dependency>

	</dependencies>
	
	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>3.2</version>
					<configuration>
						<source>1.8</source>
						<target>1.8</target>
						<showWarnings>true</showWarnings>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
</project>

2.3 服务接口

package com.green.service;

import javax.jws.WebService;

/**
 * 对外发布服务的接口
 *
 */
@WebService
public interface HelloServiceI {

	/**
	 * 对外发布服务的接口的方法
	 * @param name
	 * @return
	 */
	public String sayHello(String name);
}

2.4 远程访问服务端

package org.example.client;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import com.green.service.HelloServiceI;

public class Client {
	
	public static void main(String[] args) {
		//服务接口访问地址:http://localhost:8080/ws/hello
		
		//创建cxf代理工厂
		JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
		
		//设置远程访问服务端地址
		factoryBean.setAddress("http://localhost:8080/ws/hello");
		
		//设置接口类型
		factoryBean.setServiceClass(HelloServiceI.class);
		
		//对接口生成代理对象
		HelloServiceI helloServiceI = factoryBean.create(HelloServiceI.class);
		
		//输出代理对象
		System.out.println(helloServiceI.getClass());
		
		//远程访问服务端方法
		String content = helloServiceI.sayHello("上帝是个女孩");
		System.out.println(content);
	}

}

2.5 运行打印控制台

log4j:WARN No appenders could be found for logger (org.apache.cxf.common.logging.LogUtils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
class com.sun.proxy.$Proxy34
上帝是个女孩

3.添加日志拦截器,观察soap协议内容

3.1 服务端添加log4j.properties

在服务端项目里新建个资源文件,名为:resource

log4j.rootCategory=info,CONSOLE,LOGFILE

log4j.logger.org.apache.axis.enterprise=FATAL,CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601}%-6r[%15.15t\%-5p %30.30c %x - %m\n

log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout

3.2 服务端发布接口类添加拦截器

package com.green.server;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

import com.green.service.impl.HelloServiceImpl;

public class TestServer {

	public static void main(String[] args) {
		//发布服务的工厂
		JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
		
		//设置服务地址
		factory.setAddress("http://localhost:8080/ws/hello");
		
		//设置服务类型
		factory.setServiceBean(new HelloServiceImpl());
		
		**//添加日志输入、输出拦截器,观察soap请求,soap响应内容
		factory.getInInterceptors().add(new LoggingInInterceptor());
		factory.getOutFaultInterceptors().add(new LoggingOutInterceptor());**
		
		//发布服务
		factory.create();
		
		System.out.println("发布服务成功,端口8080");
	}
}

3.3 运行看控制台

开始运行服务端,控制台打印是:

2021-11-15 20:52:41,0080     [           mainINFO  y.ReflectionServiceFactoryBean  - Creating Service {http://impl.service.green.com/}HelloServiceImplService from class com.green.service.HelloServiceI
2021-11-15 20:52:41,629621   [           mainINFO  apache.cxf.endpoint.ServerImpl  - Setting the server's publish address to be http://localhost:8080/ws/hello
2021-11-15 20:52:41,656648   [           mainINFO  rg.eclipse.jetty.server.Server  - jetty-8.1.15.v20140411
2021-11-15 20:52:42,3341326  [           mainINFO  jetty.server.AbstractConnector  - Started SelectChannelConnector@localhost:8080
发布服务成功,端口8080

运行客户端,控制台打印是:

log4j:WARN No appenders could be found for logger (org.apache.cxf.common.logging.LogUtils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
class com.sun.proxy.$Proxy34
上帝是个女孩

调回服务端控制台,会发现有新的内容产生:

2021-11-15 20:52:41,0080     [           mainINFO  y.ReflectionServiceFactoryBean  - Creating Service {http://impl.service.green.com/}HelloServiceImplService from class com.green.service.HelloServiceI
2021-11-15 20:52:41,629621   [           mainINFO  apache.cxf.endpoint.ServerImpl  - Setting the server's publish address to be http://localhost:8080/ws/hello
2021-11-15 20:52:41,656648   [           mainINFO  rg.eclipse.jetty.server.Server  - jetty-8.1.15.v20140411
2021-11-15 20:52:42,3341326  [           mainINFO  jetty.server.AbstractConnector  - Started SelectChannelConnector@localhost:8080
发布服务成功,端口8080
2021-11-15 20:53:19,62438616 [tp2017085051-19INFO  oServiceImplPort.HelloServiceI  - Inbound Message
----------------------------
ID: 1
Address: http://localhost:8080/ws/hello
Encoding: UTF-8
Http-Method: POST
Content-Type: text/xml; charset=UTF-8
Headers: {Accept=[*/*], Cache-Control=[no-cache], connection=[keep-alive], Content-Length=[207], content-type=[text/xml; charset=UTF-8], Host=[localhost:8080], Pragma=[no-cache], SOAPAction=[""], User-Agent=[Apache CXF 3.0.1]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:sayHello xmlns:ns2="http://service.green.com/"><arg0>上帝是个女孩</arg0></ns2:sayHello></soap:Body></soap:Envelope>
--------------------------------------

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值