项目需要,需要发布webService 接口供其他系统调用
需求背景:需要发布的接口,提供给 ESB ,ESB 进行处理后(即标准化后)发布wsdl 文件,我通过CXF 根据 wsdl 文件 生成 javaBean
项目环境:jdk1.6 tomcat7 ssm 架构
一:当然是引入jar 包(我这里使用的事 apache cxf )
下载地址 :http://archive.apache.org/dist/cxf/
我下的是:2.6.1 版本的zip 包,解压出来后,复制 lib 包里的jar ,放入项目中,此处笔者
下方是放入项目中的jar ,由于本项目中,已经存在了slf4j 的包,因此
我只放了下面这些,大家根据实际增减自己的包
二:接下来就是,写接口文件和接口的实现文件
我这里的接口 为ESB 发布的wsdl 文件 cxf 生成的 接口
在此不赘述
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import com.grand.webservice.entity.FdmsReqSysHead;
import com.grand.webservice.entity.FdmsRspSysHead;
@WebService
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface Fdms2ESBInterfaces {
/**
* 系统测试 接口
*/
@WebResult(name = "RspFdmsTest", partName = "RspFdmsTest")
@WebMethod
public FdmsRspSysHead fdmsTest(
@WebParam(partName = "ReqFdmsTest", name = "ReqFdmsTest")
FdmsReqSysHead fdmsReqSysHead);
}
三:编写实现类
@WebService(endpointInterface="com.grand.webservice.service.Fdms2ESBInterfaces")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public class FdmsWebServiceImpl implements Fdms2ESBInterfaces {
@Override
public FdmsRspSysHead fdmsTest(FdmsReqSysHead fdmsReqSysHead) {
// TODO Auto-generated method stub
FdmsRspSysHead fdmsRspSysHead = new FdmsRspSysHead();
fdmsRspSysHead.setRetCode("");
fdmsRspSysHead.setRetMsg("卡号是:"+fdmsReqSysHead.getCardNo());
return fdmsRspSysHead;
}
四:配置
在Spring配置文件,默认为applicationContext.xml中增加下列代码,需要注意的是:请加入xsd信息 注意标注的字
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:cache="http://www.springframework.org/schema/cache"
//此处要添加下面两行
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-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
//此处要添加下面两行
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
">
<!-- 引入CXF配置文件,低版本还需引入其他两个文件 -->
<import resource="classpath:META-INF/cxf/cxf.xml" />
<!--有两种发布方式,本人使用了第二种 -->
<!-- 配置方式1 注意:serviceClass为接口类并非实现类 -->
<!-- 这是实现类 -->
<!-- <bean id="Fdms001" class="com.grand.webservice.FdmsWebServiceImpl" /> -->
<!-- serviceClass 是接口的路径-->
<!--
<jaxws:server serviceClass="cn.com.XXX.XX.XXX.Fdms2ESBInterfaces "
address="/FdmsWebService">
<jaxws:serviceBean>
<ref bean="Fdms001" />
</jaxws:serviceBean>
</jaxws:server> -->
<!-- 配置方式2 注意:implementor为接口的具体实现类 -->
<jaxws:endpoint implementor="com.grand.webservice.FdmsWebServiceImpl" address="/FdmsWebService" ></jaxws:endpoint>
修改web.xml文件,在末尾增加filter配置
<!-- cxf服务启动servlet -->
<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>/webService/*</url-pattern>
</servlet-mapping>
运行tomcat 进行测试
在浏览器中 输入
访问项目地址+/webService/FdmsWebService?wsdl 就会出现 wsdl 的发布内容,代码发布成功
大家注意
如果后期运行时出现 这样的异常时,一般是jdk 版本对cxf 版本的支持问题
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/cxf/frontend/ServerFactoryBean : Unsupported major.minor version 51.0
刚开始笔者下载的是
使用jdk6和apache-cxf-3.1.6,但cxf-3.1.6已经不支持jdk6,需要jdk7以上
jdk版本对照:
J2SE 8 = 52,
J2SE 7 = 51,
J2SE 6.0 = 50,
J2SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45
解决方法一:
把CXF换成apache-cxf-2.6.1(笔者这里,下了个版本低的)
解决方法二:
升级jdk到7
此文章,是针对本人具体项目来写的,比较粗糙,具体可以看下参考链接
参考:
针对webService的注解总结
https://blog.csdn.net/sinat_34979884/article/details/80938179