精彩的人生
好好工作,好好生活
BlogJava
首頁
新隨筆
聯(lián)系
聚合
管理
147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(43)
給我留言
查看公開留言
查看私人留言
隨筆分類
BIRT(1)
Eclipse(13)
EMF&GEF(6)
Google Code Jam(3)
Gossip(28)
Java(45)
Job(6)
Social Network(5)
Web(1)
Web Service(41)
我愛吃(2)
隨筆檔案
2008年9月 (1)
2008年8月 (1)
2008年3月 (1)
2008年2月 (1)
2008年1月 (1)
2007年12月 (1)
2007年11月 (2)
2007年10月 (1)
2007年7月 (1)
2007年3月 (1)
2006年10月 (9)
2006年9月 (18)
2006年8月 (4)
2006年7月 (6)
2006年6月 (3)
2006年5月 (11)
2006年4月 (27)
2006年3月 (25)
2006年2月 (6)
2006年1月 (1)
2005年12月 (20)
2005年11月 (6)
相冊
my
收藏夾
GEF/EMF/Eclipse(1)
semantic web(4)
uddi(2)
配色方案(5)
Friends
Reload_cn
uiiang
八進制
老冒的SNS專欄
Web Site
Eclipse Org
Eclipse World
網(wǎng)談
關注虹的新作,關注SNS
搜索
積分與排名
積分 - 445347
排名 - 123
最新評論
1.?re: 當cmd里輸入路徑包含空格的時候
謝謝分享
--網(wǎng)盤搜索-kaopu.so
2.?re: 當cmd里輸入路徑包含空格的時候[未登錄]
我的路徑是中文帶空格怎么辦?
%cd%/bin/bin/java -jar ../../export.jar執(zhí)行不了啊
--liu
3.?re: Rare Order[未登錄]
@Guest
Wrong at all!!!!
--123
4.?re: 當cmd里輸入路徑包含空格的時候[未登錄]
很有用喲
--temp
5.?re: 插件制作過程記錄(使用TreeViewer貢獻視圖)
代碼下載不了了,
--jiaojiaf
閱讀排行榜
1.?正宗泡椒鳳爪做法(zz)(146695)
2.?當cmd里輸入路徑包含空格的時候(30574)
3.?將String轉換成InputStream(28084)
4.?轉:Eclipse插件FatJar安裝與使用(19263)
5.?簡單的將String類型的xml轉換為對象的代碼(13972)
6.?如何寫好PPT(8842)
7.?讀Axis2用戶幫助文檔(7850)
8.?2005.6.12 使用jsp上傳文件(7568)
9.?從插件/RCP中取得文件路徑的方法(6250)
10.?Eclipse的BPEL(5564)
評論排行榜
1.?正宗泡椒鳳爪做法(zz)(97)
2.?2005.6.12 圖片處理(17)
3.?如何寫好PPT(10)
4.?讀Axis2用戶幫助文檔(9)
5.?gef布局的一點感想(8)
6.?從擴展點中l(wèi)oad class(8)
7.?從插件/RCP中取得文件路徑的方法(7)
8.?emf&gef之一example.my.gefpractice(7)
9.?轉:Eclipse插件FatJar安裝與使用(6)
10.?將String轉換成InputStream(6)
轉:一個soap的例子
CSDN - 專家門診 - Java J2SE / 基礎類問題
回復人: panq(漫隨天外) ( ) 信譽:100 2001-10-25 13:40:12Z 得分:300
簡單對象訪問協(xié)議(SOAP):
用于Internet上的分布式計算,可以實現(xiàn)跨平臺跨編程語言的對象訪問和方法調用.
它通過HTTP協(xié)議實現(xiàn)參數(shù)的傳輸,同時以特定的XML格式表示參數(shù).這樣,只需要一個支持H
TTP協(xié)議的WEB服務器和一個XML解析器就可以實現(xiàn)簡單的SOAP功能.由于成為了標準,所以
會有越來越多的軟件支持它.大家若有興趣的話可以去看SOAP1.1標準.
同時,還有許多SOAP的開發(fā)工具,以簡化SOAP的開發(fā).隨著這些開發(fā)工具的完善,我們
甚至可以不用管具體的SOAP格式就可以開發(fā)SOAP應用.
下面以APACHE的SOAP包為例,舉個例子:
服務器端的Class:
package samples.soap;
public class SOAPCal {
double rate;
public SOAPCal() {
rate = 8.7;
}
public void setRate(double rate) {
this.rate = rate;
}
public Double calculate(int direction, double value) {
Double retVal;
switch(direction) {
case 0:
retVal = new Double(value * rate);
break;
case 1:
retVal = new Double(value / rate);
break;
default:
retVal = null;
}
return retVal;
}
}
客戶端Class:
package samples.soap;
import java.io.*;
import java.util.*;
import java.net.*;
import org.w3c.dom.*;
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.encoding.*;
import org.apache.soap.encoding.soapenc.*;
import org.apache.soap.rpc.*;
public class SOAPCalUser {
public static void main(String[] args) throws Exception {
if (args.length != 3
&& (args.length != 4 || !args[0].startsWith("-"))) {
System.err.println("Usage:");
System.err.println(" java " + SOAPCalUser.class.getName() +
" [-encodingStyleURI] SOAP-router-URL name " +
"(0: dollor to yuan | 1: yuan to dollor) value");
System.exit (1);
}
int offset = 4 - args.length;
String encodingStyleURI = args.length == 11
? args[0].substring(1)
: Constants.NS_URI_SOAP_ENC;
URL url = new URL(args[1 - offset]);
int direction = Integer.parseInt(args[2 - offset]);
double value = Double.parseDouble(args[3 - offset]);
Call call = new Call();
call.setTargetObjectURI("urn:SOAPCal");
call.setMethodName("calculate");
call.setEncodingStyleURI(encodingStyleURI);
Vector params = new Vector();
params.add(new Parameter("direction", int.class, new
Integer(direction), null));
params.add(new Parameter("value", double.class, new Double(value),
null));
call.setParams(params);
Response resp;
try {
resp = call.invoke(url, "");
} catch (SOAPException e) {
System.err.println("Caught SOAPException (" +
e.getFaultCode() + "): " +
e.getMessage());
return;
}
// Check the response.
if (!resp.generatedFault()) {
Parameter ret = resp.getReturnValue();
Object retVal = ret.getValue();
System.out.println(retVal != null ? "\n" + retVal : "I don't
know.");
} else {
Fault fault = resp.getFault();
System.err.println("Generated fault: ");
System.out.println (" Fault Code = " +
fault.getFaultCode());
System.out.println (" Fault String = " +
fault.getFaultString());
}
}
}
和
package samples.soap;
import java.io.*;
import java.util.*;
import java.net.*;
import org.w3c.dom.*;
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.encoding.*;
import org.apache.soap.encoding.soapenc.*;
import org.apache.soap.rpc.*;
public class SOAPCalAdmin {
public static void main(String[] args) throws Exception {
if (args.length != 2
&& (args.length != 3 || !args[0].startsWith("-"))) {
System.err.println("Usage:");
System.err.println(" java " + SOAPCalAdmin.class.getName()
+ " [-encodingStyleURI] SOAP-router-URL name " +
"rate ");
System.exit (1);
}
int offset = 3 - args.length;
String encodingStyleURI = args.length == 11
? args[0].substring(1)
: Constants.NS_URI_SOAP_ENC;
URL url = new URL(args[1 - offset]);
double rate = Double.parseDouble(args[2 - offset]);
Call call = new Call();
call.setTargetObjectURI("urn:SOAPCal");
call.setMethodName("setRate");
call.setEncodingStyleURI(encodingStyleURI);
Vector params = new Vector();
params.add(new Parameter("rate", double.class, new Double(rate),
null));
call.setParams(params);
Response resp;
try {
resp = call.invoke(url, "");
} catch (SOAPException e) {
System.err.println("Caught SOAPException (" +
e.getFaultCode() + "): " +
e.getMessage());
return;
}
// Check the response.
if (!resp.generatedFault()) {
System.out.println("The rate has been changed.");
} else {
Fault fault = resp.getFault();
System.err.println("Generated fault: ");
System.out.println (" Fault Code = " +
fault.getFaultCode());
System.out.println (" Fault String = " +
fault.getFaultString());
}
}
}
發(fā)布用的XML文件dd.xml:
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment"
id="urn:SOAPCal">
<isd:provider type="java"
scope="Application"
methods="setRate calculate">
<isd:java class="samples.soap.SOAPCal"/>
</isd:provider>
</isd:service>
這個程序的功能是設置和計算美元/人民幣的兌換價格,用
java org.apache.soap.server.ServiceManagerClient
http://sb3server:8080/soap/servlet/rpcrouter
deploy dd.xml
把服務器端程序發(fā)布到TOMCAT上,然后在客戶端用:
java samples.soap.SOAPCalAdmin
http://sb3server:8080/soap/servlet/rpcrouter
XX.XX
來設置匯率(1美元兌換多少人民幣), 用
java samples.soap.SOAPCalUser
http://sb3server:8080/soap/servlet/rpcrouter
(1|0) XX.XX
來換算,其中1和0代表從人民幣到美元和從美元到人民幣,下一個參數(shù)是要換算的錢數(shù).
另外,在http://www.xmethods.com/gettingstarted/apache.html
有一個簡單的教程介紹怎樣用APACHE的SOAP包寫SOAP客戶端程序.講解比較詳細.
注意點:
*如果SOAP傳回來的參數(shù)是一個CLASS,這個CALSS會被序列化(Serializer)為一段XML
代碼,在客戶端接這個CLASS時,仍然需要一個同名CLASS,而且那些被傳遞過來的數(shù)據(jù)的SE
T和GET方法名和參數(shù)名要相同.如果是自定義的CLASS,就要做maping聲明.聲明方法見APA
CHE SOAP包的samples\addressbook\DeploymentDescriptor.xml文件中isd:mappings的
寫法.
在客戶端調用時要加上
SOAPMappingRegistry smr = new SOAPMappingRegistry();
BeanSerializer beanSer = new BeanSerializer();
smr.mapTypes(/*encodingStyle*/Constants.NS_URI_SOAP_ENC,
new QName(/*Namespace URI*/"urn:xml-soap-address-demo", /*Local
Part*/"address"),
/*Class type*/Address.class, /*java2XMLClassName*/beanSer,
/*xml2JavaClassName*/beanSer);
call.setSOAPMappingRegistry(smr);
*目前不是所有的CLASS都能被序列化,如Hashtable就不行,所以最好用簡單的數(shù)據(jù)類
型,如String,String,Integer,Double及其數(shù)組來傳遞變量,對復雜的參數(shù),可以直接做成
XML Document傳遞(使用Constants.NS_URI_LITERAL_XML作為EncodingStyleURI),這樣就
省得客戶端專門做個CLASS來接參數(shù),也方便跨語言的調用.在使用APACHE的SOAP包時,XML
Document在客戶端會被轉換為XML DOM的Element class.
現(xiàn)在唯一的方法是自己寫進行序列化的程序,不過以后也許會有標準的序列化方法.
*CLASS被序列化時CLASS中的靜態(tài)的變量是不會被加入的來的,這一點要注意.
posted on 2006-03-09 11:23
hopeshared
閱讀(3923)
評論(1)
編輯
收藏
所屬分類:
Java
Feedback
#
re: 轉:一個soap的例子
2009-06-22 14:52
1123
也不排個版..
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
一段關于callback的代碼
當cmd里輸入路徑包含空格的時候
java類加載的表現(xiàn)形式(zz)
初探Java類加載機制的奧秘(zz)
Java類加載內幕(zz)
使用Jakarta Commons Pool處理對象池化(zz)
對象池(對象緩沖池)-高手進階(zz)
簡單的將String類型的xml轉換為對象的代碼
一段很好用的判斷數(shù)據(jù)庫中某張表是否存在的代碼
轉:Java Annotation 高級應用
Powered by:
BlogJava
Copyright © hopeshared
主站蜘蛛池模板:
绵竹市
|
大丰市
|
白银市
|
贵溪市
|
樟树市
|
平遥县
|
若尔盖县
|
长泰县
|
涞水县
|
合水县
|
望都县
|
西城区
|
措勤县
|
威宁
|
湄潭县
|
建始县
|
兴国县
|
即墨市
|
和顺县
|
巴塘县
|
旅游
|
沂源县
|
贺兰县
|
毕节市
|
盘山县
|
盐山县
|
长葛市
|
石景山区
|
淄博市
|
康马县
|
满洲里市
|
车致
|
海门市
|
师宗县
|
凤冈县
|
忻城县
|
东兴市
|
如东县
|
二手房
|
黄骅市
|
乌兰察布市
|