SSM 架构集成WebService 服务

项目需要,需要发布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
	">

 
 
    <!--有两种发布方式,本人使用了第二种 -->
    <!-- 配置方式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

此文章,是针对本人具体项目来写的,比较粗糙,具体可以看下参考链接
参考:

https://www.cnblogs.com/xiaochangwei/p/5399507.html

针对webService的注解总结

https://blog.csdn.net/sinat_34979884/article/details/80938179

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ps:主要解决在webservice中,我们想从另外一个项目调用webservice项目的接口,也就是跨项目调用接口 这里主要用到了xfire wsdl 废话不说了 直接上东西 1. 首先新建一个项目 2. 在src下创建两个文件: a) 第一个是你想要访问的webservice的接口,比如我想访问的接口是 ReleaseService 那就在当前项目创建一个ReleaseService接口(接口中的方法必须和你想要访问的webservice的接口中的方法相同) b) 第二个是你的调用类 3. 导入相应的jar包,这些包不能引用,一定要复制到lib文件夹下面在引用 4. 具体的实现代码 TestWebService方法的代码: package com.isanta.webServiceTest; import java.io.InputStream; import java.net.MalformedURLException; import java.util.Properties; import java.util.Scanner; import org.codehaus.xfire.XFireFactory; import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.binding.ObjectServiceFactory; public class TestWebService { /** * @param args */ public static void testWebService() throws MalformedURLException, Exception{ // TODO Auto-generated method stub /** *这里是我的参数放在了properties文件中,我在读取里面的参数,这里我们也可以通过方法传参数 *如 : testWebService(String url,String xMlStr)() 那么在调用的时候就可以直接传进来了 *url 是你访问的webservice 的tomcat 的服务器地址 */ Properties pro = new Properties(); InputStream in = null; in = TestWebService.class.getResourceAsStream("/request.properties"); pro.load(in); String url = pro.getProperty("url"); String xMLstr = pro.getProperty("xMLstr"); Service s=new ObjectServiceFactory().create(ReleaseService.class); XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire()); System.out.println("url="+url); try { //这里就是获取webservice的接口的实例对象 ReleaseService seleaseService=(ReleaseService) xf.create(s,url); System.out.println("进入接口----------------->请求报文:"+xMLstr); //这里就是调用你需要的接口的方法 String st=seleaseService.queryReceiptDatas(xMLstr); System.out.print(st); } catch(Exception e) { e.printStackTrace(); } } } 5. 将整个项目打包成jar 6. 将打好的jar包引入到你想要调用的项目中,然后就想 正常的代码一样来调用,如: import java.net.MalformedURLException; import com.isanta.webServiceTest.TestWebService; public class Test { public static void main(String[] args) throws MalformedURLException, Exception { TestWebService.testWebService(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值