eclipse中搭建webservice的客戶端和服務端

因爲在工做中需求要用到webservice技術,進行數據交換。研究了一下webservice,網上資料不少,看的一頭霧水,找到幾篇能作出來的博客,並且還比較簡單,加上我的在使用過程當中遇到的一些問題和想法在此分享一下。
環境:win10 64位,eclipse,jdk1.7,tomcat v7.0
參考博客:
①http://blog.csdn.net/qq_18860653/article/details/53758555
②http://blog.csdn.net/hanxuemin12345/article/details/40163757
③http://blog.csdn.net/greatfeather/article/details/46010277
說明:博客①中的方法能實現,可是我感受有點複雜。
博客②中的方法使用註解方式發佈,較簡單。
博客③中的方法和spring結合在一塊兒,我用的是②和③結合的。java

一.在Java項目中發佈一個WebService服務:web

創建一個JavaWebService的web項目,創建相對應的com.test.javabean,com.test.servlet,com.test.webservice包spring

1.*類Student,這個是實體瀏覽器

package com.test.javabean;

import java.io.Serializable;

public class Student implements Serializable{

private String ID;
private String Name;
private String Sex;
private int age;
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getSex() {
return Sex;
}
public void setSex(String sex) {
Sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [ID=" + ID + ", Name=" + Name + ", Sex=" + Sex + ", age=" + age + "]";
}

}

2.*類CStudentServlet,這個類是將發佈服務的代碼放到servlet裏面了,而後寫入配置文件,能夠本身啓動,本身發佈。tomcat

package com.test.servlet;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Properties;

import javax.jws.WebService;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.ws.Endpoint;

import com.test.webservice.CStudent;

public class CStudentServlet extends HttpServlet{
/**
* @see Servlet#init(ServletConfig)
*/
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);
System.out.println("正在啓動WebService服務:http://192.168.56.1:8082/JavaWebService/Student");
Endpoint.publish("http://localhost:8083/JavaWebService/Student", new CStudent());//這個端口號8083按本身tomcat的實際端口來設置,默認的是8080
}

/**
* @see Servlet#getServletConfig()
*/
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}

public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("進入WSServlet的service()方法");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}

}

3.**類CStudent,這個類裏面的方法是服務真正發佈出去的。
package com.test.webservice;服務器

import javax.jws.WebService;

import com.test.javabean.Student;

@WebService
public class CStudent {
public Student getStudent(String name) throws java.rmi.RemoteException{
Student student = new Student();
student.setName(name);
student.setAge(14);
student.setID("25");
student.setSex("Male");
return student;

}
}

注:關鍵在@webservice的註解。類上面加@webservice註解,就表明這個類裏面的方法都對外發布,詳細解釋參考百度。app

4.下一步須要將servlet配置爲自啓動,您只要在web.xml中增長以下內容就能夠了:eclipse

 

<servlet>
<servlet-name>CStudentServlet</servlet-name>
<servlet-class>com.test.servlet.CStudentServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CStudentServlet</servlet-name>
<url-pattern>/servlet/CStudentServlet</url-pattern>
</servlet-mapping>
ide

 

這樣寫完,啓動服務器,就能夠自動運行servlet,發佈服務了。工具

5.在tomcat中發佈JavaWebService.不知道如何發佈的看上面③中的連接

 


6.tomcat啓動成功之後,打開瀏覽器,輸入http://localhost:8083/JavaWebService/Student?wsdl
//這個端口號8083按本身tomcat的實際端口來設置,默認的是8080
(就是服務器端的按個連接加上?wsdl),回車,若是看到下面圖說明服務已經發布成功。

 

根據WSDL文檔來在客戶端編寫代碼,訪問發佈的服務;

可是,WSDL文檔看不懂怎麼辦?代碼該如何編寫?

——你看不懂,JDK看得懂,wsimport是JDK自帶的,能夠根據WSDL文檔生成客戶端調用代碼的工具。不管服務器端WebService使用什麼語言編寫的,豆漿在客戶端生成Java代碼。因此服務器用什麼語言編寫的並不重要。

wsimport.exe命令參數熟知:

 

二.配置客戶端和編寫客戶端程序。
1.服務端已經配置好,服務已經發布,接下來客戶端要調用發佈的服務。
解析地址生成源碼到本地磁盤。打開命令行窗口:

 

這裏我先定位到D盤,而後輸入wsimport -s . http://localhost:8083/JavaWebService/Student?wsdl
//這個端口號8083按本身tomcat的實際端口來設置,默認的是8080
回車,若是出現的和圖上同樣,說明解析成功,若是報錯:有幾點可能忽略
1)-s左右都有空格
2)-s後面有個".",點左右都有空格。
3)?注意中英文。這裏用的是英文"?","?"

解析成功之後打開E盤,

 

注意文件夾名字,這裏文件夾名字是和服務器端的包名對應的,文件夾下面有些文件,class,和java文件,咱們須要的是java文件。

2.新建一個java項目(客戶端)

 

 

如圖所示建個包:com.test.webservice,將步驟1中文件夾裏面的java文件複製進來。這些類都是寫客戶端程序依賴的。
在創建一個包,裏面存放測試類ClientDemo

 

 

***類ClientDemo

package com.test.client;

import com.test.webservice.CStudent;
import com.test.webservice.CStudentService;
import com.test.webservice.Student;

public class ClientDemo {
public static void main(String[] args) {
CStudentService cstudentservice=new CStudentService();
CStudent cstudent=cstudentservice.getCStudentPort();

//下面是具體方法調用。
Student student=cstudent.getStudent("同窗一號");//調用了服務端getStudent方法將名字傳了進去。
//輸出看一下結果。
System.out.println("姓名:"+student.getName()+"年齡:"+student.getAge());
}
}

直接運行這個main方法,會輸出結果。

 

其中第9行代碼就是建立了個服務對象,至關於建立了個和服務端的連接

第10行是獲取端口,這個都是固定寫的。本身服務端發佈服務的那個類,解析完成之後都會生成「類名+Service」的類。例:CStudent和CstudentService.

到此就實現了websrvice在eclipse上部署客戶端和服務端。

三.遇到的問題
1.通常用這個都是要和現有項目結合。上面只是個例子,在實際用的時候,個人是把服務端部分加到了現有的spring項目中,servlet那個能夠很好地和現有項目結合,直接打開tomcat就能夠自動發佈服務。
2.若是服務端不須要用到web項目能夠直接把servlet中發佈服務的那倆句話寫到main方法中手動發佈。
3.在和現有項目結合時候服務器端寫的方法要用到原先的接口的方法,如圖,我要用到PersonServiceInter中的方法,若是使用了@Resource,會報錯,空指針異常,緣由是webservice沒有和spring結合起來,不能使用spring中的注入。全部後來使用了,BeanFactory.getBean的方式獲取到personServiceImpl。

下面的是正確的,是實際使用成功的:

注:這個問題網上不少人遇到的,可是我按照他們的方法都沒解決成功,如今發出來作個參考。

--------------------- 原文:https://blog.csdn.net/qq_37698433/article/details/70631988

相關文章
相關標籤/搜索