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>
--------------------------------------