1. 程式人生 > >eclipse中使用jax-ws進行 webservice開發

eclipse中使用jax-ws進行 webservice開發

java的JRE中封裝了JAX-WS的jar包,1.6以上可以直接使用,很方便.

首先建立servcie類

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
@SOAPBinding(style=Style.RPC)
public interface Method1Service {
	@WebMethod
	int getCount(String Money);
}


然後建立邏輯類,繼承剛建立的servcie介面


import javax.jws.WebService;

@WebService(endpointInterface="類在專案中的位置(帶包名)")
public class Method1 implements Method1Service {

	@Override
	public int getCount(String Money) {
		// 業務邏輯
		return 5;
	}

}

定義publisher(我稱為釋出類,我把這個介面作為一個監聽器隨專案一起啟動了)


import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.xml.ws.Endpoint;
//實現監聽器介面
public class Publisher implements ServletContextListener  {

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {

	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		System.out.println("Service Start");
		// TODO Auto-generated method stub
		//endpoint釋出,前面的引數是釋出地址,後面的是邏輯類	
		Endpoint.publish("http://localhost:8081/aswebservice",new Method1());
	}
}
專案中的web.xml配置好監聽器,這樣啟動專案時就會將這個webservice啟動了,通過"釋出地址?wsdl"可以訪問介面說明檔案.

http://localhost:8081/aswebservice?wsdl

呼叫介面要先生成代理類,Myeclipse中集成了jax-ws的客戶端程式,可以直接通過wsdl文件生成,eclipse中沒有整合,我們需要通過cmd控制檯生成對應的代理類


需要在cmd控制檯中輸入這一串程式碼,-p後面是你要生成代理類的位置,生成之後可以去這個位置找代理檔案,-keep後面的是你wsdl檔案的地址


 出現這個沒有報錯說明代理類已經生成成功


這些.java檔案都是代理類的原始檔,匯入專案中就可以呼叫了

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class client {
	public static Method1 getClient(){
	 URL url = null;
	try {
		url = new URL("http://localhost:8081/aswebservice?wsdl");
	} catch (MalformedURLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}  
     // 第一個引數是服務的URI  
     // 第二個引數是在WSDL釋出的服務名  
     QName qname = new QName("http://webservice.as.shudun.com/","Method1Service");  
     // 建立服務  
     Service service = Service.create(url, qname);  
     // 提取端點介面,服務“埠”。  
     Method1 eif = service.getPort(Method1.class);
	return eif;  
	}
}
這是我寫的工具類,用來返回客戶端的,直接通過客戶端呼叫就可以使用介面中的方法了

介面中的方法是傳入引數後返回固定值5

呼叫兩次的輸出結果: