使用CXF 开发SOAP webservice 服务端实例
来源:互联网 发布:f调8孔洞箫制作数据 编辑:程序博客网 时间:2024/05/17 05:16
由于在之前做的一些项目中写数据交换的接口用的都是soap 的webService;所以在昨天晚上特地写了一个基于soap协议 webService的demo实例。在贴出相关demo之前,先对几个名词进行解释:
一个web service 服务的三要素:
SOAP协议:(Simple Object Access Protocol,即简单对象访问协议)是交换数据的一种协议规范,使用在计算机网络Web服务(web service)中,交换带结构信息;SOAP是基于XML。
WSDL:一个XML格式文档,用以描述服务端口访问方式和使用协议的细节。通常用来辅助生成服务器和客户端代码及配置信息。
UUDI:一个用来发布和搜索WEB服务的协议,应用程序可借由此协议在设计或运行时找到目标WEB服务。
好了,接下来来说说我的那个实例;我是模拟从客户端往服务端同步用户数据的接口服务;是使用Apache CXF进行开发的。首先我要先在Eclipse中创建一个maven工程项目; 然后在pom.xml 引入需要的jar (注意 我是基于spring 集成的 ,使用jetty 进行部署的;所以也要导入对应的jar 和插件)。
然后创建并且配置WSDL,和XSD 文件;然后在pom.xml 中引入apche cxf 支持自动生成WSDL代码的插件:
交互请求、响应实体的soapDemo.xsd 代码:
<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.deppon.com/soap/soapDemoService"xmlns:tns="http://www.deppon.com/soap/soapDemoService"elementFormDefault="qualified"> <annotation><documentation>soap webService demo </documentation></annotation><element name="demoRequest" type="tns:demoRequest" /><element name="demoResponse" type="tns:demoResponse" /><complexType name="demoRequest"> <sequence> <element name="userName" minOccurs="1" maxOccurs="1"type="string"><annotation><documentation>用户名</documentation></annotation></element> <element name="userCode" minOccurs="1" maxOccurs="1"type="string"><annotation><documentation>用户工号</documentation></annotation></element> <element name="title" minOccurs="1" maxOccurs="1"type="string"><annotation><documentation>职位</documentation></annotation></element> </sequence></complexType><complexType name="demoResponse"><sequence><element name="userName" minOccurs="1" maxOccurs="1"type="string"><annotation><documentation>用户名</documentation></annotation></element><element name="resultCode" type="string"><annotation><documentation>1 成功 ,0 系统异常</documentation></annotation></element><element name="resultReason" type="string"><annotation><documentation>错误原因</documentation></annotation></element></sequence></complexType></schema>交互服务Service的WSDL配置:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.deppon.com/soap/soapDemoService" xmlns:tns_domain="http://www.deppon.com/soap/soapDemoService" xmlns:tns_header="http://www.deppon.com/soap/header" xmlns:tns_exception="http://www.deppon.com/soap/exception" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="soapDemoServiceImpl" targetNamespace="http://www.deppon.com/soap/soapDemoService" > <wsdl:types> <xsd:schema targetNamespace="http://www.deppon.com/soap/soapDemoService"> <xsd:include schemaLocation="soapDemo.xsd"></xsd:include> </xsd:schema> <xsd:schema targetNamespace="http://www.deppon.com/soap/header"><xsd:include schemaLocation="ESBHeader.xsd" /></xsd:schema><xsd:schema targetNamespace="http://www.deppon.com/soap/exception"><xsd:include schemaLocation="CommonException.xsd" /></xsd:schema> </wsdl:types> <wsdl:message name="ESBHeader"><wsdl:part name="header" element="tns_header:esbHeader" ></wsdl:part></wsdl:message><wsdl:message name="CommonException"><wsdl:part name="commonExceptionInfo" element="tns_exception:commonExceptionInfo" ></wsdl:part></wsdl:message><wsdl:message name="demoRequest"><wsdl:part name="esbHeader" element="tns_header:esbHeader"></wsdl:part><wsdl:part name="demoRequest" element="tns_domain:demoRequest"></wsdl:part></wsdl:message><wsdl:message name="demoResponse"><wsdl:part name="esbHeader" element="tns_header:esbHeader"></wsdl:part><wsdl:part name="demoResponse" element="tns_domain:demoResponse"></wsdl:part></wsdl:message> <wsdl:portType name="soapDemoService"> <wsdl:operation name="soapDemoService"> <wsdl:input message="tns:demoRequest"/> <wsdl:output message="tns:demoResponse"/> <wsdl:fault name="commonException" message="tns:CommonException"></wsdl:fault> </wsdl:operation> </wsdl:portType> <wsdl:binding name="SoapDemoServiceImplBinding" type="tns:soapDemoService"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="soapDemoService" xmlns="http://www.deppon.com/soap/soapDemoService"><!-- <soap:operation soapAction="http://www.deppon.com/ows/waybillStatusBack"/> --> <wsdl:input> <soap:header use="literal" part="esbHeader" message="tns:demoRequest"></soap:header> <soap:body use="literal" parts="demoRequest"/> </wsdl:input> <wsdl:output> <soap:header use="literal" part="esbHeader" message="tns:demoResponse"></soap:header> <soap:body use="literal" parts="demoResponse"/> </wsdl:output> <wsdl:fault name="commonException" xmlns="http://www.deppon.com/soap/exception"><soap:fault use="literal" name="commonException"/></wsdl:fault> </wsdl:operation> </wsdl:binding> <wsdl:service name="SoapDemoServiceImpl"> <wsdl:port binding="tns:SoapDemoServiceImplBinding" name="SoapDemoServiceImplPort"> <soap:address location="http://10.224.70.24:8090/test/com/soapDemoService"/> </wsdl:port> </wsdl:service></wsdl:definitions>在pom.xml 中配置cxf 自动生成WSDL的插件:
<!-- wsdl生成service插件 --><plugin><groupId>org.apache.cxf</groupId><artifactId>cxf-codegen-plugin</artifactId><version>${cxf-version}</version><executions><execution><id>generate-sources</id><phase>generate-sources</phase><configuration><fork>once</fork><additionalJvmArgs>-Dfile.encoding=UTF-8</additionalJvmArgs><!-- <encoding>UTF-8</encoding> --><defaultOptions><extraargs><extraarg>-fe</extraarg><extraarg>jaxws21</extraarg></extraargs></defaultOptions><!-- <sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot> --><sourceRoot>${basedir}/src/main/java/</sourceRoot> <wsdlOptions><wsdlOption> <wsdl>${basedir}/src/main/resources/wsdl/com/soap/test/server/soapDemoService.wsdl</wsdl> </wsdlOption> </wsdlOptions> </configuration><goals><goal>wsdl2java</goal></goals></execution></executions></plugin>接下来,通过插件 生成对应的request、response实体类,和Service;并且创建实现服务端接口的实现类UserServiceImpl:
UserServiceImpl的代码:
<pre name="code" class="java">/** * webService 服务端实现类 * @author leo * */public class UserServiceImpl implements SoapDemoService{//ᅰᅱᄒ테ᅡᄐprivate static final Log LOG = LogFactory.getLog(UserServiceImpl.class);/** * soap 接口实现的方法 */@Overridepublic DemoResponse soapDemoService(Holder<ESBHeader> esbHeader,DemoRequest demoRequest) throws CommonException {DemoResponse res =new DemoResponse();if(null != demoRequest ){LOG.info(demoRequest.getUserName());LOG.info(demoRequest.getTitle());res.setResultCode("1");res.setResultReason("login sucess");}return res;}}
接下来配置web.xml 和配置sping.xml中的接口服务:
<?xml version="1.0" encoding="UTF-8"?><web-app id="web" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name> alert job</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:com/deppon/rest/META-INF/ds-spring.xml</param-value></context-param> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping><!-- 日志配置文件的位置 --><context-param><param-name>log4jConfigLocation</param-name><param-value>/WEB-INF/log4j.xml</param-value></context-param><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- webApp 配置 --><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>/soap/*</url-pattern> </servlet-mapping><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list></web-app>
spring配置文件中配置服务:
<bean id="userServiceImpl" class="com.deppon.soap.server.Service.UserServiceImpl"/><!-- web service--><jaxws:endpoint id="userServiceImplDemo" implementor="#userServiceImpl" address="/userServiceImpl"><jaxws:features><bean class="org.apache.cxf.feature.LoggingFeature"></bean></jaxws:features><jaxws:inInterceptors><bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/></jaxws:inInterceptors><jaxws:outInterceptors><bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/></jaxws:outInterceptors>
配置好了这些,之后一个SOAP的webService 接口的服务端就写好了。然后启动jetty 服务,测试一下看下服务是否已经通了。
说明服务端已经通了,
0 0
- 使用CXF 开发SOAP webservice 服务端实例
- 基于CXF框架下的SOAP Webservice服务端接口开发
- CXF WebService 服务端开发
- 使用CXF 开发SOAP 的webService接口客户端
- 使用CXF简单开发webservice的实例
- CXF开发webservice实例
- WebService-03-使用CXF开发服务端和客户端
- CXF结合Spring 开发SOAP WebService服务
- CXF SOAP WebService服务端遇到的一些报错
- WebService开发 使用Soap
- 使用 CXF 开发 SOAP 服务
- 使用cxf开发webservice
- 使用cxf 开发webservice
- 使用CXF开发WebService
- 使用cxf开发WebService
- 使用CXF开发WebService
- 使用cxf开发webservice
- cxf开发webservice服务端和客户端
- hibernate缓存
- C Language:代码编程规范
- 谷歌教你25招构建一个优秀的移动网站
- hdu1172猜数字
- 二叉树遍历的非递归算法
- 使用CXF 开发SOAP webservice 服务端实例
- Opencv学习笔记:线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- 基数排序 Java
- Html Dom 基础
- PostgreSQL数据库内核分析 笔记(这本书没有怎么很好的看,主要就是一些数据结构、概念和流程的文字介绍)
- Shell编程之Shift的用法
- 从Objective-C到Swift,你必须会的(一)#pragma mark
- Qt5支持中文
- Markov chain的基本知识