Eclipse 根据ASP.NET WSDL自动生成Axis的WS客户端 博客分类: WebService的开发应用 ASPNETDatasetWebServiceSOAPAxis
程序员文章站
2024-02-07 13:18:46
...
最近研究一下相关的开发的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(); }