1.什么是webservice?
webservice是一種遠程資源調用技術,它的實現方式主要分為兩種,第一種是jaxws方式,它是面向方法的,它的數據類型是xml是基於soap實現傳輸;第二種是jaxrs方式,它是面向資源的,它的數據類型是xml或json是基於http協議實現傳輸。
2.jaxws簡單應用
服務端:
第一步:創建一個簡單的web項目,略
第二步:添加webService的依賴jar包,配置web.xml
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.0.1</version> </dependency>
<servlet> <servlet-name>CXFService</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFService</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
第三步:編寫代碼
//接口定義 @WebService public interface ServiceUI { @WebMethod String sayHello(String name); @WebMethod List<Car> fingCarsByUser(User user); } //接口實現 @WebService(endpointInterface="cn.linc.cxf.interfaces.ServiceUI",serviceName="userService") public class ServiceUIImpl implements ServiceUI { public String sayHello(String name) { return "hello "+name ; } public List<Car> fingCarsByUser(User user) { if ("xiaoming".equals(user.getUsername())) { List<Car> cars = new ArrayList<Car>(); Car car1 = new Car(); car1.setId(1); car1.setCarName("大眾"); car1.setPrice(200000d); cars.add(car1); Car car2 = new Car(); car2.setId(2); car2.setCarName("現代"); car2.setPrice(170000d); cars.add(car2); return cars; } else { return null; } } }
第四步:啟動項目,查看wsdl說明書
這里面的路徑注意cxf在web中的配置:{在配置tomcat時注意項目名的配置,我這里沒有配置}
參數說明:
@WebService:在接口上申明,表示該接口是一個webService服務;
@WebMethod:在接口方法上聲明,表示該方法是一個webService服務方法;
@WebService(endpointInterface="cn.linc.cxf.interfaces.ServiceUI",serviceName="userService"):在該接口實現類定義;
endpointInterface:表示接口服務終端接口名;
serviceName:服務名稱;
wsdl解讀:有五個節點:服務視圖,服務協議和參數的描述,服務實現,參數描述,參數類型描述。
客戶端:
第一步:根據生成的wsdl文檔生成客戶端代碼,並放置在一個新建的客戶端項目中;
生成命令:wsimport -s '存放路徑' 'wsdl路徑'
第二步:配置webService的客戶端
<jaxws:client id="serviceUi" address="http://127.0.0.1:8080/cxf-jax-ws-spring-server/services/serviceUi?wsdl" serviceClass="cn.linc.cxf.interfaces.ServiceUI"> </jaxws:client>
第三步:編寫測試類
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="classpath:applicationContext.xml") public class TestDemo { @Autowired public ServiceUI serviceUi; @Test public void demo(){ String s = serviceUi.sayHello("凱迪拉克"); System.out.println(s); } }
效果展示:
原理解析:
可以分為三個角色:服務提供者,服務消費者,服務注冊中心uddi
首先由服務提供者發布服務並且在注冊中心uddi進行注冊
然后由服務消費者訂閱服務,在注冊中心uddi上查詢到符合條件的服務
服務注冊中心返回服務條件服務的描述文件給服務訂閱者
訂閱者根據描述文件進行服務端的服務調用,並返回數據。