cxf动态配置URL
2009-12-29 16:19
183 查看
创建项目骨架
启动Eclipse,创建一个JavaProject,如果是WTP的话,可以直接创建一个J2EE的Web项目,我们取名为CXF_Server_01,并设置编译的output路径为WEB-INF/classes目录,方便直接部署应用程序。
目录结构如下图所示:
为了方便起见,我们直接拷贝%CXF_HOME%/lib目录下的所有.jar文件到CXF_Server_01项目的WEB-INF/lib目录下,也可以根据前面“CXF安装包”章节所述的各个jar包的作用范围选择仅需要的.jar文件。在Eclipse里刷新后,可以看到如下结构:
并在CXF_Server_01项目属性里将这些.jar加到JavaBuildPath当中去,如下图:
这样,项目的基本骨架已经创建完成,接下来开始编写接口与具体实现的代码了。
接口类创建
在项目的src目录中新建一个ws.cxf包,并在里面创建接口类ISurveyService.java,为了简单示示例起见,我们仅创建一个方法publicStringvote(Stringusername,intpoint);这里要注意的是我们在接口上用@WebService注解标明这是一个即将暴露为WebService的接口,并将里面的方法都暴露出去。完整的接口代码清单如下
具体类实现
针对接口的定义,我们创建一个相应的实现类,并将其定义在ws.cxf.impl包中,完整的代码清单如下:
Spring配置
在src目录中创建beanRefServer.xml文件,用来定义Spring的Bean的配置,CXF支持Spring2.0Schema标签配置方式,并且提供快捷暴露WebServices的标签。
首先,我们需要引入Spring与CXF的命名空间(namespace),如下:
这样,我们可以使用Spring与CXF的标签配置了。接着,我们需要引入我们所需要的CXF的Bean定义文件,如下:
接着定义我们具体实现的Bean,这个Bean的定义与Spring普通的Bean定义是一样的:
最后,将定义的Bean暴露出去成为WebService服务,通过CXF提供的Schema标签配置<jaxws:server>,这样定义的配置显得更加简洁与方便,定义如下:
在配置中,serviceClass的值是我们的接口类的名称,address为将要暴露出去的WebService访问地址。比如:/SurveyWebService,那么客户端消费WebService的地址就会成为http://host:port/WebAPPName/SurveyWebService,与之相应的WSDL地址则为:http://host:port/WebAPPName/SurveyWebService?wsdl。
Web应用配置
由于我们的示例是需要通过Servlet容器进行服务暴露,因此需要配置相对应的web.xml文件,首先是增加Spring的配置文件加载Listener,如下:
接下来配置CXFServlet的定义,以及它的映射,如下:
我们将之映射为/*。这样,服务端的代码与配置就全部完成了,接下来就是将应用程序部署到Web容器中去,并验证服务是否正常发布。
消费服务
回到Eclipse开发平台,我们在这里使用cxf动态配置URL(使用beanRefClient.xml配置文件来配置可以参考--技术文档/webservice描述.doc),创建一个JavaProject,如果是WTP的话,可以直接创建一个J2EE的Web项目,我们取名为CXF_Client_01准备工作参见:创建项目骨架的系列步骤。
使用cxf动态配置URL,仅仅需要创建与具体webservice技术无关的业务接口就可以了,不需要引入beanRefClient.xml配置文件。利用代理类进行发布服务和获取服务:
接下来我们编写访问的具体代码,在test目录下创建ws.cxf.client包,然后创建SurveyServiceClient.java,完整的代码如下:
直接运行以上客户端消费程序,一共调用了三次WebService,并得到结果如下:
于是服务正常地得到了调用,并且能够正确地返回结果,
启动Eclipse,创建一个JavaProject,如果是WTP的话,可以直接创建一个J2EE的Web项目,我们取名为CXF_Server_01,并设置编译的output路径为WEB-INF/classes目录,方便直接部署应用程序。
目录结构如下图所示:
为了方便起见,我们直接拷贝%CXF_HOME%/lib目录下的所有.jar文件到CXF_Server_01项目的WEB-INF/lib目录下,也可以根据前面“CXF安装包”章节所述的各个jar包的作用范围选择仅需要的.jar文件。在Eclipse里刷新后,可以看到如下结构:
并在CXF_Server_01项目属性里将这些.jar加到JavaBuildPath当中去,如下图:
这样,项目的基本骨架已经创建完成,接下来开始编写接口与具体实现的代码了。
接口类创建
在项目的src目录中新建一个ws.cxf包,并在里面创建接口类ISurveyService.java,为了简单示示例起见,我们仅创建一个方法publicStringvote(Stringusername,intpoint);这里要注意的是我们在接口上用@WebService注解标明这是一个即将暴露为WebService的接口,并将里面的方法都暴露出去。完整的接口代码清单如下
packagews.cxf; importjavax.jws.WebService; @WebService publicinterfaceISurveyService { /** *@paramusername名字 *@parampoint分数 *@return */ publicStringvote(Stringusername,intpoint); } |
针对接口的定义,我们创建一个相应的实现类,并将其定义在ws.cxf.impl包中,完整的代码清单如下:
packagews.cxf.impl; importjavax.jws.WebService; importws.cxf.ISurveyService; @WebService publicclassSurveyServiceimplementsISurveyService { privateStringexcludeName; privateintleastPonit; publicStringvote(Stringusername,intpoint) { Stringresult=""; if(excludeName.equals(username)) { result="您不能重复进行投票!"; } else { result="谢谢您的投票!"; if(point<leastPonit) { result+="您的投票分数太低!"; } else { result+="您的投票分数通过审核!"; } } returnresult; } //ForIoC publicStringgetExcludeName() { returnexcludeName; } publicvoidsetExcludeName(StringexcludeName) { this.excludeName=excludeName; } publicintgetLeastPonit() { returnleastPonit; } publicvoidsetLeastPonit(intleastPonit) { this.leastPonit=leastPonit; } } |
在src目录中创建beanRefServer.xml文件,用来定义Spring的Bean的配置,CXF支持Spring2.0Schema标签配置方式,并且提供快捷暴露WebServices的标签。
首先,我们需要引入Spring与CXF的命名空间(namespace),如下:
<beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" |
<!--ImportApacheCXFBeanDefinition--> <importresource="classpath:META-INF/cxf/cxf.xml"/> <importresource="classpath:META-INF/cxf/cxf-extension-soap.xml"/> <importresource="classpath:META-INF/cxf/cxf-servlet.xml"/> |
<!--SurveyService--> <beanid="surveyService"class="ws.cxf.impl.SurveyService"> <propertyname="excludeName"value="Michael"/> <propertyname="leastPonit"value="10"/> </bean> |
<!--ExposeSurveyWebService--> <jaxws:serverid="surveyWebService" serviceClass="ws.cxf.ISurveyService" address="/SurveyWebService"> <jaxws:serviceBean> <refbean="surveyService"/><!--要暴露的bean的引用--> </jaxws:serviceBean> </jaxws:server> |
Web应用配置
由于我们的示例是需要通过Servlet容器进行服务暴露,因此需要配置相对应的web.xml文件,首先是增加Spring的配置文件加载Listener,如下:
<!--SpringConfigLocation--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/beanRefServer.xml</param-value> </context-param> <!--SpringContextLoaderListener--> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> |
<!--ApacheCXFServlet--> <servlet> <servlet-name>CXFServlet</servlet-name> <display-name>CXFServlet</display-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!--CXFServletMapping--> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> |
消费服务
回到Eclipse开发平台,我们在这里使用cxf动态配置URL(使用beanRefClient.xml配置文件来配置可以参考--技术文档/webservice描述.doc),创建一个JavaProject,如果是WTP的话,可以直接创建一个J2EE的Web项目,我们取名为CXF_Client_01准备工作参见:创建项目骨架的系列步骤。
使用cxf动态配置URL,仅仅需要创建与具体webservice技术无关的业务接口就可以了,不需要引入beanRefClient.xml配置文件。利用代理类进行发布服务和获取服务:
packagews.cxf.impl; importorg.apache.cxf.jaxws.JaxWsProxyFactoryBean; publicclassJaxWsProxyFactoryBeanImpl{ privatestaticJaxWsProxyFactoryBeanjaxWsProxyFactoryBean; static{ jaxWsProxyFactoryBean=newJaxWsProxyFactoryBean(); } publicstaticJaxWsProxyFactoryBeangetJaxWsProxyFactoryBean(){ returnjaxWsProxyFactoryBean; } publicstaticObjectgetProxyFactoryBean(ClassserviceClass,Stringaddress){ //设置服务接口类 jaxWsProxyFactoryBean.setServiceClass(serviceClass); /** address也就是wsdl文件中的<soap:addresslocation=" */ jaxWsProxyFactoryBean.setAddress(address); //创建服务,返回一个代理对象 returnjaxWsProxyFactoryBean.create(); } } |
packagews.cxf.client; importorg.apache.cxf.jaxws.JaxWsProxyFactoryBean; importws.cxf.inter.ISurveyService; importws.cxf.impl.JaxWsProxyFactoryBeanImpl; publicclassSurveyServiceClient { privateJaxWsProxyFactoryBeanidentityValidateServiceClientFactory; publicstaticvoidmain(String[]args) { Stringaddress="http://192.168.0.63:8080/CXF_Server_01/cxf/SurveyWebService"; ISurveyServicesurveyService=(ISurveyService)JaxWsProxyFactoryBeanImpl.getProxyFactoryBean(ISurveyService.class,address); //1、定义调查投票的变量与内容,用来发送给服务 Stringusername="Test"; intpoint=88; //调用方法进行服务消费 Stringresult=surveyService.vote(username,point); System.out.println("Result:"+result); //2、传递不一样的调查投票内容 username="Michael"; point=100; //再次调用方法进行服务消费,得到不一样的结果 result=surveyService.vote(username,point); System.out.println("Result:"+result); //3、第三次传递与调用 username="Jordan"; point=11; result=surveyService.vote(username,point); System.out.println("Result:"+result); } publicJaxWsProxyFactoryBeangetIdentityValidateServiceClientFactory(){ returnidentityValidateServiceClientFactory; } publicvoidsetIdentityValidateServiceClientFactory( JaxWsProxyFactoryBeanidentityValidateServiceClientFactory){ this.identityValidateServiceClientFactory=identityValidateServiceClientFactory; } } |
Result:谢谢您的投票!您的投票分数通过审核! Result:您不能重复进行投票! Result:谢谢您的投票!您的投票分数太低! |
相关文章推荐
- SpringBoot通过自己的配置文件或者从数据库spring security动态配置url权限
- DataGrid 动态绑定URL地址,在WebConfig中配置
- 解决ueditor中没法动态配置imageurlprefix的方法
- Android Studio Gradle 多渠道自动打包,动态修改HostUrl,签名apk,混淆配置详解
- shiro拦截url动态配置在数据库
- spring 整合shiro ,并实现动态url 配置
- Mybatis 动态读取配置文件driver、url、username、username
- nutch如何才能抓取到动态的url,配置文件解析
- (新)解决php版本ueditor中动态配置图片URL前缀(imageurlprefix)的方法
- spring security动态配置url权限
- spring security动态配置url权限的2种实现方法
- SpringMVC几个核心类(控制器核心类,加载配置文件核心类,处理url影射核心类,处理视图资源核心类,方法动态调用核心类)
- activiti 动态配置 activiti 监听引擎启动和初始化(高级源码篇)
- 在shiro当设置sessionIdCookie配置的domain和访问url不匹配时,每次请求都会重新生成session
- Oracle监听配置(四)--如何实现静态、动态注册
- Mybatis学习之----手写配置文件时如何进行动态sql配置
- mybatis 动态SQL配置
- jquery 动态载入页面,并且保证 url 变动
- springboot整合Quartz实现动态配置定时任务
- (转)秒杀系统中如何动态生成下单随机URL