我們思考發佈一個web服務需要做的工作,併進行職責的劃分。
概述
我們思考發佈一個web服務需要做的工作,併進行職責的劃分。
職責的劃分
通常我們會先制定抽象的介面,然後根據介面構造實現類。介面和實現類都完成了,再實施發佈。所以,服務端的角色可以劃分為:服務介面、服務實現、服務發佈者。
服務端的實現
功能:將阿拉伯數字轉換成中文數字序列。
服務介面
package cn.ljl.sand.jws.chapter1.service; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; @WebService public interface InterpretService { @WebResult(name = "chnum") // 預設的result的name是return public String interpret( @WebParam(name = "num")/* 預設的參數名是arg0, arg1... */int num); }
註意:
- WebResult註解
用以指定返回結果的名稱,不指定則預設為return - WebParam註解
用以指定參數的名稱,不指定則預設為arg0, arg1...
服務實現類
package cn.ljl.sand.jws.chapter1.service; import javax.jws.WebService; @WebService(endpointInterface = "cn.ljl.sand.jws.chapter1.service.InterpretService") public class InterpretServiceImpl implements InterpretService { public static final String[] CH_NUMS = // 強制格式化換行 { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" }; @Override public String interpret(int num) { StringBuilder builder = new StringBuilder(Integer.toString(num) .length()); for (int digit = num % 10; num > 0; num = num / 10, digit = num % 10) { builder.append(CH_NUMS[digit]); } builder.reverse(); return builder.toString(); } }
註意:
- 服務實現類也需要用WebService進行註解,並且以endpointInterface指定所繼承的介面。
- 預設生成的代碼可能會生成WebResult、WebParam的註解內容,但是這些不是必要的。
服務發佈者
package cn.ljl.sand.jws.chapter1.service; import javax.xml.ws.Endpoint; public class InterpretServicePublisher { public static void main(String[] args) { String address = "http://localhost:6666/service/interpret"; InterpretService service = new InterpretServiceImpl(); Endpoint.publish(address, service); } }
根據代碼可知,wsdl的URL是http://localhost:6666/service/interpret?wsdl。可以在瀏覽器輸入這個地址,瀏覽下其內容。但是我們還沒有準備好對其進行解釋。