注 : 該篇主要介紹如何使用 Jaxws 建立webservice, 如欲了解 CXF 或 AXIS, 請移步CXF建立webservice 或 AXIS 建立webservice.
#1. 建立接口和實作
@WebService public interface IService { @WebMethod public String login(String name,String pwd); } @WebService(endpointInter) public class ServiceImpl implements IService{ @Override public String login(String name, String pwd) { if(name.equals("111111") && pwd.equals("222222")){ return "登入成功"; }else{ return "使用者名或密碼錯誤"; } } }
#2. 釋出服務
執行上述操作後, 通路 http://localhost:8080/ws/IService?wsdl , 如果有出現類似 xml 的檔案内容則表示釋出成功!public class ServiceRun { public static void main(String[] args) { String url = "http://localhost:8080/ws/IService"; Endpoint.publish(url, new ServiceImpl()); System.out.println("釋出成功,使用 http://localhost:8080/ws/IService?wsdl 進行通路!"); } }
#3. 調用 (本地調用/遠端調用)
a. 本地調用public class ServiceClient { public static void main(String[] args) throws Exception { //該命名空間取生成的xml檔案中targetNamespace="http://ws/",也可通過@WebService注解種的屬性指定 String namespaceUrl = "http://ws/"; //建立通路wsdl檔案的URL URL url = new URL(" http://localhost:8080/ws/IService?wsdl"); //使用命名空間和服務名(取xml檔案中service name="ServiceImplService")來建立QName,服務名可通過@WebService注解種的屬性指定 QName qName = new QName(namespaceUrl, "ServiceImplService"); //使用URL,QName建立服務 Service service = Service.create(url,qName); //根據接口原類擷取本地接口 IService ser = service.getPort(IService.class); //調用接口方法 System.out.println(ser.login("222222", "111111")); System.out.println(ser.login("111111", "222222")); } }
b. 遠端調用
使用JDK自帶的 wsimport 指令 或 wsgen 指令.