『壹』 webservice返回的xml怎麼解析
webservice返回的xml解析方法:
一般來說,調用webService通常需要幾個步驟,在調用之前,首先需要下載Soap的jar包。
1、參數設置:上面說到的幾個參數都要先設置,這主要依賴於要調用的web'Service的網址:
//命名空間
StringnameSpace="http://WebXml.com.cn/";
//調用的方法名稱
StringmethodName="getDetailInfoByTrainCode";
//EndPoint
StringendPoint="http//webservice.webxml.com.cn/WebServices/TrainTimeWebService.asmx";
//SOAPAction
StringsoapAction="http//WebXml.com.cn/getDetailInfoByTrainCode";
2、指定命名空間與調用方法名
//指定WebService的命名空間和調用的方法名
SoapObjectrpc=newSoapObject(nameSpace,methodName);
3、設置參數:
//設置需調用WebService介面需要傳入的兩個參數TrainCode、userId
rpc.addProperty("TrainCode",params[0]);
rpc.addProperty("UserID","");
4、生成調用WebService方法的SOAP請求信息
//生成調用WebService方法的SOAP請求信息,並指定SOAP的版本
=newSoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.bodyOut=rpc;
5、調用WebService方法
try{
//調用WebService
transport.call(soapAction,envelope);
}catch(Exceptione){
e.printStackTrace();
}
6、解析WebService中的DataSet數據
SoapObjectsoap1=(SoapObject)object.getProperty("");
SoapObjectchilds=(SoapObject)soap1.getProperty(1);
SoapObjectsoap2=(SoapObject)childs.getProperty(0);
///
for(inti=0;i<soap2.getPropertyCount();i++){
SoapObjectsoap3=(SoapObject)soap2.getProperty(i);
///
Infoinfo=newInfo();
info.setStation(soap3.getProperty(0).toString());
info.setArriveTime(soap3.getProperty(1).toString());
info.setStartTime(soap3.getProperty(2).toString());
info.setKm(soap3.getProperty(3).toString());
Raininfo.add(info);
//result=soap3.getProperty(3).toString();
}
數據格式如下:
『貳』 怎麼用WebService傳輸XML文件
WebService中文件傳輸
WebService處理傳遞普通的信息,還可以傳輸文件,下面介紹WebService是怎麼完成文件傳輸的。
1、 首先編寫伺服器端上傳文件的WebService方法
package com.hoo.service;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import javax.activation.DataHandler;
/**
* <b>function:</b>Axis WebService完成文件上傳伺服器端
* @author hoojo
* @createDate Dec 18, 2010 1:16:16 PM
* @file UploadFileService.java
* @package com.hoo.service
* @project AxisWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email [email protected]
* @version 1.0
*/
public class UploadFileService {
/**
* <b>function:</b>傳遞文件
* @author hoojo
* @createDate Dec 18, 2010 1:27:58 PM
* @param handler DataHandler這個參數必須
* @param fileName 文件名稱
* @return upload Info
*/
public String upload(DataHandler handler, String fileName) {
if (fileName != null && !"".equals(fileName)) {
File file = new File(fileName);
if (handler != null) {
InputStream is = null;
FileOutputStream fos = null;
try {
is = handler.getInputStream();
fos = new FileOutputStream(file);
byte[] buff = new byte[1024 * 8];
int len = 0;
while ((len = is.read(buff)) > 0) {
fos.write(buff, 0, len);
}
} catch(FileNotFoundException e) {
return "fileNotFound";
} catch (Exception e) {
return "upload File failure";
} finally {
try {
if (fos != null) {
fos.flush();
fos.close();
}
if (is != null) {
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return "file absolute path:" + file.getAbsolutePath();
} else {
return "handler is null";
}
} else {
return "fileName is null";
}
}
}
上傳方法和我們以前在Web中上傳唯一不同的就是參數一DataHandler,可以將這類看成文件傳輸器,他可以把文件序列化。然後通過DataHandler可以得到一個輸入流InputStream,通過這個流可以讀到文件的內容。其他的操作和普通上傳類似。
2、 定製wsdd發布文件上傳的WebService服務
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="UploadFile" provider="java:RPC">
<parameter name="className" value="com.hoo.service.UploadFileService" />
<parameter name="allowedMethods" value="*" />
<parameter name="scope" value="Session" />
<!-- 和伺服器端上傳文件的方法簽名對應,參數也對應 -->
<operation name="upload" qname="operNS:upload" xmlns:operNS="upload" returnType="rns:string"
xmlns:rns="http://www.w3.org/2001/XMLSchema">
<parameter name="handler" type="ns:DataHandler" xmlns:ns="http://www.w3.org/2001/XMLSchema"/>
<parameter name="fileName" type="ns:string" xmlns:ns="http://www.w3.org/2001/XMLSchema"/>
</operation>
<typeMapping qname="hns:DataHandler" xmlns:hns="ns:FileUploadHandler"
languageSpecificType="java:javax.activation.DataHandler"
serializer="org.apache.axis.encoding.ser." deserializer="org.apache.axis.encoding.ser." encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</service>
</deployment>
上面才xml節點元素在前面都見過了,說明下operation中的參數,注意要指定參數類型,特別是DataHandler的類型,然後就是typeMapping的serializer、deserializer的序列化和反序列化工廠類的配置。
3、 用dos命令發布當前WebService
C:\SoftWare\tomcat-5.0.28\tomcat-5.0.28\webapps\AxisWebService\WEB-INF>java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService deployUpload.wsdd
發布完成後,可以通過這個地址查看uploadFile這個service了
http://localhost:8080/AxisWebService/servlet/AxisServlet
4、 編寫客戶端代碼
package com.hoo.client;
import java.rmi.RemoteException;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.encoding.ser.;
import org.apache.axis.encoding.ser.;
/**
* <b>function:</b>上傳文件WebService客戶端
*
* @author hoojo
* @createDate Dec 18, 2010 1:38:14 PM
* @file UploadFileClient.java
* @package com.hoo.client
* @project AxisWebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email [email protected]
* @version 1.0
*/
public class UploadFileClient {
public static void main(String[] args) throws ServiceException, RemoteException {
String url = "http://localhost:8080/AxisWebService/services/UploadFile";
String fileName = "readMe.txt";
String path = System.getProperty("user.dir") + "\\WebRoot\\" + fileName;
System.out.println(path);
//這樣就相當於構造了一個帶文件路徑的File了
DataHandler handler = new DataHandler(new FileDataSource(path));
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
/**
* 注冊異常類信息和序列化類 ns:FileUploadHandler 和 wsdd 配置文件中的typeMapping中的xmlns:hns="ns:FileUploadHandler" 的對應 DataHandler
* 和 wsdd 配置文件中的typeMapping中的qname="hns:DataHandler"的DataHandler對應
*/
QName qn = new QName("ns:FileUploadHandler", "DataHandler");
call.registerTypeMapping(DataHandler.class, qn,
.class,
.class);
call.setOperationName(new QName(url, "upload"));
//設置方法形參,注意的是參數1的type的DataHandler類型的,和上面的qn的類型是一樣的
call.addParameter("handler", qn, ParameterMode.IN);
call.addParameter("fileName", XMLType.XSD_STRING, ParameterMode.IN);
//設置返回值類型,下面2種方法都可以
call.setReturnClass(String.class);
//call.setReturnType(XMLType.XSD_STRING);
String result = (String) call.invoke(new Object[] { handler, "remote_server_readMe.txt" });
System.out.println(result);
}
}
至此,文件傳輸就完成了。怎麼樣,還不錯吧!
如果你用myEclipse進行開發的話,運行時可能會出現以下的錯誤:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
原因是jar包版本不統一,解決方法如下:
刪除Java EE 5 Libraries/javaee.jar/mail里的包有東西.
具體方法如下:
用rar打開X:/Program Files/MyEclipse 6.0/myeclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_6.0.1.zmyeclipse601200710/data/libraryset/EE_5/javaee.jar,然後刪除mail,一切就ok了.
『叄』 webservice和xml作用,和對二者的理解
xml是一種基於標記的數據格式,而webservice是在client和server之間建立通訊,並通過xml進行交互數據,xml是基礎,而webservice正式建立在這種基礎上的應用
『肆』 如何用Jmeter 測試 webservice發送xml文件
首先要打開Jmeter,打開方式跟一般的軟體有些區別。可執行程序位於apache-jmeter-3.1-->bin-->jmeter.bat,雙擊Jmeter.bat即可打開該應用程序
添加線程組。右鍵測試計劃,添加-->Threads(User)-->線程組,所有的操作都會通過這個線程組來進行,包括循環的次數,運行的時間等等。之後測試的webservice介面,結果查看,都要通過線程組
添加WebService測試單元。
我們都是用SOAP協議通過Http來調用它,具體原理:Web service都是放在Web伺服器(如IIS)後面的,客戶生成的SOAP請求會被嵌入在一個HTTP POST請求中,發送到Web伺服器來。Web伺服器再把這些請求轉發給Web service請求處理器。請求處理器的作用在於,解析收到的SOAP請求,調用Web service,然後再生成相應的SOAP應答。
所以我們要添加soap協議request
右鍵線程組-->添加-->Sample--> SOAP/XML-RPC Request
添加查看結果選項。右鍵剛添加的SOAP/XML-RPC Request,添加監聽器,點擊圖形結果和用表格查看結果,也可以加入其它結果
設置SOAP/XML-RPC Request,填寫WebService的地址,SOAPAtion地址以及數據格式,webservice暴露了哪些介面,介面都需要傳入哪些參數,在數據格式中都有體現,你只需要去替換參數,傳個伺服器就可以了
設置完之後,可以點擊運行按鈕,測試一下,點擊添加的結果模塊查看結果是否成功
7
測試成功之後,設置線程組的線程數和循環條件進行壓力測試
『伍』 webservice的web.xml怎麼配置
你好,使用SAP
BO提供的WebService時,可能會出現不可使用的情況,這時我們可以先測試一下WebService的鏈接是否可用。打開鏈接路徑下services/Session進行WebService的測試,如果出現:"Please
enable REST support in WEB-INF/conf/axis2.xml and
WEB-INF/web.xml",說明WebService配置中REST開關未打開。配置切換方式如下:
1.進入伺服器的BO服務端安裝路徑
2.找到如下文件:"\TomcatXX\webapps\dswsbobje\WEB-INF\conf\axis2.xml"(其中XX為tomcat的版本號,BO3.1的是55,BO4.0以上的都是6)
3.打開上述文件,找到true那一行:
把標記出的true改成false,保存。
4.重啟Tomcat服務,打開之前所述鏈接,出現Session信息,配置修改完成。
『陸』 QT 中向webservice發送xml數據請求
服務端向客戶端傳數據不會做了!這樣 你是給他提供介面,他傳入參數給你 你通過這些參數 在後台取得應該返回的東西 返回給他,比如 介面為
public String getUserID(String name);//這里的參數也許是個XML,那麼你就需要解析這個XML,
通過name 查詢資料庫 返回userID;
return userID;