webservice系統學習筆記1-使用注解創建ws服務


簡單入門之helloword,具體詳細的在后面的章節詳細介紹。

 

使用JDK自帶的jax-ws創建並發布一個簡單的webservice

在本地創建服務,然后本機訪問

1、創建服務提供接口

IMyService.java

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService
public interface IMyService {
    
    /**
     * @WebResult(name="addResult")
     *     此注解可加可不加,如果加了但不指定name屬性的值跟沒加是一樣的,
     *      加上name的效果就是在wsdl文件的定義中將該方法的返回值的名稱固定了,
     *      而不是【方法名Response】,例如add方法的返回參數的定義將為:addResponse
     * 
     * @WebParam(name="a")
     *     此注解是將方法的參數的名稱用一個有意義的名稱進行定義,
     *     如果不定義那wsdl中將是arg0、arg1....這種無意義的名稱
     * @param a
     * @param b
     * @return
     */
    @WebResult(name="addResult")
    public int add(@WebParam(name="a")int a,@WebParam(name="b")int b);
    
    @WebResult(name="loginResult")
    public boolean login(@WebParam(name="username")String username,@WebParam(name="password")String password);
}

 

2、服務接口的實現類
MyServiceImpl.java

import javax.jws.WebService;

//這里指定服務的接口類的路徑
@WebService(endpointInterface="com.yzl.ws01.IMyService")
public class MyServiceImpl implements IMyService {

    @Override
    public int add(int a, int b) {
        System.out.println("a+b=" + (a+b));
        return a+b;
    }

    @Override
    public boolean login(String username, String password) {
        if("test".equals(username) && "123456".equals(password)){
            System.out.println(username+":login success!!");
            return true;
        }
        System.out.println(username+":login failure!!");
        return false;
    }
}

3、服務發布類
RunService.java

import javax.xml.ws.Endpoint;

public class RunService {
    
    public static void main(String[] args) {
        String url = "http://localhost:8888/ws01";
        Endpoint.publish(url, new MyServiceImpl());
    }
}

 

4、測試類

 

import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;

/**
 * 
 * helloword項目:測試環境跟服務器環境在同一機器同一項目內使用,服務在其他機器上則在后續介紹
 * 
 * @author Administrator
 *
 */
public class Test {

    public static void main(String[] args) throws Exception {
        
        String namespaceUrl = "http://ws01.yzl.com/";
        
        URL url = new URL("http://localhost:8888/ws01?wsdl");
        
        //使用namespaceURL和服務名創建QName
        //<definitions ... targetNamespace="http://ws01.yzl.com/" name="MyServiceImplService">
        //<service name="MyServiceImplService">
        QName qname = new QName(namespaceUrl,"MyServiceImplService");
        
        //創建服務
        Service service = Service.create(url, qname);
        
        //服務器和客戶端在同一機器時可以直接用服務的接口類,不在同一機器的具體用法見后面的章節
        IMyService client = service.getPort(IMyService.class);
        
        System.out.println(client.add(10, 20));
        System.out.println(client.login("test", "123456"));
        System.out.println(client.login("test", "111111"));
    }
}

 

 如果不想用默認的命名空間(包反轉),可以通過如下方法修改

@WebService(targetNamespace=http://com.ws.test)

需要注意的是:如果只在接口上加上這個自定義的命名空間而不在實現類上加會導致wsdl文件里命名空間出現2個不同的(一個默認、一個自定義)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM