咱們在上一章節中已經使用wsimport生成本地代理來調用webservice的服務了,其實咱們本身寫的web應用程序也是能夠發佈webservice的java
咱們發佈了webservice的話,那麼其餘人也是能夠調用咱們本身寫的webservice!android
那麼咱們怎麼自定義webservice而後發佈出去呢???ios
在jdk 1.6 版本之後 ,經過jax-ws 包提供對webservice的支持 web
寫一個實體:windows
public class Phone { private String name;//操做系統名 private String owner;//擁有者 private int total;//市場佔有率 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getOwner() { return owner; } public void setOwner(String owner) { this.owner = owner; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } }
發佈service,經過註解來讓WSDL文件更加可讀…瀏覽器
package cn.it.ws.d; import cn.it.ws.model.Phone; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.xml.ws.Endpoint; /* *手機的業務類,該業務類經過webservice 對外提供服務 * 1. 聲明: @webservice * 2. 發佈 EndPoint */ @WebService (serviceName="PhoneManager",//修改服務名 targetNamespace="http://dd.ws.it.cn") //修改命名空間 ,默認包名,取反 //聲明該業務類 對外提供webservice服務 ,默認只是對public 修飾的方法對外以webservice形式發佈 public class PhoneService { /**@WebMethod(operationName="getMObileInfo"): 修改方法名 * @WebResult(name="phone"):修改返回參數名 * @WebParam(name="osName"):修改輸入參數名 */ @WebMethod(operationName="getMObileInfo") public @WebResult(name="phone") Phone getPhoneInfo(@WebParam(name="osName")String osName){ Phone phone=new Phone(); if(osName.endsWith("android")){ phone.setName("android");phone.setOwner("google");phone.setTotal(80); }else if(osName.endsWith("ios")){ phone.setName("ios");phone.setOwner("apple");phone.setTotal(15); }else{ phone.setName("windows phone");phone.setOwner("microsoft");phone.setTotal(5); } return phone; } @WebMethod(exclude=true)//把該方法排除在外 public void sayHello(String city){ System.out.println("你好:"+city); } private void sayLuck(String city){ System.out.println("好友:"+city); } void sayGoodBye(String city){ System.out.println("拜拜:"+city); } protected void saySayalala(String city){ System.out.println("再見!"+city); } public static void main(String[] args) { String address1="http://127.0.0.1:8888/ws/phoneService"; // String address2="http://127.0.0.1:8888/ws/phoneManager"; /** * 發佈webservice服務 * 1.address:服務的地址 * 2:implementor 服務的實現對象 */ Endpoint.publish(address1, new PhoneService()); // Endpoint.publish(address2, new PhoneService()); System.out.println("wsdl地址 :"+address1+"?WSDL"); } }
@WebService // 添加了此註解,表明是一個WebService public class HelloWorld { // 非 static final private 方法默認會發布 public String sayHi(String name) { return "hello" + name; } @WebMethod(exclude=true) public void exclude(){ // 被註解排除的方法 } protected void protected1(){ //受保護的方法默認不發佈 } private void private1(){ // 私有方法默認不發佈 } public static void static1(){ // static 方法默認不發佈 } public final void final1(){ // final 方法默認不發佈 } }
生成的webservice可以在瀏覽器訪問markdown
目前WebService的協議主要有SOAP1.1和1.2。架構
Soa(Service-Oriented Architecture) :面向服務的架構,它是一種思想,IBM大力倡導是即插即用的,IBM大力提倡,但願以組裝電腦的方式來開發應用併發
組成:app
uddi (Universal Description, Discovery and Integration)統一描述、發現、集成