本篇文章将讲述如何通过axis取发布的Web services并处理返回含有DataSet的处理结果展现在页面上
涉及到的知识有
AXIS
SAXBuilder
xml
步骤如下
)生成client stub文件
必备条件axis开源包JDK
A)比如AXIS包放在你的C盘则需要在环境变量当中设定的东东有
AXIS_HOME=C:\AXIS
AXIS_CLASSPATH=;%AXIS_HOME%\lib\axisjar;%AXIS_HOME%\lib\axisantjar;%AXIS_HOME%\lib\commonsdiscoveryjar;%AXIS_HOME%\lib\commonsloggingjar;%AXIS_HOME%\lib\jaxrpcjar;%AXIS_HOME%\lib\saajjar;%AXIS_HOME%\lib\wsdljjar;%AXIS_HOME%\lib\logjjar;%AXIS_HOME%\lib\activationjar;%AXIS_HOME%\lib\mailjar
然后加入到PATH当中;% AXIS_CLASSPATH% (加入就可以了)
注意很多人因为以上的配置不对导致对AXIS学习的信心下降其实仔细一点就会发现在CLASSPATH当中找一找有没有版本区别也就是每一个JAR包是不是真的存在就可以了(哈哈我曾为之付出了两天的时间娞!)
B)进入DOS模式转到D盘执行如下代码
java orgapacheaxiswsdlWSDLJava p <名称最好是包名> 看到了吧发布为asmx的文件后面加入?wsdl就可以解决了
然后就会在这个<名称最好是包名>下就会有一堆的JAVA文件一般的话会有
xxxxjava
xxxxLocatorjava
xxxxSoapjava
xxxxSoapStubjava
其次还有以下划线_xxxx????java的文件都是序列化的对象也就是返回的结果对应元素可以暂时不理它下面就以作者生成的示例做一个引用webservice的操作作者得到的文件如下:
SearchFlightInfojava
SearchFlightInfoLocatorjava
SearchFlightInfoSoapjava
SearchFlightInfoSoapStubjava
_GetFlightInfoResponse_GetFlightInfoResultjava
_GetstrFlightInfojava
_GetstrFlightInfoResponsejava
C)引用方法
基本思想是从得到web services后取得他的主体信息(返回的数据信息)然后生成XML文件然后再把XML文件转换成一个JAVA序列化对象就可以了
如下是序列化对象的代码
java 代码
try {
/**
* 取得前台的参数 航班日期 航班号
*/
String planDate = requestgetParameter(day);
String flyNo = requestgetParameter(hanbanno);
/**
* 按照最新版本制作最新位置在
*/
SearchFlightInfo service = new SearchFlightInfoLocator();
SearchFlightInfoSoap client = servicegetSearchFlightInfoSoap();
_GetFlightInfoResponse_GetFlightInfoResult FOCInfo=clientgetFlightInfo(planDate flyNo);
String ErrorInfo = clientgetstrFlightInfo(planDate flyNo);//错误警告信息
MessageElement[] FOCElement = FOCInfoget_any();//取得xml信息
List FOCElementHead = FOCElement[]getChildren();//消息头DataSet对象
List FOCElementBody = FOCElement[]getChildren();//消息体信息DataSet对象
if (FOCElementBodysize() <= ){
//无返回记录则无输出
return mappingfindForward(NoRecord);
}
String nn = FOCElementBodyget()toString();//消息体的字符串形式
String path = requestgetRealPath();
CommonToolssaveXMLString(nnpath+\\FOC\\heweiyaxml);//保存为XML形式其中FOC目录做为固定目录
/**
* 使用DOMJ来解析这个序列化的对象
*/
//String path = requestgetRealPath();
Vector OutFoc = CommonToolsLoadXML(path + \\FOC\\heweiyaxml);
requestsetAttribute(OutFoc OutFoc);
if (requestgetParameter(as) != null) {
return mappingfindForward(Foc);
}
return mappingfindForward(Foc);
} catch (Exception e) {
/**
* 服务有异常或者服务没有启动!
*/
requestsetAttribute(UserMsg PublicFocError);
return mappingfindForward(Fail);
}
如下是解析XML文件变换成一个序列化的对象的JAVA代码(其中Vecto就相关于安全的LIST了)
/**
* 读取XML文件所有信息
*/
public static Vector LoadXML(String path) throws Exception {
Vector xmlVector = null;
FileInputStream fi = null;
try {
fi = new FileInputStream(path);
xmlVector = new Vector();
SAXBuilder sb = new SAXBuilder();
Document doc = sbbuild(fi);
Element root = docgetRootElement(); // 得到根元素
List focs = rootgetChildren(); // 得到根元素所有子元素的集合
Element foc = null;
FocBean xml = null;
/**
* 从开始因为为错误警告信息
*/
for (int i = ; i < focssize(); i++) {
xml = new FocBean();
foc = (Element) focsget(i); // 得到第一本书元素
/* xmlsetAta(focgetChild(ATA)getText());
xmlsetAtd(focgetChild(ATD)getText());
xmlsetEta(focgetChild(ETA)getText());
xmlsetEtd(focgetChild(ETD)getText());
xmlsetFltid(focgetChild(FLTID)getText());
xmlsetSta(focgetChild(STA)getText());
xmlsetStd(focgetChild(STD)getText());
xmlsetTdwn(focgetChild(TDWN)getText());
xmlsetToff(focgetChild(TOFF)getText());*/
/**
* 如下是最新版本的取得实体对象的方法
* modify by heweiya
*/
xmlsetAta(focgetChild(ATA)getText());
xmlsetAtd(focgetChild(ATD)getText());
xmlsetEta(focgetChild(ETA)getText());
xmlsetEtd(focgetChild(ETD)getText());
xmlsetFltid(focgetChild(FLTID)getText());
xmlsetSta(focgetChild(STA)getText());
xmlsetStd(focgetChild(STD)getText());
xmlsetTdwn(focgetChild(TDWN)getText());
xmlsetToff(focgetChild(TOFF)getText());
xmlsetAcown(focgetChild(ACOWN)getText());
xmlsetActyp(focgetChild(ACTYP)getText());
xmlsetArrstn(focgetChild(ARRSTN)getText());
xmlsetDatop(focgetChild(DATOP)getText());
xmlsetDepstn(focgetChild(DEPSTN)getText());
xmlsetPlnid(focgetChild(Plnid)getText());
xmlVectoradd(xml);
}
} catch (Exception e) {
Systemerrprintln(e + error);
} finally {
try {
ficlose();
} catch (Exception e) {
eprintStackTrace();
}
}
return xmlVector;
}
还有一个代码如下
java 代码
// 把String 保存为文件
public static void saveXMLString(String XMLString String fileName)
throws IOException {
File file = new File(fileName);
if (fileexists()) {
filedelete();
}
filecreateNewFile();
if (filecanWrite()) {
FileWriter fileOut = new FileWriter(file);
fileOutwrite(XMLString);
fileOutclose();
}
}