转载:https://blog.csdn.net/sinat_34979884/article/details/80836540
转载:https://blog.csdn.net/thebigdipperbdx/article/details/78793979
转载:注解说明https://blog.csdn.net/gjb724332682/article/details/46324661
由ESB 发布的wsdl 文件 ,使用cxf方式 生成的
目录
3.配置spring的applicationContext.xml文件
服务端
第一种方式:整合ssm
1.POM文件中加入cxf的依赖包
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.5</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>3.1.5</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.1.5</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.1.5</version>
</dependency>
2.配置web.xml文件,在末尾增加filter配置
<!--注册一个用于接收其他工程向本工程发送的webservice请求的请求接收器-->
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!--配置过滤请求地址项目名+webService+address+?wsdl-->
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webService/*</url-pattern>
</servlet-mapping>
3.配置spring的applicationContext.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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"
//--------在此处添加下面两行----------
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:soap="http://cxf.apache.org/bindings/soap"
//--------在此处添加上面两行----------
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
//--------在此处添加下面两行----------
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
//--------在此处添加上面两行----------
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- applicationContext.xml中引入CXF配置文件-->
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
<!--class实现类路径-->
<bean id="Fdms" class="com.skytech.tjfwjk.webService.impl.JwsServiceImpl" />
<!-- serviceClass 是接口的路径-->
<jaxws:server serviceClass="com.skytech.tjfwjk.webService.JwsService "
address="/server">
<jaxws:serviceBean>
<ref bean="Fdms"/>
</jaxws:serviceBean>
</jaxws:server>
</beans>
4.编写调用wsdl时的回复类
public class Reply {
/**
* 返回错误码
*/
private String errorCode;
/**
* 返回错误信息
*/
private String message;
/**
* 错误码内部类
*/
public enum ErrorCode {
/**
* 服务器内部错误
*/
SUCCESS("0", "插入成功"),
// 参数类
PARAM_ERR("99000", "请求参数错误"),
PARAM_ERR_EMPTY("99001", "请求参数为空错误"),
PARAM_ERR_NUMBER("99002", "请求参数非数字错误"),
PARAM_ERR_LENGTH("99002", "请求参数数字大与最大值错误"),
// 通用类
FAILURE("500", "服务器内部错误");
/**
* 错误码
*/
String errorCode;
/**
* 错误信息
*/
String errorMsg;
ErrorCode(String errorCode, String errorMsg) {
this.errorCode = errorCode;
this.errorMsg = errorMsg;
}
public String getErrorMsg() {
return this.errorMsg;
}
public String getErrorCode() {
return this.errorCode;
}
@Override
public String toString() {
return this.name();
}
}
/**
* 获取内置reply
*
* @param err 内部类枚举属性名
* @return reply
*/
public static Reply getReply(String err) {
ErrorCode errorCode = ErrorCode.valueOf(err);
return new Reply().setErrorCode(errorCode.getErrorCode()).setMessage(errorCode.getErrorMsg());
}
public String getErrorCode() {
return errorCode;
}
public Reply setErrorCode(String errorCode) {
this.errorCode = errorCode;
return this;
}
public String getMessage() {
return message;
}
public Reply setMessage(String message) {
this.message = message;
return this;
}
}
5.编写接口类
import org.apache.cxf.annotations.WSDLDocumentation;
import javax.jws.WebMethod;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
/**
* @version 1.0
* @date 2018/8/1 9:10
*/
@WebService
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface JwsService {
/**
* 自助智能咨询情况
*
* @param json 咨询情况参数
* @return 返回参数
*/
//wsdl中方法注释
@WSDLDocumentation("<br />" +
"<h3>通过输入对应的json添加信息</h3>" +
"<p>输入参数:省略,返回数据: 一个Reply对象:getErrorCode()返回错误码;getMessage()返回错误信息</p><br />")
//调用返回时xml标签名,可不用
@WebResult(name = "returnResult")
@WebMethod
Reply tjfwjk(String json);
}
6.编写接口实现类
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Resource;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
/**
* @version 1.0
* @date 2018/7/31 21:31
*/
@WebService(endpointInterface="com.skytech.tjfwjk.webService.JwsService")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public class JwsServiceImpl implements JwsService {
private Logger logger = LoggerFactory.getLogger(JwsServiceImpl.class);
//注入service层
@Resource
private IZzznzxqkService iZzznzxqkService;
/**
* @param json
* @return 返回参数
*/
@Override
public Reply tjfwjk(String json) {
JSONObject result = new JSONObject(JSON.parseObject(json));
System.out.println("收到数据-----------"+result);
if (result.isEmpty()) {
return new Reply().setErrorCode(Reply.ErrorCode.PARAM_ERR_EMPTY.getErrorCode()).setMessage("请求参数不能为空");
}
//调用service业务方法
return iZzznzxqkService.insertZzznzxqk(result);
}
}
第二种调用方式,不需要配置
1.不需要配置applicationContext.xml,pom.xml,web.xml
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.xml.ws.Endpoint;
/**
* @version 1.0
* @description 发布webService
* @date 2018/8/1 11:58
*/
@Component
public class OpenJwsService{
private Logger logger = LoggerFactory.getLogger(OpenJwsService.class);
//spring初始化调用
@PostConstruct
public void startJwsService(){
//访问地址+?wsdl
Endpoint.publish("http://localhost:8080/tjfwjk/server", new JwsServiceImpl());
logger.info("----------------发布成功----------------");
}
}
发布成功后在网页输入会出现:
客户端
客户端调用方式:
1.新建一个webProject项目
2.执行cmd命令,在webProject中生成java类
3.调用服务端类中的实现方法
2.cmd中输入
wsimport -s D:\IdeaWorkSpace\test6\src -p main.java.com.baidu.tjfwjk.webservice -keep http://localhost:8080/tjfwjk/webService/server?wsdl
说明:D:\IdeaWorkSpace\test6\src为项目的src目录绝对地址,main.java.com.baidu.tjfwjk.webservice为导入的目标包,http://localhost:8080/tjfwjk/webService/server?wsdl是webSerive服务地址
cmd出现如下时表示成功:
生成的文件目录:
3.生成文件后,创建一个类OpenWs,调用接口的实现方法
import com.alibaba.fastjson.JSONObject;
/**
* @version 1.0
* @description
* @date 2018/8/1 11:04
*/
public class OpenWs {
public static void main(String[] args) {
JwsServiceService factory = new JwsServiceService();
JwsService service = factory.getJwsServicePort();
JSONObject params = new JSONObject();
params.put("test","66");
Reply result = service.tjfwjk(params.toString());
System.out.println(result.getErrorCode()+result.getMessage());
}
}