⑴ java開發WebService服務端,用什麼最好,各種技術的區別是什麼
我們在項目中使用的是通過cxf的方式來實現webService,實現webService總共有三種方式
Axis2——Xfire——cxf
為什麼要使用cxf來實現webService呢,是因為了解到cxf是xfire的升級版本,適用於java語言,
xfire/cxf 性能比axis2要高,並且和spring整合起來也比較方便,而axis2支持更多的語言,性能相對於cxf要低,所以採用cxf這種方式實現了兩個項目之間數據的傳遞,為了保證webservice的安全性我們採用了基於WS-Security標準的安全驗證(使用CXF回調函數)。
⑵ java如何調用webservice介面
Java調用WebService可以直接使用Apache提供的axis.jar自己編寫代碼,或者利用Eclipse自動生成WebService Client代碼,利用其中的Proxy類進行調用。理論上是一樣的,只不過用Eclipse自動生成代碼省事些。
1、編寫代碼方式:
package com.yun.test;
import java.rmi.RemoteException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.message.PrefixedQName;
import org.apache.axis.message.SOAPHeaderElement;
import com.cezanne.golden.user.Exception;
import com.cezanne.golden.user.UserManagerServiceProxy;
import javax.xml.namespace.QName;
import java.net.MalformedURLException;
import javax.xml.rpc.ServiceException;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPException;
public class testWebService {
public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException
{
//標識Web Service的具體路徑
String endpoint = "WebService服務地址";
// 創建 Service實例
Service service = new Service();
// 通過Service實例創建Call的實例
Call call = (Call) service.createCall();
//將Web Service的服務路徑加入到call實例之中.
call.setTargetEndpointAddress( new java.net.URL(endpoint) );//為Call設置服務的位置
// 由於需要認證,故需要設置調用的SOAP頭信息。
Name headerName = new PrefixedQName( new QName("發布的wsdl里的targetNamespace里的url", "string_itemName") );
org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName);
header.addTextNode( "blablabla" );
call.addHeader(header);
// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("發布的wsdl里的targetNamespace里的url", "SoapHeader");
// soapHeaderElement.setNamespaceURI("發布的wsdl里的targetNamespace里的url");
// try
// {
// soapHeaderElement.addChildElement("string_itemName").setValue("blablabla");
// }
// catch (SOAPException e)
// {
// e.printStackTrace();
// }
// call.addHeader(soapHeaderElement);
//調用Web Service的方法
org.apache.axis.description.OperationDesc oper;
org.apache.axis.description.ParameterDesc param;
oper = new org.apache.axis.description.OperationDesc();
oper.setName("opName");
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg0"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg1"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg2"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
oper.setReturnType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
oper.setReturnClass(java.lang.String.class);
oper.setReturnQName(new javax.xml.namespace.QName("", "return"));
oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
oper.setUse(org.apache.axis.constants.Use.LITERAL);
oper.addFault(new org.apache.axis.description.FaultDesc(
new javax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url", "Exception"),
"Exception",
new javax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url", "Exception"),
true
));
call.setOperation( oper );
call.setOperationName(new javax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url", "opName"));
//調用Web Service,傳入參數
String res = ( String ) call.invoke( new Object[]("arg0","arg1"));
System.out.println("===============");
return res;
}
/**
* @param args
*/
public static void main(String[] args) {
try {
System.out.println(getResult());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
} catch (SOAPException e) {
e.printStackTrace();
}
}
}
2、利用Eclipse自動生成WebService client代碼就容易多了:(由於還不會發圖片,就用語言描述了,大家酬和看吧。。。)
首先,new project,選擇other,在輸入框中輸入Web Service Client,選中搜索後的結果,點擊Next,在Service definition中輸入 WebService的發布地址,點擊Finish
這樣,WebService Client代碼已經生成好了。
接下來寫一個Test類,在main函數中輸入如下代碼:
String endpoint = "伺服器的WebService的地址";
YourWebServiceNameProxy umsp = new YourWebServiceNameProxy (endpoint);
try {
String resultStr = umsp.opMethod("arg0","arg1");
System.out.println(resultStr);
} catch (Exception e) {
System.out.println("異常");
e.printStackTrace();
} catch (RemoteException e) {
System.out.println("RemoteException異常");
e.printStackTrace();
}
如果還有疑問的話還有視頻,如果對你有幫助請採納!
⑶ 現在java調用webservice是用什麼技術
JAVA調用WS介面現在用的比較多就是AXIS和CXF了
最早的時候是使用AXIS的比較多,因為這個是最早支持JAVA的WS介面的,像ECLIPSE里都自帶了AXIS,然後因為AXIS很久沒有更新了,這時候CXF慢慢進入大家眼中
CXF的介面實現起來更簡單,和其它語言實現的介面互相調用的時候兼容性也很好,再加上還有REST可以更簡單的訪問資源,現在很多新項目都會考慮用CXF,但是有很多老項目還是用的AXIS,如果維護的話也得能看懂,所以還是可以兩個都應該學學,必竟就是實現的方式有些不同而已,原理都是差不多的
關於CXF這個我之前找到一個哥們寫的一些很不錯的筆記,如果有興趣的話你可以去參考參考 http://my.oschina.net/huangyong/blog/294324
⑷ java如何寫webservice服務端
Java 中的 Web Service 分為基於 SOAP 的和基於 REST 的兩種,下面簡單說一個基於 SOAP 的例子。要使用 JDK6u4 之後的版本才能編譯通過。
先編寫一個 Web Service 的介面:
@WebService
@SOAPBinding(style=Style.RPC)
publicinterfaceTimeServer{
@();
@WebMethodlonggetTimeAsElapsed();
}
再編寫 Web Service 實現:
importjava.util.Date;
importjavax.jws.WebService;
@WebService(endpointInterface="test.TimeServer")
{
publicStringgetTimeAsString(){returnnewDate().toString();}
publiclonggetTimeAsElapsed(){returnnewDate().getTime();}
}
最後啟動 Web Service:
{
publicstaticvoidmain(String[]args){
Endpoint.publish("http://127.0.0.1:9876/ts",newTimeServerImpl());
}
}
如果正常啟動,可以用瀏覽器訪問 http://127.0.0.1:9876/ts?wsdl 看到這個 Web Service 的 wsdl 文檔。
⑸ java開發rest介面
你這明顯是想用java開發 WebService 介面 而且rest風格 xml格式
現在有很大現成的框架可以做到 比如常用的 CXF 或者直接用jdk的 WebService註解來做
建議用CXF框架做 因為他能跟其他框架很好的整合 提供的功能也很強大 不用你自己去寫那麼多
⑹ 如何 調用 restful web services
RESTful WebService是比基於SOAP消息的WebService簡單的多的一種輕量級Web服務,RESTful WebService是沒有狀態的,發布和調用都非常的輕松容易。
下面寫一個最簡單的Hello World例子,以便對RESTful WebService有個感性認識。因為非常專業理論化的描述RESTful WebService是一件理解起來很痛苦的事情。看看例子就知道個大概了,再看理論就容易理解多了。
/**
* RESTful WebService入門
* @author leimin 2009-11-18 16:42:43
*/
packageexample;
importcom.sun.jersey.api.container.httpserver.HttpServerFactory;
importcom.sun.net.httpserver.HttpServer;
importjavax.ws.rs.GET;
importjavax.ws.rs.Path;
importjavax.ws.rs.Proces;
importjava.io.IOException;
//指定URI
@Path("/helloworld")
publicclassHelloWorld {
//處理HTTP的GET請求
@GET
// 處理請求反饋的內容格式為"text/plain"
@Proces("text/plain")
publicString getClichedMessage() {
return"Hello World!";
}
publicstaticvoidmain(String[] args)throwsIOException {
//創建RESTful WebService服務
HttpServer server = HttpServerFactory.create("http://192.168.14.117:9999/");
//啟動服務,這會導致新開一個線程
server.start();
//輸出服務的一些提示信息到控制台
System.out.println("RESTful WebService服務已經啟動");
System.out.println("服務訪問地址: http://192.168.14.117:9999/helloworld");
}
}
運行這個類,控制台輸入出:
2009-11-18 17:25:37 com.sun.jersey.api.core.ClasspathResourceConfig init
信息: Scanningforroot resource and provider classes in the paths:
D:jdk16jrelibalt-rt.jar
D:jdk16jrelibcharsets.jar
D:jdk16jrelibdeploy.jar
D:jdk16jrelibjavaws.jar
D:jdk16jrelibjce.jar
D:jdk16jrelibjsse.jar
D:jdk16jrelibmanagement-agent.jar
D:jdk16jrelibplugin.jar
D:jdk16jrelib
esources.jar
D:jdk16jrelib
t.jar
D:jdk16jrelibextdnsns.jar
D:jdk16jrelibextlocaledata.jar
D:jdk16jrelibextsunjce_provider.jar
D:jdk16jrelibextsunmscapi.jar
D:jdk16jrelibextsunpkcs11.jar
D:
etwideo
estwsoutproction
estws
D:IDEA8libjavaee.jar
D:
etwideo
estwslibmail-1.4.jar
D:
etwideo
estwslibasm-3.1.jar
D:
etwideo
estwslibwadl2java.jar
D:
etwideo
estwslibjettison-1.0.1.jar
D:
etwideo
estwslibgrizzly-servlet-webserver-1.8.6.4.jar
D:
etwideo
estwslibwadl-core.jar
D:
etwideo
estwsliblocalizer.jar
D:
etwideo
estwslibjdom-1.0.jar
D:
etwideo
estwslibjsr311-api-1.0.jar
D:
etwideo
estwslibstax-api-1.0-2.jar
D:
etwideo
estwslibpersistence-api-1.0.2.jar
D:
etwideo
estwslibjaxb-api-2.1.jar
D:
etwideo
estwslibwadl-cmdline.jar
D:
etwideo
estwslibhttp-20070405.jar
D:
etwideo
estwslib
ome-0.9.jar
D:
etwideo
estwslibactivation-1.1.jar
D:
etwideo
estwslibjaxb-impl-2.1.10.jar
D:
etwideo
estwslibjersey-bundle-1.0.3.jar
D:
etwideo
estwslibjackson-lgpl-0.9.4.jar
D:
etwideo
estwslibFastInfoset-1.2.2.jar
D:
etwideo
estwslibjaxb-xjc.jar
D:IDEA8libidea_rt.jar
2009-11-18 17:25:46 com.sun.jersey.api.core.ClasspathResourceConfig init
信息: Root resource classes found:
classexample.HelloWorld
2009-11-18 17:25:46 com.sun.jersey.api.core.ClasspathResourceConfig init
信息: Provider classes found:
RESTful WebService服務已經啟動
服務訪問地址:http://192.168.14.117:9999/helloworld
可見,服務啟動成功了,下來就是從瀏覽器中訪問服務了,輸入http://192.168.14.117:9999/helloworld,將發送一個HTTP GET請求,看看結果:
測試成功了!
⑺ REST webservice與普通的servlet有什麼不同
一:Web Service基礎知識
一個最簡單web服務就一個web頁面等待請求與處理。更容易理解的方式是Web
Service可以把一個應用變成一個基本WEB方式的請求與處理的應用。常見的兩種
Web Service處理方式為:
a. 基於WSDL/SOAP的方式
b. Rest方式
方式a是比較正統的,客戶端調用必須先取得WSDL文件,然後生成調用的API才可
以使用。它不是我要說的重點,基本調用流程如下:
方式b是Rest方式,Rest的Web Service的設計原則是基於CRUD,其支持四種操作分
別為:
GET – 獲取信息/請求信息內容,絕大多數瀏覽器獲取信息時使用該方式。
POST – 增加信息內容,顯示以前的信息內容,可以看作是insert操作
PUT – 更新信息內容,相當與update
DELETE – 刪除信息內容可以看作是delete
Rest方式更加簡單便捷,如果從設計原則上看HTTP協議本身已經是最Restful風格的
協議了HTTP協議很好的支持了CRUD的操作。正是因為如此,WEB2.0以來, 基於
Restful的Web Service越來越多的成為首選。
二:認識RestfulStyle
Rest的全稱是可表述狀態遷移(RepresentationalState Transfer), 可能從字面看有點奇怪
HTTP協議本身無狀態協議,其保持連接通過設置請求頭欄位Connection: keep-alive與
設置過期時間來同時控制。其實Rest方式的WebService也是無狀態的這樣做的好處最少
有以下兩個:
1. 更好的負載平衡,減輕伺服器端負擔
2. 更快的客戶端響應,減少不必要的狀態檢查。
Restful 風格的興起,要感謝互聯網巨頭Google,Facebook等他們提供大量基於Restful
風格的web服務,從谷歌地圖到天氣預報到翻譯,國內的互聯網巨頭騰訊,新浪微博也
發布自己的web服務,吸引更多的開發者加入他們的陣營。Rest除了滿足基本的CRUD
設計原則之外,還要遵循如下約定:
1. 資源操作可以通過描述來實現即Representation
2. 消息本身是無狀態與自我描述(傳輸支持XML與JSON)
3. 可以發送與接受多個Representation
Rest風格(Restful Style)架構原則:
1. 客戶伺服器方式
2. 無狀態協議傳輸
3. 支持緩存
4. 統一介面定義
5. 分層系統設計
這樣發布了Rest的Web服務API其改變不會影響到客戶端程序與實現。如果你的系統
不能適用Rest風格的架構怎麼辦,重新設計一個新的架構,擴展Rest風格架構。但是
這個世界上絕大數的系統與應用要做的事情就是CRUD。
三. Rest與HTTP
上面已經提到過HTTP協議可能是最Rest風格的協議,而HTTP1.1協議設計的一個原則
就要實現Rest風格。所以毫無疑問HTTP的GET, POST, PUT, DELETE就是最好的證明
但是Rest風格是否可以應用到其它一些協議與系統設計中嘛,答案是肯定的,一個最好
的例子證明就POP3協議, POP3支持Fetch 數據記錄,查詢記錄,更新記錄與刪除記錄
(記錄代表email)多麼完美的Rest風格協議。
已經存在的HTTP協議應用:
1. 瀏覽器客戶端(你天天上網,不是IE就是Chrome,或者其它瀏覽器,你懂的)
2. 即時消息通信,MSN/Skype支持
3. 各種內容管理系統
4. 博客系統與微博客戶端應用。
5. 你可以來補充/?
Rest消息詳解:
1. 跟我們現在知道的HTTP URI沒有什麼分別,Google靜態地圖就是一個很好的例子
只是URL加上不同參數就可以fetch不同的地圖內容。
2. 可以支持任何類型的數據傳輸,這點與基於XML與JSON的信息傳輸有點同,後者
更希望傳輸文本內容與結構化文本內容
3. SOAP與XML-RPC有嚴格的消息格式限制,rest沒有消息格式要求。客戶端調用方
便啊!
Rest風格Web服務的好處,顯然易見一個好處就是簡化了客戶端的調用,不再像WSDL
那般麻煩。從而減低第三方開發者的學習成本,減短了學習曲線。有利於服務推廣與普
及,吸引更多用戶數量從而帶來潛在的商業利益。
在軟體即服務(SaaS - Software As A Service)與軟體即平台(PasS-Platform
As A Service)中有著重要的地位與應用。這正是那些互聯網巨頭對Rest風
格感興趣的原因之一。
四:Rest風格架構
Rest風格可以用在非WEB的系統設計與架構中嘛/?打答案是肯定的,Rest可以用在任何
系統設計中,從本質是上Rest不是一種技術,而是一種架構原則,當然可以用來架構非
WEB的系統。系統越大風格越要象Rest方式如此才是一個成功的架構。
WEB中的面向對象編程
ExtJS, KendoUI(基於JQuery)等JavaScript庫已經支持非常方便的從URL中fetch內容
更新數據,前端設計越來越趨向於更加細化的分層設計,而不僅僅是MVC。客戶端
程序員應該更多的專注前台用戶體驗,由於這些框架良好的封裝與可擴展行,
JavaScript等語言編程越來越多的引入面向對象的概念與實踐。可以好不誇張的說如
今的JavaScript編程與十年之前已經有本質不同。
⑻ Web Service 是什麼 rest又是什麼 最近要用這個 一點都沒接觸過 我要在java下開發
這是WEB環境下應用開發的重要架構,REST 已經成為最主要的 Web 服務設計模型。採用了更易於使用、面向資源的模型來公開WEB服務,具體實現時應該遵循REST的基本設計原則。
⑼ 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
1.使用HttpClient
用到的jar文件:commons-httpclient-3.1.jar
方法:
預先定義好Soap請求數據,可以藉助於XMLSpy Professional軟體來做這一步生成。
String soapRequestData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">" +
"<soap12:Body>" +
" <getCountryCityByIp xmlns=\"http://WebXml.com.cn/\">" +
" <theIpAddress>219.137.167.157</theIpAddress>" +
" </getCountryCityByIp>" +
" </soap12:Body>" +
"</soap12:Envelope>";
然後定義一個PostMethod,這時需要指定web服務的Url;
PostMethod postMethod = new PostMethod(「http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx」);
然後把Soap請求數據添加到PostMethod中
byte[] b = soapRequestData.getBytes("utf-8");
InputStream is = new ByteArrayInputStream(b,0,b.length);
RequestEntity re = new InputStreamRequestEntity(is,b.length,"application/soap+xml; charset=utf-8");
postMethod.setRequestEntity(re);
最後生成一個HttpClient對象,並發出postMethod請求
HttpClient httpClient = new HttpClient();
statusCode = httpClient.executeMethod(postMethod);
String soapRequestData = postMethod.getResponseBodyAsString();
soapRequestData就是調用web服務的Soap響應數據,是xml格式的,可以通過解析soapRequestData來獲得調用web服務的返回值。
2.使用Xfire
用到的jar文件xfire-all-1.2.4.jar, jdom-1.0.jar
方法:
定義一個Client對象,指定web服務的wsdl的地址
Client c = new Client(new URL(「http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl」));
調用Client對象的invoke方法,指定web服務的方法名,和參數,返回值是一個Object型的數組。
下面代碼調用getVersionTime方法,這個方法沒有參數用所以後一個參數使用new Object[0]。
Object[] results = c.invoke(「getVersionTime」, new Object[0]);
3.使用axis2
下載axis2-1.4
方法:
打開控制台,進入axis2-1.4/bin目錄
wsdl2java.bat -uri http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl -p ws.clinet.axis2
上述命令執行完後,會在當前目錄下生成一個src目錄,在src\ ws\ clinet\ axis2目錄里生成XXXXCallbackHandler.java和XXXXStub.java兩個文件。
wsdl2java 會根據wsdl文件生成web服務的調用介面,參數類,返回值的類。
在調用webservice的時候直接實例化一個XXXXStub的對象,然後調用web服務的方法就可以了。
4. 總結
針對某種工具搭建的Web Service服務可能有與其對應的更簡單的調用方法,在這里沒有做描述,上述的調用web服務的方法是通用的。
上述三種方法中使用httpclient應該是比較靈活,但是開發效率低,難度大,使用Xfire和axis2比較容易,開發速度快,但是axis2通用性不好,有的web服務用axis2不好用。httpclient和Xfire通用性比較好,鑒於以上特點推薦使用Xfire。