通過前面兩節(jié)的講解,相信你對CXF框架開始有一些認(rèn)識了。在當(dāng)今項(xiàng)目開發(fā)中,Spring框架基上都用到過,那么它怎么與CXF結(jié)合呢,這就是我們這一間要講的內(nèi)容。好了,閑話少說。 首先,在前面基礎(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)入完之后,我們還不能開如干活,配置幾薦參數(shù),便于下一步工作。 配置CXF框架 我的電腦->屬性->高級->環(huán)境變量 創(chuàng)建一個(gè)CXF_HOEM變量,值為CXF框架所在根目錄,修改一下 CLASSPATH=%CXF_HOME%/lib;PATH=%CXF_HOME%/bin;這時(shí)有會問為什么要配置這兩個(gè)參數(shù)據(jù)呢,其實(shí)配置這兩個(gè)參數(shù)用途與配置JAVA變量一下,在DOS窗口下直接運(yùn)行java2ws,wsdl2java等可執(zhí)行文件。當(dāng)然你沒有配置也可以進(jìn)到CXF框架的bin目錄下遠(yuǎn)行這個(gè)幾個(gè)可執(zhí)行文件。 配置好了后,你在DOS窗口下輸入java2ws,看看配置是否效。肯定沒有成功,原因是使用6.0的JDK,我們還得在%JAVA_HOME%/jre/lib目錄下創(chuàng)建一下endorsed文件夾,將jaxb-api.jar,jaxws.jar拷貝進(jìn)去?,F(xiàn)在再運(yùn)一下java2ws,成功運(yùn)行,配置生效了。 基本工作做得差不多,整合spring框架正式開始: 第一步:新一個(gè)web project,導(dǎo)入要用到.jar包,其實(shí)CXF利用org.apache.cxf.transport.servlet.CXFServlet來攔截所有web請求,將其配置到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框架配置好了,我就來開發(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è)涉及到對象,這一點(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整合,沒有涉及到數(shù)據(jù)庫,因就打印一下傳遞過來的對象內(nèi)容來證明整合成功。與spring,hibernate整合后面章節(jié)會講到,請留意后面章節(jié)。 傳遞對象,當(dāng)然創(chuàng)建對象啦 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() { } } 做了這么多工作,有人又會問,怎么現(xiàn)在做的與spring框架就沒一點(diǎn)聯(lián)系,呵呵,確實(shí)是這樣。開戲開場了,利用Spring來發(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ù)端開發(fā)工作基本結(jié)束。現(xiàn)在打包部署到Tomcat6.0.18(本人目前使用的測試服務(wù)器,你當(dāng)然可以使用別的服務(wù)器) 服務(wù)器啟動完成后,打開瀏覽器在地址欄中輸入http://localhost:port/project name/Service?wsdl看看接口是否發(fā)成功。 接下來就是開發(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ù)器沒停止) 敲擊Enter,wsdl2java工具幫你將發(fā)布出來的wsdl文件轉(zhuǎn)換成webservice接口,到指定目錄下將com.itdcl.service拷到剛才另建的web project的src目錄下。 現(xiàn)在,我們就來創(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ì)的朋友就會問了,ServerUserInfo 這個(gè)類那來的,你進(jìn)到com.itdcl.service目錄下就會看到,是WebService發(fā)布出來的。 到目前為止,客戶端還沒有完成,你沒有看到程序中ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");這個(gè)bean.xml就是spring框架來注刪除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)行客戶端程序了,沒有異常拋出,打印出:name:Josen,則恭喜你CXF框架與Spring整合成功。 |
|