一、Java中WebService接口的生成:
1、在eclipse工具中新建一個普通的JAVA項目,新建一個java類:JwsServiceHello.java
package com.accord.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
/**
* Title: ServiceHello
* Description: 基於jdk1.6以上的javax.jws 發佈webservice接口
@WebService - 它是一個註解,用在類上指定將此類發佈成一個ws。
Endpoint – 此類爲端點服務類,它的方法publish用於將一個已經添加了@WebService註解
對象綁定到一個地址的端口上。
* Version:1.0.0
* @author panchengming
*/
@WebService
public class JwsServiceHello {
/** 供客戶端調用方法 該方法是非靜態的,會被髮布
* @param name 傳入參數
* @return String 返回結果
* */
public String getValue(String name,String age){
return "歡迎你! "+name + "," + "今年" + age + "歲";
}
/**
* 方法上加@WebMentod(exclude=true)後,此方法不被髮布;
* @param name
* @return
*/
@WebMethod(exclude=true)
public String getHello(String name){
return "你好! "+name;
}
/** 靜態方法不會被髮布
* @param name
* @return
*/
public static String getString(String name){
return "再見!"+name;
}
//通過EndPoint(端點服務)發佈一個WebService
public static void main(String[] args) {
/*參數:1,本地的服務地址;
2,提供服務的類;
*/
Endpoint.publish("http://10.10.14.70:8080/Service/ServiceHello", new JwsServiceHello());
System.out.println("發佈成功!");
}
}
2、運行,控制檯會輸出:發佈成功!
3、瀏覽器訪問測試:地址欄 輸入:http://10.10.14.70:8080/Service/ServiceHello?wsdl
如果出現這些就成功了!!!
注:如果想打包成.exe並設置成Windows服務,請參考 二、三 詳細內容;
二、打包成.exe:
參考鏈接:https://blog.csdn.net/u013456370/article/details/81704874
三、.exe設置成Windows服務:
參考鏈接:https://blog.csdn.net/u013456370/article/details/104633436
四、調用、Apache CXF調用:
上面的接口已經發布成功:http://10.10.14.70:8080/Service/ServiceHello?wsdl
1、普通代碼調用:
生成代碼:
①、在eclipse中創建一個普通JAVA項目,命名爲:ws2
②、在DOS命令中輸入:wsimport -s “src目錄” -p “生成類所在包名” -keep “wsdl發佈地址”
例如:wsimport -s D:\workspace\ws2\src -p com.pcm.ws.jws -keep http://10.10.14.70:8080/Service/ServiceHello?wsdl
③、成功則返回:
parsing WSDL…
generating code…
compiling code…
④、在eclipse項目中刷新 ws2項目,生成代碼如下:
⑤、新建調用類:JwsClientHello.java
package com.pcm.ws.jws.client;
import com.pcm.ws.jws.JwsServiceHello;
import com.pcm.ws.jws.JwsServiceHelloService;
public class JwsClientHello {
public static void main(String[] args) {
JwsServiceHello hello = new JwsServiceHelloService().getJwsServiceHelloPort();
String name = hello.getValue("張三", "6");
System.out.println(name);
}
}
⑥、運行,控制檯輸出:歡迎你! 張三,今年6歲
注:生成代碼的方式有多種,這只是其中一種!!!
參考鏈接:https://blog.csdn.net/qazwsxpcm/article/details/70370490
2、Apache CXF調用
①、新建Maven項目:(因爲需要一些jar,懶得一個一個下載了)
②、打開:pom.xml文件:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.3.0</version>
</dependency>
③新建一個測試類:WebServiceTest.java
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
/**
* 創建一個WebService客戶端,測試WebService服務端的可用性
*/
public class WebServiceTest {
public static void main(String[] args) {
// CXF動態客戶端工廠
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
// WSDL文檔url配置()
String wsdlUrl = "http://10.10.14.70:8080/Service/ServiceHello?wsdl";
Object[] objects = null;
try {
// 獲取CXF客戶端
Client client = dcf.createClient(wsdlUrl);
// 調用Web Service方法
objects = client.invoke("getValue", "張三", "5");
} catch (Exception e) {
e.printStackTrace();
}
// 獲取調用結果
System.out.println("調用結果:" + objects[0]);
System.out.println("=========>");
try {
// 獲取CXF客戶端
Client client = dcf.createClient(wsdlUrl);
// 調用Web Service方法
objects = client.invoke("getValue", "旺財", "8");
} catch (Exception e) {
e.printStackTrace();
}
// 獲取調用結果
System.out.println("調用結果:" + objects[0]);
}
}
④、運行,控制檯輸出:
調用結果:歡迎你! 張三,今年5歲
=========>
調用結果:歡迎你! 旺財,今年8歲
3、普通代碼調用、Apache CXF調用調用的優缺點:
需要不需要額外的Jar包