java的webservice
『壹』 java調用webservice和postmain調用的區別
區別是WebService可以有Get、Post、Soap、Document四種方式調用。
我們可以把webservice看做是web伺服器上的一個應用,web伺服器是webservice的一個容器。通過wximport生成代碼。通過客戶端編程方式。
通過URLConnection方式調用。
『貳』 java調用webservice錯誤:Could not send Message
看ping通要連webServiceip或者瀏覽器訪問址看能否現xml頁面報錯般網路粗態通或埠問題。
『叄』 java中的webservice是什麼
WebService是基於網路的、分布式的模塊化組件,它執行特定的任務,遵守具體的技術規范,
這些規范使得WebService能與其他兼容的組件進行互操作。它可以使用標準的互聯網協議,
像超文本傳輸協議HTTP和XML,將功能體現在互聯網和企業內部網上。
WebService平台是一套標准,它定義了應用程序如何在Web上實現互操作性。你可以用你喜歡的任何語言,在
你喜歡的任何平台上寫WebService。WebService是構建互聯網分布式系統的基本部件。"
網路服務"(WebService)的本質,就是通過網路調用其他網站的資源。
什麼是SOAP
SOAP:簡單對象訪問協議,簡單對象訪問協議(SOAP)是一種輕量的、簡單的、基於 XML 的協議,
它被設計成在 WEB 上交換結構化的和固化的信息。 SOAP 可以和現存的許多網際網路協議和格式結合使用,
包括超文本傳輸協議( HTTP),簡單郵件傳輸協議(SMTP),多用途網際郵件擴充協議(MIME)。
它還支持從消息系統到遠程過程調用(RPC)等大量的應用程序。我現在的這家公司用的就是webservice,前台是.net後台是Java
『肆』 java的WebService最大的好處是什麼,最多的使用場合是什麼
1.web service本身不能做太多事,各種功能都是你自己編程實現的,但是你的程序只能余信氏自己用,坦高自己看,別人根本不知道你的程序是什麼樣的。而web service就是規定了一種方式,告訴你將你的程序如何的部署到伺服器上,然後大家通過一種協商好的地址能找到你的程序的說明,說明的格式也是大家都協商好的,所以可以讀懂……然後你就可以根據那個地址來調用這個程序豎散的方法了。
你看,web service 本身貌似沒干什麼,它就是讓你可以發布自己的程序和調用別人發布的程序。
2.協議基本就是上面提到的那些大家協商好的東西了,什麼形式?什麼格式?什麼樣式?之類的,可以說協議被庫支持,其實順序應該是先有了這個協議,然後這個庫遵從這個協議來解析,就說支持這個協議。
3.其實webservice傳的數據可以是任意啊,規定用各種格式只是考慮到webservice是牽扯到多方的,不規定的話就好像兩個人用不同語言交流,完全互相都不懂,那麼就沒意義了。xml是最通用的,你也可以說是和庫綁定的,但是因為它簡單通用,基本各種環境都支持解析xml
『伍』 java如何調用webservice介面
Java通過WSDL文件來調用webservice直接調用模式如下:
import java.util.Date;
import java.text.DateFormat;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import java.lang.Integer;
import javax.xml.rpc.ParameterMode;
public class caClient {
public static void main(String[] args) {
try {
String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl";
//直接引用遠程的wsdl文件
//以下臘圓都是套路譽州
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName("addUser");//WSDL裡面描述的介面名稱
call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,
javax.xml.rpc.ParameterMode.IN);//介面的參數
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//設置返回類型
String temp = "測試人員";
String result = (String)call.invoke(new Object[]{temp});
//給方法傳遞參數,並且調慶局蔽用方法
System.out.println("result is "+result);
}
catch (Exception e) {
System.err.println(e.toString());
}
}
}
『陸』 java如何解析webservice的method
在Java中解析Web Service的方法可以通過以冊粗銷下步驟完成: 1. 導入相關的Web Service客戶端庫文件。這些庫文件通常是由Web Service提供商提供的Java API或JAR文件,並通常包含可以使用的函數,以便將Web Service數據存儲在適當的Java數據類型中。 2. 使用Web Service客戶端凳喚庫中的工具生成Java代碼。某些Web Service客戶端庫可以自動生成Java代碼,該代碼可實現與Web Service之間的通信,並將Web Service的響應州游轉換為Java對象。在生成代碼時,需要輸入Web Service的URL以及其他必要的參數,以便正確生成代碼。 3. 進行方法調用。生成的Java客戶端代碼通常包含一個或多個方法,這些方法提供與Web Service方法相對應的功能。您可以使用這些方法來調用Web Service並獲取相應的響應。對於這些方法的使用,可以參考Web Service提供商的文檔以及生成的Java客戶端代碼。 4. 解析Web Service響應。Web Service響應通常是XML格式的,並可以使用Java中的XML解析器進行解析。例如,您可以使用Java標准庫中的DOM解析器或SAX解析器從Web Service響應中提取所需的數據,並將其存儲在Java對象中。 5. 處理錯誤和異常。在Web Service調用和響應解析過程中可能會出現各種錯誤和異常,例如網路連接錯誤、Web Service返回錯誤等。因此,您需要在代碼中包含適當的異常捕獲和錯誤處理邏輯,以確保程序的穩定性和可靠性。 總的來說,Java中解析Web Service的方法包括導入相關的Web Service客戶端庫文件、生成Java代碼、進行方法調用、解析Web Service響應以及處理錯誤和異常。需要注意的是,具體的實現方式取決於Web Service的提供商和具體的實現。在實踐中,可能需要使用不同的工具和方法來實現Web Service的解析和調用。
『柒』 java Webservice都有哪幾種方式啊,哪種方式比較好啊
webservice的應用已經越來越廣泛了,下面介紹幾種在Java體系中開發webservice的方式,相當於做個記錄。
1.Axis2
Axis是apache下一個開源的webservice開發組件,出現的算是比較早了,也比較成熟。這里主要介紹Axis+eclipse開發webservice,當然不用eclipse也可以開發和發布webservice,只是用eclipse會比較方便。
(1)下載eclipse的Java EE版本
(2)下載axis2
(3)下載eclipse的axis2插件
Axis2_Codegen_Wizard
Axis2_Service_Archiver
推薦使用1.3的版本
(4)eclipse安裝axis2插件
1)在任意目錄下新建一個Axis2文件夾,在該文件夾下新建eclipse目錄,在eclipse目錄中新建plugins目錄和features目錄,例如:D:\programSoftware\eclipse-SVN\Axis2\eclipse;
2)把下載的axis2插件解壓,並把解壓的文件放到新建的eclipse的plugins目錄下;
3)在%eclipse_home%的目錄下新建links目錄,並在links目錄下新建axis2.link文件,內容為:path=D:\programSoftware\eclipse-SVN\Axis2;
4)重啟eclipse,點擊·file-new-other,如果看到Axis2 Wizards,則表明插件安裝成功。
(5)安裝axis2
(6)使用eclipse新建web工程,創建一個普通java類,至少包含一個方法。
(7)發布webservice
1)點擊eclipse的File-New-other,打開Axis2 Wizards,選擇Axis2 Service Archiver,然後Next;
2)選擇Class File Location,也就是類文件存放路徑,注意:只選到classes目錄,不要包括包文件夾,然後Next;
3)選擇Skip WSDL,然後Next
4)一路Next到Select the Service XML file to be included in the Service archive,勾選Generate theservice xml automatically;
5)Service Name-填寫你的service名稱,Class Name-填寫類名稱,要包括包名,然後點擊load,然後點擊Finish,這時webservice就發布成功了;
6)然後到%TOMCAT_HOME%/webapps/axis2/WEB-INF/services 看看是否多了一個.aar的文件;
注意:以上的方式是發布到axis2.war包中,你也可以把生成.aar文件到你的實際應用中,同時,你也可以使用eclipse的create webservice功能發布你的webservice,選擇axis2生成你的webservice,這樣webservice就會部署到你的應用中了。
2.Apche CXF
CXF開發webservice也是比較方便和簡單的,它和spring的集成可以說是非常地好。舉一個CXF開發webservice的例子吧。
1)在eclipse中新建一個web工程,導入依賴包,如圖:
2)編寫一個介面,如:
注意:CXF開發的webservice,介面中的方法的參數一定要以這種方式,否則客戶端調用的時候CXF服務端會接收不到參數的值,name:參數名稱,可不寫(建議寫上),targetNamespace:命名空間,一定要填寫上,默認是包名反過來的順序,mode:參數類型,IN表示輸入。
3)編寫一個實現類,實現介面的方法;
4)和spring的集成,編寫一個bean文件,如:cxf-beans.xml,內容如下:
Cxf-beans.xml代碼
<?xml version="1.0" encoding="UTF-8" ?>
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint id="vote" implementor="com.zcl.cxf.service.VoteImpl" address="/Vote" />
</beans>
這個文件比較容易理解,就不解釋了。
5)配置CXFServlet
在web.xml文件中配置CXFServlet,載入cxf-beans.xml文件,內容如下:
Web.xml代碼
id="WebApp_ID" version="2.5">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/cxf-beans.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
把工程部署到中間件,如tomcat,就可以訪問該webservice了。
3.JDK開發webservice
1)編寫一個Java類,如下:
Jdkwebservice.java代碼
package demo;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService
public class JdkWebService {
return "Just do it," + value + "!";
}
public static void main(String[] args) {
}
}
2)運行該java類,在瀏覽器上就可以訪問該webservice了。
注意:開發web工程的時候,這種方法不太友好。我們可以編寫一個servlet類,在servlet類的初始化方法中發布webservice,這樣我們的中間件伺服器啟動的時候就會幫我們自動webservice了。
4) xfire
開發WebService的框架不少,每個框架都有各自的有點,最近我用xfire練習開發WebService,下面是開發WebService的小例子,希望對入門的人有些小幫助
1.新建一個java web project命名為TestWebService,將xfire相關的jar包添加到lib目錄中,寫介面類和實現類
Java代碼
package com.lamp.service;
public interface MessageService {
public String getName(String name);
}
[java] view plainprint?
package com.lamp.service;
public interface MessageService {
public String getName(String name);
}
實現類
Java代碼
package com.lamp.service.impl;
import com.lamp.service.MessageService;
public class MessageServiceImpl implements MessageService {
public String getName(String name) {
return "hellow " + name + ", welcome to WebService world";
}
}
[java] view plainprint?
package com.lamp.service.impl;
import com.lamp.service.MessageService;
public class MessageServiceImpl implements MessageService {
public String getName(String name) {
return "hellow " + name + ", welcome to WebService world";
}
}
在src目錄下新建文件夾META-INF,然後再在其下新建文件夾xfire,在xfire目錄下新建配置文件services.xml
Xml代碼
<?xml version="1.0" encoding="UTF-8"?>
<service>
<name>MessageService</name>
<serviceClass>com.lamp.service.MessageService</serviceClass>
<implementationClass>com.lamp.service.impl.MessageServiceImpl</implementationClass>
</service>
</beans>
[xml] view plainprint?
<?xml version="1.0" encoding="UTF-8"?>
<service>
<name>MessageService</name>
<serviceClass>com.lamp.service.MessageService</serviceClass>
<implementationClass>com.lamp.service.impl.MessageServiceImpl</implementationClass>
</service>
</beans>
最後在web.xml中配置xfire的servlet
Xml代碼
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
[xml] view plainprint?
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
這樣伺服器端開發完畢,現在開始客戶端的開發
新建一個java project也將xfire相關的jar引入,我用ant在客戶端生成代理對象,在項目路徑下新建build.xml,代碼為
Xml代碼
<?xml version="1.0" encoding="UTF-8"?>
<project name="WebService" basedir="." default="gen-webservice">
<property file="build.properties">
</property>
<path id="project-classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<target name="gen-webservice">
<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="project-classpath" />
<wsgen outputDirectory="${src.dir}"
wsdl="${wsdl.dir}" package="com.lamp.ws.client" overwrite="true"/>
</target>
</project>
[xml] view plainprint?
<?xml version="1.0" encoding="UTF-8"?>
<project name="WebService" basedir="." default="gen-webservice">
<property file="build.properties">
</property>
<path id="project-classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<target name="gen-webservice">
<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="project-classpath" />
<wsgen outputDirectory="${src.dir}"
wsdl="${wsdl.dir}" package="com.lamp.ws.client" overwrite="true"/>
</target>
</project>
『捌』 如何在Java中快速發布WebService服務
在Java中快速發布WebService服務方法:
一、通過Axis2提供的模板自動發布
這種方法非常簡單,只要下載Axis包後從裡面的「axis-1_4\webapps」中找到axis站點,將它拷出來放到你要部署的tomcat/webapps下,再將要發布的java類放到axis文件夾里,再將文件名的後綴改為「jws」,這樣一個webservice就發布成功了。訪問時按照路徑「http://IP:Port/axis/類名.jws?wsdl」就可以了。
怎麼樣?這種方法非常是不是非常簡單?對,它特別適合初學java或者是手頭沒有很好的SDE開發和調試工具的時候。
但很明顯,這種方法不太好調試,又不能凸顯您的專業水準,更不能集成到您的開發環境里。所以如果您不是很急,就可以用下面一種辦法來發布:
二、通過JWS來手動發布
步驟如下:
1、在Eclipse里新建一個Dynamic Web Project,如下圖所示(相信這一步您比我還熟,所以會的可以略過):
2、在「Project Name」中輸入工程名稱,如「JavaWebService」:
3、一直單擊「Next」按鈕直到出現如下對話框:
在上面的對話框中一定要注意需要選中「Generate web.xml deployment descriptor」,否則後面再添加就比較麻煩。選中後單擊「Finish」按鈕即可完成工程創建。
4、引入必須的jar包:
axis.jar、commons-discovery-0.2.jar、commons-logging.jar、jaxrpc.jar、saaj.jar、wsdl4j.jar
最好將jar包拷貝到工程的WEB-INF/lib下後直接引用本工程內的jar包,這樣不會導致工程文件夾或jar包所在文件夾移動後讀取不到jar包的問題:
分別單擊頂層對話框和「Properties」對話框的「OK」按鈕完成jar包引用。
5、新建package和java文件,如下圖所示:
首先說說com.test.javabean.Student.java這個類。看得出來這個類是個JavaBean,目的是為了封裝一個Java的實體類,這樣做的好處是萬一要把很多變數返回給客戶端的話,客戶端不至於在方法中聲明很多形參來接收,而是通過一個對象來接收。Student.java的實現如下:
[java] view plain
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;
}
}
再來看看com.test.webservice.CStudent.java這個類,定義如下:
[java] view plain
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方法了,是不是也很簡單?但是這樣就得記著在上面引入javax.jws.WebService包。偶對了,這種方式是JDK1.7里增加的方式,所以要想使用這種特性,就得麻煩您把JDK升級到1.7,方法很簡單,用綠色版的就可以啦,不用勞煩您把JDK卸了又重裝。只需要把JDK放到哪個盤的根目錄(這樣是為了防止路徑中有空格或是括弧什麼的,否則一旦出問題您就苦逼了),然後把JDK的路徑定義為JAVA_HOME,再在path中增加%JAVA_HOME%/bin;就可以了。這樣做的好處是可以隨時很方便地更換JDK的版本,而不需要卸載後再重新安裝。
扯遠了。有了WebService的方法體,您還需要再發布一下WebService,所以還得新建一個com.test.servlet.CStudentServlet.java類:
[java] view plain
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://<span style="font-family: Arial, Helvetica, sans-serif;">192.168.56.1</span><span style="font-family: Arial, Helvetica, sans-serif;">:8082/</span><span style="font-family: Arial, Helvetica, sans-serif;">JavaWebService</span><span style="font-family: Arial, Helvetica, sans-serif;">/Student", new CStudent());</span>
}
/**
* @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
}
}
上面的代碼中有處細節不知您注意了沒有:把IP地址、埠號、站點名等信息寫死到了代碼里。對,不僅如此,你這里寫的什麼IP,就必須用什麼IP訪問,即便是在本機寫成localhost都不可以。jws就是這么奇怪。所以在實際中可以參考一些資料動態獲取IP地址和埠號。
對了,您那邊代碼是不是報錯了?對,這是因為您還得做一步操作——添加server和對server組件包的引用,以tomcat為例,方法如下:
找到servers窗口,單擊「new server wizard...」鏈接:
打開如下對話框:
看到了吧?選擇Apache下的」Tomcat v7.0 Server「,然後單擊」Next「:
在上圖中單擊右側」Browse「按鈕,找到Tomcat所在的目錄,再在JRE中選擇1.7的JDK。如果您還沒有配置JDK,就請自行查找資料進行配置吧,某在這里就不講了,不然又扯遠啦。
然後進入這個窗口:
這個對話框得特別留意一下,不要著急單擊」Add「按鈕添加站點那,否則啟動後您就找不到站點部署的位置了。所以這一步直接單擊」Finish「。完畢後雙擊新添加的server,打開如下對話框:
在上面的窗口中,一定要先選擇第二項」Use Tomcat installation (takes control of Tomcat installation)「,然後在」Deploy path「中將內容改為」webapps「,然後再按下」Ctrl+S「鍵保存配置,這樣就可以把站點部署到您指定的tomcat的webapps下了。
然後記著給站點添加servlet-api.jar包的引用,在工程上單擊右鍵,選擇」Properties「,打開如下對話框:
看到了吧?切換到」Libraries「選項卡後先點擊右側的」Add Library「按鈕,再在彈出的窗口中選擇」Server Runtime「,單擊」Next「-->「Finish」和父窗口的」OK「按鈕就可以成功引入servlet所需的jar包了。怎麼樣?CStudentServlet.java中再沒有錯誤提示了吧?
下一步需要將servlet配置為自啟動,您只要在web.xml中增加如下內容就可以了:
[html] view plain
<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>
記著把站點發布一下,在tomcat上單擊郵件,選擇「Add and Remove」,將JavaWebService發布到tomcat中。
下一步只要發布和啟動一下站點就可以了。如果您還不會,那就在server上單擊右鍵,選擇「Publish」,然後再選擇「Start」就可以了。
啟動成功
『玖』 跪求一個最原始最通用的Java調用webservice的方法
再原始的也得先選個庫啊,高答jdk里本身又沒有訪問webservice的庫
比如commons-httpclient-3.1.jar里的HttpClient、xfire,axis,cxf等
比如,我一直是用cxf訪問webservice的(不考慮提供方語言,尺念猛就算是.net提供的webservice也陵橋一樣)
CXF調用webservice步驟(我認為這個最簡單,因為不需要你寫代碼)
1、下載CXF,並將cxf的bin目錄加入到操作系統環境變數中(或者直接使用cmd命令進入CXF的bin文件夾)
2、將wsdl文件放到某個目錄下(如果沒有設置環境變數,則將此wsdl文件放入CXF的bin文件夾),執行命令wsdl2java -impl xxx.xml,則生成了符合wsdl要求的伺服器端代碼
3、在生成好的代碼里尋找xxx.xml,刪除或修改掉這些代碼即可(構造函數的URL屬性修改為http://形式的字元串,比如http://127.0.0.1/xxx?wsdl,其他部分出現的xxx.xml全部刪除)
『拾』 java如何調用webservice介面
Java通過WSDL文件來調用webservice:
注意,以下的代碼並沒有經過真正的測試,只是說明這些情況,不同版本的Axis相差很大,大家最好以apache網站上的例子為准,這里僅僅用於說明其基本用法。
1,直接AXIS調用遠程的web service
這種方法比較適合那些高手,他們能直接看懂XML格式的WSDL文件,我自己是看不懂的,尤其我不是專門搞這行的,即使一段時間看懂,後來也就忘記了。直接調用模式如下:
import java.util.Date;
import java.text.DateFormat;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import java.lang.Integer;
import javax.xml.rpc.ParameterMode;
public class caClient {
public static void main(String[] args) {
try {
String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl";
//直接引用遠程的wsdl文件
//以下都是套路
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName("addUser");//WSDL裡面描述的介面名稱
call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,
javax.xml.rpc.ParameterMode.IN);//介面的參數
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//設置返回類型
String temp = "測試人員";
String result = (String)call.invoke(new Object[]{temp});
//給方法傳遞參數,並且調用方法
System.out.println("result is "+result);
}
catch (Exception e) {
System.err.println(e.toString());
}
}
}
2,直接SOAP調用遠程的webservice
這種模式我從來沒有見過,也沒有試過,但是網路上有人貼出來,我也轉過來
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;
import java.io.*;
import java.net.*;
import java.util.Vector;
public class caService{
public static String getService(String user) {
URL url = null;
try {
url=new URL("http://192.168.0.100:8080/ca3/services/caSynrochnized");
} catch (MalformedURLException mue) {
return mue.getMessage();
}
// This is the main SOAP object
Call soapCall = new Call();
// Use SOAP encoding
soapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
// This is the remote object we're asking for the price
soapCall.setTargetObjectURI("urn:xmethods-caSynrochnized");
// This is the name of the method on the above object
soapCall.setMethodName("getUser");
// We need to send the ISBN number as an input parameter to the method
Vector soapParams = new Vector();
// name, type, value, encoding style
Parameter isbnParam = new Parameter("userName", String.class, user, null);
soapParams.addElement(isbnParam);
soapCall.setParams(soapParams);
try {
// Invoke the remote method on the object
Response soapResponse = soapCall.invoke(url,"");
// Check to see if there is an error, return "N/A"
if (soapResponse.generatedFault()) {
Fault fault = soapResponse.getFault();
String f = fault.getFaultString();
return f;
} else {
// read result
Parameter soapResult = soapResponse.getReturnValue ();
// get a string from the result
return soapResult.getValue().toString();
}
} catch (SOAPException se) {
return se.getMessage();
}
}
}
3,使用wsdl2java把WSDL文件轉成本地類,然後像本地類一樣使用,即可。
這是像我這種懶人最喜歡的方式,仍然以前面的global weather report為例。
首先 java org.apache.axis.wsdl.WSDL2Java http://www.webservicex.net/globalweather.asmx.WSDL
原本的網址是http://www.webservicex.net/globalweather.asmx?WSDL,中間個各問號,但是Linux下面它不能解析,所以去掉問號,改為點號。
那麼就會出現4個文件:
GlobalWeather.java GlobalWeatherLocator.java GlobalWeatherSoap.java GlobalWeatherSoapStub.java
其中GlobalWeatherSoap.java是我們最為關心的介面文件,如果你對RMI等SOAP實現的具體細節不感興趣,那麼你只需要看介面文件即可,在使用的時候,引入這個介面即可,就好像使用本地類一樣。