WebService学习
注:(不会maven的可以先去学习maven配置和简单的命令)
Webservice介绍
apacheCXF
简单测试
1.pox文件引用:
<!--项目依赖-->
<dependencies>
<!--jaxws规范包-->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.0shiyong.1</version>
</dependency>
<!--jetty包-->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.0.1</version>
</dependency>
<!--日志包-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</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>
<encoding>UTF-8</encoding>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
2.编写服务器端(使用@WebService注解进行标注其是一个服务)
编写简单的服务接口
@WebService
public interface HelloService {
/*
* 使用注解@WebService
* 对外发布服务接口
* */
public String sayHello(String name);
}
接口的实现类编写:
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String name) {
return name+",Welcome to xingxinghome!";
}
}
3.在测试模块下测试服务端
public class Service {
public static void main(String[] args) {
//发布服务工厂
JaxWsServerFactoryBean factor = new JaxWsServerFactoryBean();
//设置服务地址
factor.setAddress("http://localhost:8000/ws/hello");
//设置服务类
factor.setServiceBean(new HelloServiceImpl());
//发布服务
factor.create();
System.out.println("服务发布成功:8000");
}
}
4.访问设置的地址显示如下:
<soap:Envelope>
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>
No binding operation info while invoking unknown method with params unknown.
</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
在其访问地址加上?wsdl就会显示出wsdl展示
显示结果如下:
3.客户端的编写
客户端需要知道服务端是什么样子的接口,在客户端够构建与服务端一样的接口,不需要实现
@WebService
public interface HelloService {
public String sayHello(String name);
}
测试连接服务端:(测试时,服务端需要启动)
public class Client {
public static void main(String[] args) {
//服务接口访问的地址
//创建cxf代理工厂
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
//设置远程服务器端的地址
factory.setAddress("http://localhost:8000/ws/hello");
//设置接口类型
factory.setServiceClass(HelloService.class);
//对接口生成代理对象$Proxy34jdk代理,$CGLIB123使用cglib代理
HelloService helloService = factory.create(HelloService.class);
System.out.println(helloService.getClass());
//远程访问服务端方法
String content = helloService.sayHello("jet");
System.out.println(content);
}
}
4.控制台使用日志拦截器来进行soap请求的拦截
在发布服务的时候添加代码:首先在main路径下的resource文件夹中添加log4j的配置文件
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE
log4j.rootCategory=INFO, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
#log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601}%-6r[%15.15t]&-5p %30.30c %x - %m\n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.Threshold=INFO
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
public static void main(String[] args) {
//发布服务工厂
JaxWsServerFactoryBean factor = new JaxWsServerFactoryBean();
//设置服务地址
factor.setAddress("http://localhost:8000/ws/hello");
//设置服务类
factor.setServiceBean(new HelloServiceImpl());
//添加日志输入,输出连接器,观察soap请求,soap响应内容
factor.getInInterceptors().add(new LoggingInInterceptor());
factor.getOutInterceptors().add(new LoggingOutInterceptor());
//发布服务
factor.create();
System.out.println("服务发布成功:8000");
}
控制台有信息:其中有服务的名称,服务的参数,soap封装格式
Payload: <soap:Envelope xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/">soap:Body<ns2:sayHello xmlns:ns2=”http://service.itxing.com/">
jet