spring+webservice记录
最近因为公司需要对外提供webservice服务,研究了一下网上的资料.终于做了出来,现在整理一下
web.xml
<servlet> <servlet-name>CXFService</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CXFService</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
其中 <url-pattern>/services/*</url-pattern> 是对cxf的一个截取,当访问 localhost:8080/demo/services(localhost:8080/demo是我的项目访问地址) 的时候便可以进入了.
<?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:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <jaxws:server name="HelloWeb" address="/HelloWeb" serviceClass="com.xxx.hgdf.webservice.xxx.HelloWeb"> <jaxws:serviceBean> <bean class="com.xxx.hgdf.webservice.xxx.impl.HelloWebImpl"></bean> </jaxws:serviceBean> </jaxws:server> </beans>
其中 server name="HelloWeb" 设置我们的服务名称(HelloWebService,HelloWeb后面加上Service便是服务名称了)
address="/HelloWeb",wsdl访问地址.如果我们要直接进入访问页面的话,就可以直接输入 localhost:8080/demo/services/HelloWeb?wsdl
接口:
@WebService @SOAPBinding(style = Style.RPC) public interface HelloWeb{ public String Login(@WebParam(name = "user")User user); public void setUser(@WebParam(name = "user")User user); }
我们可以在@WebService中加入一些设置比如:
@WebService(name = "DemoInterfaces",targetNamespace = "http://xxx.sh.cmcc/Demo")
那么在生成的wsdl文件中 portType便会改变
<wsdl:portType name="DemoInterfaces">
targetNamespace就会为<xs:schema targetNamespace="http://xxx.sh.cmcc/Demo"
(targetNamespace默认为我们的包名倒过来,比如我的包路径为 com.dcx.demo 罢了targetNamespace默认就是 demo.dcx.com)
实现类:
@WebService @SOAPBinding(style = Style.RPC) public class HelloWebImpl implements HelloWeb{ public String Login( @WebParam(name = "users") User user) { // User user = user0.getUser(); System.out.println(user.getName()+"登录"); return user.getName()+" 欢迎您登录"; } public void setUser(@WebParam(name = "user")User user) { System.out.println("############Server setUser###########"); System.out.println("setUser:" + user); } }
实体类user:
public class User implements Serializable{ private static final long serialVersionUID = 1L; ... }
在这里唯一需要注意的就是我们要在实体类上实现Serializable接口
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了