通過(guò)前面兩節(jié)的講解,,相信你對(duì)CXF框架開(kāi)始有一些認(rèn)識(shí)了。在當(dāng)今項(xiàng)目開(kāi)發(fā)中,,Spring框架基上都用到過(guò),,那么它怎么與CXF結(jié)合呢,這就是我們這一間要講的內(nèi)容,。好了,,閑話少說(shuō)。 首先,,在前面基礎(chǔ)上再導(dǎo)入幾個(gè)spring要用到的幾個(gè).jar包: spring-core.jar spring-jdbc.jar spring-context.jar spring-orm.jar spring-beans.jar spring-tx.jar 包導(dǎo)入完之后,,我們還不能開(kāi)如干活,配置幾薦參數(shù),,便于下一步工作,。 配置CXF框架 我的電腦->屬性->高級(jí)->環(huán)境變量 創(chuàng)建一個(gè)CXF_HOEM變量,值為CXF框架所在根目錄,,修改一下 CLASSPATH=%CXF_HOME%/lib;PATH=%CXF_HOME%/bin;這時(shí)有會(huì)問(wèn)為什么要配置這兩個(gè)參數(shù)據(jù)呢,,其實(shí)配置這兩個(gè)參數(shù)用途與配置JAVA變量一下,在DOS窗口下直接運(yùn)行java2ws,wsdl2java等可執(zhí)行文件,。當(dāng)然你沒(méi)有配置也可以進(jìn)到CXF框架的bin目錄下遠(yuǎn)行這個(gè)幾個(gè)可執(zhí)行文件,。 配置好了后,你在DOS窗口下輸入java2ws,,看看配置是否效,。肯定沒(méi)有成功,,原因是使用6.0的JDK,,我們還得在%JAVA_HOME%/jre/lib目錄下創(chuàng)建一下endorsed文件夾,,將jaxb-api.jar,jaxws.jar拷貝進(jìn)去。現(xiàn)在再運(yùn)一下java2ws,成功運(yùn)行,,配置生效了,。 基本工作做得差不多,整合spring框架正式開(kāi)始: 第一步:新一個(gè)web project,導(dǎo)入要用到.jar包,,其實(shí)CXF利用org.apache.cxf.transport.servlet.CXFServlet來(lái)攔截所有web請(qǐng)求,,將其配置到web.xml中。配置如下: Java代碼 收藏代碼 <web-app> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/classes/applicationContext-*.xml,/WEB-INF/classes/webservice.xml </param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>CXFServlet</servlet-name> <display-name>CXF Servlet</display-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app> 注意一下綠色字體 CXF框架配置好了,,我就來(lái)開(kāi)發(fā)一個(gè)WebService接口 Java代碼 收藏代碼 @WebService public interface IService { //public void save(@WebParam(name="info")String xml); public void save(@WebParam(name="dto")UserInfoDTO dto,@WebParam(name="flag")boolean flag); public void update(@WebParam(name="info")String xml); public void delete(@WebParam(name="id")int id); public @WebResult(name="String")String get(@WebParam(name="id")int id); } 這里面有四個(gè)方法,,其中有一個(gè)涉及到對(duì)象,這一點(diǎn)前面一節(jié)講到怎么處理它,。放在這里是再回顧前節(jié)內(nèi)容,。 創(chuàng)建一個(gè)WebService接口實(shí)現(xiàn)類 Java代碼 收藏代碼 @WebService public class ServiceImpl implements IService { private Logger log = LoggerFactory.getLogger(ServiceImpl.class); public void delete(int id) { log.info("delete id is {} user"+id); } public void save(UserInfoDTO dto,boolean flag) { System.out.println("name:"+dto.getName()); } public void update(String xml) { } public String get(int id){ return null; } } 由于本節(jié)只講解與Spring整合,,沒(méi)有涉及到數(shù)據(jù)庫(kù),,因就打印一下傳遞過(guò)來(lái)的對(duì)象內(nèi)容來(lái)證明整合成功。與spring,hibernate整合后面章節(jié)會(huì)講到,,請(qǐng)留意后面章節(jié),。 傳遞對(duì)象,,當(dāng)然創(chuàng)建對(duì)象啦 Java代碼 收藏代碼 @XmlType(name="ServerUserInfo") @XmlAccessorType(XmlAccessType.FIELD) public class UserInfoDTO implements java.io.Serializable { private static final long serialVersionUID = -4666026219400887433L; private Integer id; private String name; private Integer age; private Integer address; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Integer getAddress() { return address; } public void setAddress(Integer address) { this.address = address; } public UserInfoDTO() { } } 做了這么多工作,有人又會(huì)問(wèn),,怎么現(xiàn)在做的與spring框架就沒(méi)一點(diǎn)聯(lián)系,,呵呵,確實(shí)是這樣,。開(kāi)戲開(kāi)場(chǎng)了,利用Spring來(lái)發(fā)布WebService接口: Java代碼 收藏代碼 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www./schema/beans" xmlns:xsi="http://www./2001/XMLSchema-instance" xmlns:jaxws="http://cxf./jaxws" xsi:schemaLocation=" http://www./schema/beans http://www./schema/beans/spring-beans-2.0.xsd http://cxf./jaxws http://cxf./schemas/jaxws.xsd"> <!--導(dǎo)入與CXF框架有關(guān)的xml--> <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" /> <!--布布WebService接口--> <jaxws:endpoint id="service" implementor="com.itdcl.service.ServiceImpl" address="/Service"> </jaxws:endpoint> </beans> 服務(wù)端開(kāi)發(fā)工作基本結(jié)束?,F(xiàn)在打包部署到Tomcat6.0.18(本人目前使用的測(cè)試服務(wù)器,你當(dāng)然可以使用別的服務(wù)器) 服務(wù)器啟動(dòng)完成后,,打開(kāi)瀏覽器在地址欄中輸入http://localhost:port/project name/Service?wsdl看看接口是否發(fā)成功,。 接下來(lái)就是開(kāi)發(fā)一個(gè)客戶端了。 另建一個(gè)web project,,現(xiàn)在前面的參數(shù)配置要起作用了,,cmd進(jìn)入DOS環(huán)境下輸入wsdl2java -p com.itdcl.service(自定義包名) http://localhost:port/project name/Service?wsdl(前提是服務(wù)器沒(méi)停止) 敲擊Enter,wsdl2java工具幫你將發(fā)布出來(lái)的wsdl文件轉(zhuǎn)換成webservice接口,,到指定目錄下將com.itdcl.service拷到剛才另建的web project的src目錄下,。 現(xiàn)在,我們就來(lái)創(chuàng)建一個(gè)客戶端程序: Java代碼 收藏代碼 public class SampleClient { ublic static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "beans.xml"); IService service = (IService)context.getBean("service"); ServerUserInfo userInfo = new ServerUserInfo(); userInfo.setAddress(1); userInfo.setAge(100); userInfo.setName("Jason"); service.save(userInfo,true); service.delete(1); } 看得仔細(xì)的朋友就會(huì)問(wèn)了,,ServerUserInfo 這個(gè)類那來(lái)的,,你進(jìn)到com.itdcl.service目錄下就會(huì)看到,是WebService發(fā)布出來(lái)的。 到目前為止,,客戶端還沒(méi)有完成,,你沒(méi)有看到程序中ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");這個(gè)bean.xml就是spring框架來(lái)注刪除WebService接口的。好啦,,創(chuàng)建一個(gè)bean.xml,,內(nèi)容如下: Java代碼 收藏代碼 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www./schema/beans" xmlns:xsi="http://www./2001/XMLSchema-instance" xmlns:jaxws="http://cxf./jaxws" xsi:schemaLocation=" http://www./schema/beans http://www./schema/beans/spring-beans-2.0.xsd http://cxf./jaxws http://cxf./schemas/jaxws.xsd"> <jaxws:client id="service" address="http://localhost:9999/cxf/Service" serviceClass="com.itdcl.service.IService" /> </beans> 留意一下綠色字體 剩下的事就是運(yùn)行客戶端程序了,沒(méi)有異常拋出,,打印出:name:Josen,則恭喜你CXF框架與Spring整合成功,。 |
|
來(lái)自: CevenCheng > 《CXF》