首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > ASP >

Eclipse 依据ASP.NET WSDL自动生成Axis的WS客户端

2012-06-27 
Eclipse 根据ASP.NET WSDL自动生成Axis的WS客户端? ? ? 最近研究一下相关的开发的WebService,发现他们的服

Eclipse 根据ASP.NET WSDL自动生成Axis的WS客户端

? ? ? 最近研究一下相关的开发的WebService,发现他们的服务均采用ASP.net开发的服务,于是乎研究一下。将成果告诉大家,并分享一下。

? ? ? 开发Java的童靴大多喜欢使用Myeclipse开发,因为他具备许多功能,可以自动生成。我更喜欢采用eclipse开发,简单快捷。

1.首先给eclipse安装一个Tomcat 的插件。

2.根据eclipse提示创建相关的WebService客户端。(eclipse支持的为axis1.4的)。如果想采用axis2.0可以自己配置忽略了。

在asp.net中有一种数据结构为dataset,转换为java 的webservice客户端时候,对应XXXXResult.里面一个

?private org.apache.axis.message.MessageElement [] _any;

该数据分为两部分,第一个对象为消息头部。不用操作。

? ? ? ? ? ? ? ? ? ? ? ? ? ?第二个对象为消息体,所有的信息包含消息体的xml中。

   /**    * 获得这国内飞机航班时刻表Web Services支持的全部城市中英文名称和缩写 DataSet    *      *输入参数:无;返回数据:     *结构为   Item(enCityName)城市英文名称、     *Item(cnCityName)城市中文名称、     *Item(Abbreviation)缩写,     *      按城市英文名称升序排列    * @return    */   public EtripJSONResponse  queryAllFlightCity()   {   EtripJSONResponse jsonRequest=new EtripJSONResponse();   try {DomesticAirlineSoap airlineSoap=flightLocator.getDomesticAirlineSoap();GetDomesticCityResponseGetDomesticCityResult flightLineResult=airlineSoap.getDomesticCity();//获取消息数据集合MessageElement[]  messageElements=flightLineResult.get_any();//获取消息头信息List flightHeader=messageElements[0].getChildren();//获取消息体List flightBody=messageElements[1].getChildren();if(flightBody.size()<=0){return null;}//获取消息体信息String bodyMessage=flightBody.get(0).toString();//转换消息内容为json格式String json=parseQueryAllFlightCity(bodyMessage);jsonRequest.setFlag(EtripJSONResponse.SUCCESS);jsonRequest.setData(json);} catch (ServiceException e) {jsonRequest.setMessage("请求第三方服务异常:"+e.getMessage());jsonRequest.setFlag(EtripJSONResponse.FAILURE);} catch (RemoteException e) {jsonRequest.setFlag(EtripJSONResponse.FAILURE);jsonRequest.setMessage("请求第三方服务异常:"+e.getMessage());} catch (JDOMException e) {jsonRequest.setFlag(EtripJSONResponse.FAILURE);jsonRequest.setMessage("请求第三方服务时,xml的解析错误:"+e.getMessage());}   return jsonRequest;   }
?

我们可以从客户端获取到消息体内容的字符串。我们需要解析相关的xml。

需要操作如下:

1.将xml字符串转换为相关的流对象。

2.将xml对象解析具体代码如下:

 /**    * 将xml字符串的解析    * @param bodyMessage    * @return    * @throws JDOMException    */private String  parseQueryAllFlightCity(String bodyMessage)throws JDOMException {//创建字节流信息InputStream file=new ByteArrayInputStream(bodyMessage.getBytes());//读取xml的信息SAXBuilder sb = new SAXBuilder();  Document doc = sb.build(file);Element root = doc.getRootElement(); // 得到根元素       List flightListElement = root.getChildren();   Element flightElement = null;   JSONObject flight=null;StringBuffer buffer=new StringBuffer();if(CollectionUtils.isNotEmpty(flightListElement)){for(int i=0; i<flightListElement.size(); i++) {  flight=new JSONObject();flightElement = (Element) flightListElement.get(i);   buffer.append("{enCityName=");buffer.append(flightElement.getChild("enCityName").getText());buffer.append(",cnCityName=");buffer.append(flightElement.getChild("cnCityName").getText());buffer.append(",Abbreviation=");buffer.append(flightElement.getChild("Abbreviation").getText());buffer.append("}");if(i==flightListElement.size()-1){buffer.append(",");}}}return buffer.toString();}
?

?

热点排行