CXF、Spring整合的SOAP Web Service服务端
1、建工程,导入CXFjar包
2、服务接口
package com.cxf.soap; import java.util.List; import javax.jws.WebService; @WebService public interface PeopleService { public String add(People people); public String del(People people); public String modify(People people); public People getOne(Long id); public List<People> getList(People people); }
3、服务接口实现类
package com.cxf.soap; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.jws.WebService; @WebService(endpointInterface="com.cxf.soap.PeopleService") public class PeopleServiceImpl implements PeopleService { @Override public String add(People people) { // TODO Auto-generated method stub System.out.println("ADD:"+people.getId()+","+people.getName()+","+people.getBirthday()); return "ADD SUCCESS"; } @Override public String del(People people) { // TODO Auto-generated method stub System.out.println("DEL:"+people.getId()+","+people.getName()); return "DEL SUCCESS"; } @Override public String modify(People people) { // TODO Auto-generated method stub System.out.println("MODIFY:"+people.getId()+","+people.getName()); return "MODIFY SUCCESS"; } @Override public People getOne(Long id){ // TODO Auto-generated method stubSystem.out.println("QRY BEGIN"); People people=new People(); people.setId(4L); people.setName("Name-004"); people.setBirthday(new Date()); return people; } @Override public List<People> getList(People p){ // TODO Auto-generated method stub List<People> list=new ArrayList<People>(); People people0=new People(); People people1=new People(); people0.setId(5L); people0.setName(p.getName()+"-005"); people0.setBirthday(new Date()); people1.setId(6L); people1.setName(p.getName()+"-006"); people1.setBirthday(new Date()); list.add(people0); list.add(people1); return list; } }
4、参数类
package com.cxf.soap; import java.util.Date; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "People") public class People { private Long id; private String name; private Date birthday; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
5、配置映射Service , beans.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:endpoint id="peopleService" address="/peopleService" implementor="com.cxf.soap.PeopleServiceImpl"/> </beans>
6、在Spring配置文件中加载映射,applicationContext.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <import resource="classpath*:META-INF/cxf/cxf.xml" /> <import resource="classpath*:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath*:META-INF/cxf/cxf-servlet.xml" /> <import resource="classpath:beans.xml" /> <!-- <import resource="classpath:rest-services.xml" /> --> </beans>
7、Web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>SpringCXFService</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/classes/applicationContext.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
8、访问测试
http://127.0.0.1:8080/SpringCXFService/peopleService?wsdl
This XML file does not appear to have any style information associated with it. The document tree is shown below. <wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://soap.cxf.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="PeopleServiceImplService" targetNamespace="http://soap.cxf.com/"> <wsdl:types> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://soap.cxf.com/" elementFormDefault="unqualified" targetNamespace="http://soap.cxf.com/" version="1.0"> <xs:element name="People" type="tns:people"/> <xs:element name="add" type="tns:add"/> <xs:element name="addResponse" type="tns:addResponse"/> <xs:element name="del" type="tns:del"/> <xs:element name="delResponse" type="tns:delResponse"/> <xs:element name="getList" type="tns:getList"/> <xs:element name="getListResponse" type="tns:getListResponse"/> <xs:element name="getOne" type="tns:getOne"/> <xs:element name="getOneResponse" type="tns:getOneResponse"/> <xs:element name="modify" type="tns:modify"/> <xs:element name="modifyResponse" type="tns:modifyResponse"/> <xs:complexType name="del"> <xs:sequence> <xs:element minOccurs="0" name="arg0" type="tns:people"/> </xs:sequence> </xs:complexType> <xs:complexType name="people"> <xs:sequence> <xs:element minOccurs="0" name="id" type="xs:long"/> <xs:element minOccurs="0" name="name" type="xs:string"/> <xs:element minOccurs="0" name="birthday" type="xs:dateTime"/> </xs:sequence> </xs:complexType> <xs:complexType name="delResponse"> <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="getList"> <xs:sequence> <xs:element minOccurs="0" name="arg0" type="tns:people"/> </xs:sequence> </xs:complexType> <xs:complexType name="getListResponse"> <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:people"/> </xs:sequence> </xs:complexType> <xs:complexType name="add"> <xs:sequence> <xs:element minOccurs="0" name="arg0" type="tns:people"/> </xs:sequence> </xs:complexType> <xs:complexType name="addResponse"> <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="getOne"> <xs:sequence> <xs:element minOccurs="0" name="arg0" type="xs:long"/> </xs:sequence> </xs:complexType> <xs:complexType name="getOneResponse"> <xs:sequence> <xs:element minOccurs="0" name="return" type="tns:people"/> </xs:sequence> </xs:complexType> <xs:complexType name="modify"> <xs:sequence> <xs:element minOccurs="0" name="arg0" type="tns:people"/> </xs:sequence> </xs:complexType> <xs:complexType name="modifyResponse"> <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:schema> </wsdl:types> <wsdl:message name="getOneResponse"> <wsdl:part element="tns:getOneResponse" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="addResponse"> <wsdl:part element="tns:addResponse" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="delResponse"> <wsdl:part element="tns:delResponse" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="add"> <wsdl:part element="tns:add" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="getOne"> <wsdl:part element="tns:getOne" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="del"> <wsdl:part element="tns:del" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="modify"> <wsdl:part element="tns:modify" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="modifyResponse"> <wsdl:part element="tns:modifyResponse" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="getListResponse"> <wsdl:part element="tns:getListResponse" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="getList"> <wsdl:part element="tns:getList" name="parameters"></wsdl:part> </wsdl:message> <wsdl:portType name="PeopleService"> <wsdl:operation name="del"> <wsdl:input message="tns:del" name="del"></wsdl:input> <wsdl:output message="tns:delResponse" name="delResponse"></wsdl:output> </wsdl:operation> <wsdl:operation name="getList"> <wsdl:input message="tns:getList" name="getList"></wsdl:input> <wsdl:output message="tns:getListResponse" name="getListResponse"></wsdl:output> </wsdl:operation> <wsdl:operation name="add"> <wsdl:input message="tns:add" name="add"></wsdl:input> <wsdl:output message="tns:addResponse" name="addResponse"></wsdl:output> </wsdl:operation> <wsdl:operation name="getOne"> <wsdl:input message="tns:getOne" name="getOne"></wsdl:input> <wsdl:output message="tns:getOneResponse" name="getOneResponse"></wsdl:output> </wsdl:operation> <wsdl:operation name="modify"> <wsdl:input message="tns:modify" name="modify"></wsdl:input> <wsdl:output message="tns:modifyResponse" name="modifyResponse"></wsdl:output> </wsdl:operation> </wsdl:portType> <wsdl:binding name="PeopleServiceImplServiceSoapBinding" type="tns:PeopleService"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="del"> <soap:operation soapAction="" style="document"/> <wsdl:input name="del"> <soap:body use="literal"/> </wsdl:input> <wsdl:output name="delResponse"> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="add"> <soap:operation soapAction="" style="document"/> <wsdl:input name="add"> <soap:body use="literal"/> </wsdl:input> <wsdl:output name="addResponse"> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="getList"> <soap:operation soapAction="" style="document"/> <wsdl:input name="getList"> <soap:body use="literal"/> </wsdl:input> <wsdl:output name="getListResponse"> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="getOne"> <soap:operation soapAction="" style="document"/> <wsdl:input name="getOne"> <soap:body use="literal"/> </wsdl:input> <wsdl:output name="getOneResponse"> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="modify"> <soap:operation soapAction="" style="document"/> <wsdl:input name="modify"> <soap:body use="literal"/> </wsdl:input> <wsdl:output name="modifyResponse"> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="PeopleServiceImplService"> <wsdl:port binding="tns:PeopleServiceImplServiceSoapBinding" name="PeopleServiceImplPort"> <soap:address location="http://192.168.1.7:8080/SpringCXFService/peopleService"/> </wsdl:port> </wsdl:service> </wsdl:definitions>