jax-ws 實現webservice

   文章中http://5148737.blog.51cto.com/5138737/1604472 中咱們曾談到,JAX-WS能夠實現webservice,與axis,cxf不一樣的是,JAX-WS是一種規範。java

  1、什麼是jax-wsweb

     JAX-WS規範是一組XML web services的JAVA API,JAX-WS容許開發者能夠選擇RPC-oriented或者message-oriented 來實現本身的web serviceside


2、jax-ws與jax-rpc的關係測試

      Sun最開始的web services的實現是JAX-RPC 1.1 (JSR 101)。這個實現是基於Java的RPC,並不徹底支持schema規範,同時沒有對Binding和Parsing定義標準的實現。spa

   JAX-WS2.0 (JSR 224)是Sun新的web services協議棧,是一個徹底基於標準的實現。在binding層,使用的是the Java Architecture for XML Binding (JAXB, JSR 222),在parsing層,使用的是the Streaming API for XML (StAX, JSR 173),同時它還徹底支持schema規範。代理


3、使用jax-ws構建web服務orm

  使用jax-ws實現webservice的話,須要導入jax-ws的jar包,由於使用的是jdk中的jar,須要使用wsgen與wsimport兩個命令,下面一一道來:server


(1)新建java類,添加註解,@WebService標誌該類爲一個webservice,WebMethod標誌方法爲webservice的方法。htm

@WebService
public class Hello {
    
	@WebMethod
	public String sayhello(String name) {
		System.out.println("hello," +name);
		return "hello,"+name;
	}
}


(2)javac編譯該java類blog

javac   Hello.java


(3)生成wsdl等文件

   此處,使用wsgen生成WSDL和相關的xsd文件,

D:\workspace\jaxws\src>wsgen  -cp  .  com.xj.service.Hello  -wsdl

-wsdl參數表明生成webservice,缺省的話將默認不生成

- s參數表明生成的.java文件置於何處

-d 參數表明生成的編譯class文件置於何處

-r 參數表明生成的.wsdl文件與.xsd文件生成在何處

-cp參數表明classpath,即Hello.class的所在路徑


此時,能夠看到目錄中生成了wsdl與xsd文件。

(4)編寫服務端並啓動

public class test {
	public static void main(String[] args) {
		String address="http://localhost/Jaxws/HelloService";
		Endpoint.publish(address, new Hello());
		System.out.println("啓動server服務");
	}

}

測試發現不須要wsgen命令,上述方式也能夠啓動服務端,查看服務端是否啓動成功

訪問,http://localhost/Jaxws/HelloService,能夠看到wsdl文件


(5)編寫客戶端,並訪問服務端

 新建客戶端項目jaxws-client

 使用wsimport生成Java的客戶端實現

D:\workspace\jaxws-client>wsimport -p com.xj.client -keep  http://localhost/Jaxws/HelloService?wsdl

命令參數說明:

  -d:生成客戶端執行類的class文件的存放目錄

  -s:生成客戶端執行類的源文件的存放目錄

  -p:定義生成類的包名

地址爲咱們服務端中暴露的wsdl的地址,命令執行完後,能夠看到客戶端項目中生成以下文件:

wKiom1S-GlnjxxECAADwUDP55C0833.jpg


代碼實現訪問:

public class test {
	public static void main(String[] args) {
		HelloService helloService = new HelloService();
	        Hello hello = helloService.getHelloPort();
		System.out.println(hello.sayhello("sdf"));
		
	}
}

如上,建立webservice代理,獲得port,經過port能夠訪問全部的方法。


下面給出jax-ws的jar包地址

 http://yun.baidu.com/share/link?shareid=573524266&uk=2836507213

相關文章
相關標籤/搜索