最近因为公司需要对外提供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是我的项目访问地址) 的时候便可以进入了.
applicationContext_webservice.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: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接口