Spring和CXF整合发布WebService(服务端、客户端)

Spring和CXF整合发布WebService(服务端、客户端)目录一 服务端 1 依赖 1 1 第一种方式 1 2 第二种方式 2 测试代码 3 配置文件 3 1 第一种配置方式 3 2 第二种配置方式 4 运行二 生成客户端第一种方式 wsdl2java 第二种方式 wsimport 三 测试工作上遇到了 所以自己琢磨了一下 也是第一次想到用博客来记录 平时也有用 word 文档记录 怕忘了 所以在这里来一个详细总结 那些关于

目录

一、服务端

1、依赖

1.1 第一种方式

1.2 第二种方式

2、测试代码

3、配置文件

3.1 第一种配置方式

3.2 第二种配置方式

4、运行

二、生成客户端

第一种方式wsdl2java

第二种方式 wsimport

三、测试


工作上遇到了,所以自己琢磨了一下,也是第一次想到用博客来记录,平时也有用word文档记录,怕忘了。所以在这里来一个详细总结,那些关于WebService和CXF什么的我这里就不多说了,那些网上一搜一大把,就直接上干货。

这里自己琢磨出两种方式,一种是引入依赖,另一种是下载apache-cxf的二进制文件解压缩,在eclipse里配置好,这样就不要引入依赖了,在apache-cxf/lib目录下有所有关于CXF的jar包和Spring相关的jar包,可以自己下载以后去看,如果还需引入其他jar包,另外在pom中添加依赖,下载后记得配置环境变量,先说第一种。

一、服务端

建立Maven项目,引入依赖

1、依赖

1.1 第一种方式

直接在pom文件里添加依赖。

 
     
     
       org.apache.cxf 
      
     
       cxf-core 
      
     
       3.1.4 
      
     
     
     
       org.apache.cxf 
      
     
       cxf-rt-transports-http 
      
     
       3.1.4 
      
     
     
     
       org.apache.cxf 
      
     
       cxf-rt-frontend-jaxws 
      
     
       3.1.4 
      
     

CXF只需添加这三个jar包的依赖,Maven会自动引入帮我们引入其他jar包。在pom文件里添加完成后保存,就会触发Maven自动去下载你添加的依赖jar包(如果你本地仓库有就直接是取的本地仓库的) ,然后项目目录下就会有Maven Dependencies,如下图,是添加完成后的。

Spring和CXF整合发布WebService(服务端、客户端)

在pom文件中我只添加了三个依赖jar包,其他这么多jar包就是Maven自动为我添加的。和spring整合发布webservice还要加入spring的依赖jar包,这个就自己去添加了,第一种就说完了。

1.2 第二种方式

把下载的二进制文件解压缩到一个目录,然后配置环境变量:

1、变量名:CXF_HOME    值:apache-cxf的解压缩路径,示例:E:\Install software\apache-cxf-3.2.5

2、在path后面加上 %CXF_HOME%/bin;

在cmd命令中输入wsdl2java,如果有提示usage,就表明配置成功。

apache-cxf二进制文件下载地址:http://cxf.apache.org/download.html

下载箭头所指的那个:

Spring和CXF整合发布WebService(服务端、客户端)

再就是建立项目,不过不需要引入依赖了,只要在eclipse里配置了,如图:

Spring和CXF整合发布WebService(服务端、客户端)

在项目上右键,Build Path / Configure Build Path / Add library / CXF Runtime,然后选择apache-cxf,点击Finish就好了,你的项目目录下就会多出一个Apache CXF Library,其他的就跟下面一样了。

不过这种方法在运行的时候可能会隔段时间就会报错,但是服务还是能正常运行,下面是报错信息:

DefaultValidationEventHandler: [ERROR]: prefix wsdp is not bound to a namespace Location: node: [wsd:Types: null]javax.xml.bind.UnmarshalException: prefix wsdp is not bound to a namespace- with linked exception: [java.lang.IllegalArgumentException: prefix wsdp is not bound to a namespace] at 

到网上搜索报错原因,是因为lib目录下有多余jar包导致的,解决方案是把多余的jar包删除。

  1. cxf-services-ws-discovery-api-3.1.4.jar
  2. services-ws-discovery-service-3.1.4.jar
  3. services-wsn-api-3.1.4.jar
  4. services-wsn-core-3.1.4.jar
  5. manifest.jar

其中,MANIFEST.MF文件在这个目录下..\apache-cxf-3.2.5\samples\jax_rs\minimal_osgi\src\main\resources\META-INF。

2、测试代码

创建一个接口,记得加上@WebService注解,表示你要“暴露”的接口(服务类)。

@WebService public interface HelloService { public String sayHello(String name) ; }

实现类:

//实现类上可以不添加@Webservice注解 public class HelloServiceImp implements HelloService { @Override public String sayHello(String name) { return "大家好,我是"+name; } }

3、配置文件

配置方式的话也有两种,先来看下第一种方式。

3.1 第一种配置方式

spring.xml

 
     
     
      
    

spring-cxf.xml

 
     
    
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> 
      
      
      
     

 

3.2 第二种配置方式

spring.xml

 
     
     
      
       
      
    

spring-cxf.xml

 
     
    
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> 
      
      
    

补充:

1、至于以前还需引入的 cxf.xml 和 cxf-servlet.xml,网上说是cxf3.0以后就不需要了,至于为什么,原因在这里。

 
     
    

2、关于spring-cxf.xml中另一种配置方式(这种方式我没尝试,有兴趣的下伙伴可以自己去试下)。

 
     
     
      
      
       
      
      
       
      
    

上面配置完了,该到web.xml文件里配置了。

 
     
     
       contextConfigLocation 
      
     
       classpath:spring.xml 
      
     
     
     
       org.springframework.web.context.ContextLoaderListener 
      
     
     
     
       cxf 
      
     
       org.apache.cxf.transport.servlet.CXFServlet 
      
     
       1 
      
     
     
     
       cxf 
      
     
       /service/* 
      
    

4、运行

配置完了以后,部署到Tomcat上运行,右键run as/run on server/Finish,Eclipse弹出下图所示界面表示服务已经成功发布,如果弹出404或者报错,就是发布失败。当然也可以到浏览器里面看运行效果,地址是:http://localhost:8080/项目名/service 。点击箭头所指的地方就能看到wsdl文件。(不要在意我这里的项目名)

Spring和CXF整合发布WebService(服务端、客户端)

Spring和CXF整合发布WebService(服务端、客户端)

二、生成客户端

第一种方式wsdl2java

CXF提供的根据wsdl生成客户端代码的命令。

在cmd命令中输入:wsdl2java -d 指定代码生成目录 -client webservice的访问地址url或者本地的wsdl文件目录地址

示例:wsdl2java -d E:\\AllWorkSpace\\MyWork\\TheClient\\src -client http://localhost:8080/Dom4j_AxisDemo/service/hello?wsdl

注意中间的空格!!!

具体用法自行百度,这里只对上面的用法做解释:

-d 指定要产生代码所在目录

-client 生成客户端测试web service的代码

代码生成后如图:

Spring和CXF整合发布WebService(服务端、客户端)

第二种方式 wsimport

JDK提供的生成客户端的命令。

在cmd命令中输入:wsimport -s 指定代码生成目录 -p 包名 -keep webservice访问地址url

示例:wsimport -s E:\\AllWorkSpace\\MyWork\\TheClient\\src -p com.eastcom.ws.client -keep http://localhost:8080/Dom4j_AxisDemo/service/hello?wsdl

同样注意中间的空格!!!

目录地址中不能含有空格,发布地址不要忘了?wsdl

Spring和CXF整合发布WebService(服务端、客户端)

三、测试

代码,如果生成客户端的时候wsdl你是用的文件地址目录,那就不能这样直接new出来了,在构造方法里要传服务的地址,具体可以到自己生成的server类里去查看。

public class TestService { public static void main(String[] args) { HelloService service=new HelloServiceImpService().getHelloServiceImpPort(); System.out.println(service.sayHello("CXF")); } }

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

结果

Spring和CXF整合发布WebService(服务端、客户端)

第一次写,也当做一次学习经历,以上就是我自己总结的内容,中间有我遇到的问题,以及解决方案,有引用到别人的经验。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211898.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午9:20
下一篇 2026年3月18日 下午9:20


相关推荐

  • sql2012安装错误代码0x84b10001_sql server 安装程序遇到以下错误

    sql2012安装错误代码0x84b10001_sql server 安装程序遇到以下错误followthebelowsteps: InWindows®Explorer,browsetothefollowingpath:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config ImportantNote:Makeacopyofthemachine.c…

    2025年10月25日
    3
  • lede旁路由设置方法

    lede旁路由设置方法lede固件号:2.361.把网络–>接口里面wan口删除2.推荐新建lan口,把原来的lan停用3.新lan口配置:静态地址ipv4地址:主路由地址ipv4子网掩码:255.255.255.0ipv4网关:主路由地址使用自定义的DNS服务器:主路由地址关闭DHCP如果出现访问国内网站巨慢,慢到离谱那种请在旁路由执行以下代码iptables-tnat-IPOSTROUTING-jMASQUERADE并在网络—>防火墙中勾选丢弃无用数据包…

    2022年6月11日
    43
  • sql server 2012 报表开发(1) 如何使用Reporting Service 2012制作报表

    sql server 2012 报表开发(1) 如何使用Reporting Service 2012制作报表ReportingSer 也就是我们平时经常看到的 报表商业智能 BI 基于 SQLServer 的报表制作工具 这里的例子 是如何通过 visualstudio 开发 ReportingSer 报表 1 打开 sqlserver201 创建 一个存储过程 ALTERproc dbo ProTest2 StartSubmitT

    2026年3月26日
    2
  • [大模型]DeepSeek-7B-chat WebDemo 部署

    [大模型]DeepSeek-7B-chat WebDemo 部署

    2026年3月16日
    3
  • 1123581321递归算法_线性递归数列例题

    1123581321递归算法_线性递归数列例题[BZOJ3231][Sdoi2008]递归数列题目大意给定Ci,i∈[1,k]给定C_i,i\in[1,k]定义若i>k,Ai=Ai−1∗C1+Ai−2∗C2+⋯+Ai−k∗Ck若i>k,A_i=A_{i-1}*C_1+A_{i-2}*C_2+\cdots+A_{i-k}*C_k否则Ai=Bi否则A_i=B_i询问sum(A)n−sum(A)m−1询问sum(A)_n-sum(A

    2025年10月30日
    5
  • USES_CONVERSION宏定义

    USES_CONVERSION宏定义USES_CONVERSION是用来转换类型的(比如T2A等转换需用此宏),比如我们很常见的问题:在Socket编程时候,我们的IP地址从界面上输进去一般都使用CString类型的,可是在SOCKADDR_IN中的inet_addr却是const char *我们就不能直接用CString来用。我们就可以使用T2A()宏了。 SOCKADDR_IN localaddr; …

    2022年8月18日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号