`
longgangbai
  • 浏览: 7354784 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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();
		}
 

 

分享到:
评论

相关推荐

    Java与.net开发webservice详解大全

    - Java客户端通过Apache CXF或其他Java SOAP库(如Axis2)解析.NET服务的WSDL,生成客户端代码,然后调用服务。 开发环境中,使用的是JDK1.6和Eclipse3.6作为Java环境,Visual Studio 2010作为.NET环境。值得注意...

    Java与.NET 的Web Services相互调用

    这将在VS.NET中生成一个代理类,供.NET客户端调用Java服务。通过设置事件处理程序,当按钮被点击时,调用Web服务的getName方法并显示结果。 **二、用Java做客户端调用.NET写的Web Services** 1. **创建.NET Web ...

    java基于Axis2调用C#开发的web service获取xml结果

    - 创建服务代理类:使用Axis2的wsdl2java工具,根据C# Web服务提供的WSDL(Web Service Description Language)文件生成Java客户端代码。 - 实例化服务代理:在Java代码中创建服务代理类的实例,设置必要的配置如...

    WebService开发(C#)+Java调用-教程.zip

    1. **生成客户端代理类**:使用`wsimport`工具,根据C# WebService的WSDL地址生成Java客户端代理类。 2. **实例化代理类**:在Java代码中,创建代理类的实例,并调用相应的方法。 ```java MyWebService ...

    DevWebServicesWithApacheAxis

    根据提供的文件信息,我们可以深入探讨如何使用 Apache Axis 开发 Web 服务,并且了解该书的主要内容、特点以及针对的目标读者。 ### 标题:“DevWebServicesWithApacheAxis” 该标题明确指出本书的主题是关于如何...

Global site tag (gtag.js) - Google Analytics