eclipse中使用jax-ws進行 webservice開發
阿新 • • 發佈:2019-01-04
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
呼叫兩次的輸出結果: