posts - 15,comments - 29,trackbacks - 0
Axis框架来自 Apache 开放源代码组织,它是基于JAVA语言的最新的 SOAP 规范(SOAP 1.2)和 SOAP with Attachments 规范(来自 Apache Group )的开放源代码实现。下面是它的核心引擎的体系结构图:



下面以 http://www.webxml.com.cn/webservices/DomesticAirline.asmx?Wsdl  航班查询服务为例来分析开发客户端的步骤。
1.首先从http://ws.apache.org/axis/index.html上下载axis的程序包。

2.运行cmd,进入下载包解压后的目录,运行   Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -p client  http://www.webxml.com.cn/webservices/DomesticAirline.asmx?Wsdl  
(其中-p是生成代码的包名,根据需要设置)
 然后把生成的代码拷贝到项目里面。

3.拷贝axis里面的包到工程里面。

4.客户端代码。

public List<TicketInfo> getDomesticAirlinesTime(String startCity, String lastCity, String theDate) throws RemoteException, ServiceException {
        DomesticAirline service 
= new DomesticAirlineLocator();
        GetDomesticAirlinesTimeResponseGetDomesticAirlinesTimeResult airlines;

        airlines 
= service.getDomesticAirlineSoap12().getDomesticAirlinesTime(startCity, lastCity,theDate, null);
    
        MessageElement[] FOCElement 
= airlines.get_any();
        List FOCElementHead 
= FOCElement[0].getChildren();//消息头,DataSet对象    
        List FOCElementBody = FOCElement[1].getChildren();//消息体信息,DataSet对象  

        String nn 
= FOCElementBody.get(0).toString();//消息体的字符串形式     
        
        

        SAXReader reader 
= new SAXReader();
        Document document 
= null;

        
try {
            document 
= document = DocumentHelper.parseText(nn);
        }
 catch (Exception e) {
            
// TODO Auto-generated catch block
            System.out.println(e.toString());
        }

        
        
        Element root 
= (Element)document.getRootElement(); // 得到根元素    

        List
<TicketInfo> ticketInfoList = new ArrayList<TicketInfo>();
        
for (Object e : root.elements())
        
{
            TicketInfo ticketInfo 
= new TicketInfo();
            Element element 
= (Element) e;
            ticketInfo.setAirlineCompany(element.elementText(
"Company"));
            ticketInfo.setFlightNumber(element.elementText(
"AirlineCode"));
            ticketInfo.setStartAirport(element.elementText(
"StartDrome"));
            ticketInfo.setEndAirport(element.elementText(
"ArriveDrome"));
            ticketInfo.setAirCraftType(element.elementText(
"Mode"));
            SimpleDateFormat  myFmt
=new   SimpleDateFormat("HH:mm");     
            
try {
                ticketInfo.setStartTime(myFmt.parse(element.elementText(
"StartTime")));
                ticketInfo.setEndTime(myFmt.parse(element.elementText(
"ArriveTime")));
            }
 catch (ParseException e1) {
                
// TODO Auto-generated catch block
                e1.printStackTrace();
            }

            
            ticketInfoList.add(ticketInfo);
        }

        
        
return ticketInfoList;
    }

    
}

本来客户端代码应该是比较简单的,但是这个例子的webservice服务端是用.net写的,查询后返回DataSet类型,java没有对应的类型,所以只能把返回后的结果用xml来解析,然后在放入java的数据对象里面。
posted on 2008-12-04 10:04 流腥鱼 阅读(2851) 评论(0)  编辑  收藏 所属分类: 编程教程java

只有注册用户登录后才能发表评论。


网站导航: