几个关于Webservice中的疑问

问题描述

我最近在学习JAVA中如何调用Webservice接口。使用的IDE是Eclipse.我在网上找了一个关于天气预报的示例,这个代码只是调用了Webservice的URL,并未看到调用方法。在看代码时发现如下几个疑问:1.Webservice是在数据传输时,是以XML文件的形传送的,在客户端调用服务器Webservice时,服务端应该会给调用端(即客户端)返回xml。而代码中(即客户端)为何还要组织XML,详见getSoapRequest方法,这个地方不解?2.客户端调用远程Webservice有哪几种方式?到目前我了解的第1种是:调用Webservice方法;第2种是直接调用Webservice的URL,如上面提到的天气预报。2.如果仅仅是调用远程Webservice接口,一般采用什么IDE比较好?我采用的是Eclipse+AXIS2,WSDL文件可以直接在Eclipse中转化为JAVA文件。3.我将WSDL文件转换后的文件只有两个:比如:WeatherWebServiceCallbackHandler.java和WeatherWebServiceStub.java,但是网上看到的,好像不止这两个文件?一般得到如上.java文件后,调用方法有什么妙招吗?最后将调用天气预报的一段代码呈现,希望高手们帮小弟回复以上几个疑问。多谢!

解决方案

解决方案二:
代码呈上:packagecom.bird.webservice.client;importjava.io.InputStream;importjava.io.OutputStream;importjava.io.OutputStreamWriter;importjava.net.URL;importjava.net.URLConnection;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importorg.dom4j.Document;importorg.dom4j.DocumentHelper;importorg.dom4j.Element;importorg.dom4j.io.SAXReader;/***类作用调用webservice得到天气预报服务*@authorqsw-Myonlystar2010-1-13上午09:59:45*/publicclassWeather{/***获取soap请求头,并替换其中的标志符号为用户的输入符号*@paramcity用户输入城市名*@return用户将要发送给服务器的soap请求*/privatestaticStringgetSoapRequest(Stringcity){StringBuildersb=newStringBuilder();sb.append("<?xmlversion="1.0"encoding="utf-8"?>"+"<soap:Envelopexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance""+"xmlns:xsd="http://www.w3.org/2001/XMLSchema""+"xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">"+"<soap:Body><getWeatherbyCityNamexmlns="http://WebXml.com.cn/">"+"<theCityName>"+city+"</theCityName></getWeatherbyCityName>"+"</soap:Body></soap:Envelope>");returnsb.toString();}/***用户把SOAP请求发送给服务器端,并返回服务器点返回的输入流*@paramcity用户输入的城市名称*@return服务器端返回的输入流,供客户端读取*@throwsException*/publicstaticInputStreamgetSoapInputStream(Stringcity)throwsException{try{Stringsoap=getSoapRequest(city);if(soap==null){returnnull;}URLurl=newURL("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx");URLConnectionconn=url.openConnection();conn.setUseCaches(false);conn.setDoInput(true);conn.setDoOutput(true);conn.setRequestProperty("Content-Length",Integer.toString(soap.length()));conn.setRequestProperty("Content-Type","text/xml;charset=utf-8");conn.setRequestProperty("SOAPAction","http://WebXml.com.cn/getWeatherbyCityName");OutputStreamos=conn.getOutputStream();OutputStreamWriterosw=newOutputStreamWriter(os,"utf-8");osw.write(soap);osw.flush();osw.close();InputStreamis=conn.getInputStream();//System.out.println(is.toString());returnis;}catch(Exceptione){e.printStackTrace();returnnull;}}/***通过dom4j对服务器端返回的XML进行解析*@paramcity用户输入的城市名称*@return符串用,分割*/publicstaticStringgetWeather(Stringcity){Documentdocument=null;SAXReaderreader=newSAXReader();Strings="";Mapmap=newHashMap();map.put("design","http://WebXml.com.cn/");reader.getDocumentFactory().setXPathNamespaceURIs(map);try{InputStreamis=getSoapInputStream(city);//得到输入流document=reader.read(is);//将输入流转化为documentStringt=document.asXML();System.out.println(t);}catch(Exceptione){e.printStackTrace();}Listnodes=document.selectNodes("//design:string");for(Iteratorit=nodes.iterator();it.hasNext();){Elementelm=(Element)it.next();Stringtext=elm.getText();s=s+elm.getText()+"n";}returns;}/***测试函数*@paramargs*/publicstaticvoidmain(Stringargs[]){Weatherw=newWeather();System.out.println(w.getWeather("武汉"));}}
解决方案三:
怎么就没有人呢。。。。。。。。。。。
解决方案四:
帮顶下楼主也打war3?呵呵
解决方案五:
帮顶,希望高手来解答
解决方案六:
引用4楼yuefengyuan的回复:

帮顶,希望高手来解答

看来没希望了。。。。。。。。。。。。。。

时间: 2024-09-30 10:14:41

几个关于Webservice中的疑问的相关文章

在 WebService 中使用属性

web 在 WebService 中发布一个方法很简单,只要将你要发布的方法用 System.Web.Services.WebMethodAttribute 属性类来标识出就可以了,但是该属性只能应用于方法而不能应用到属性.该类的MSDN文档可以见到(C#):[AttributeUsage(AttributeTargets.Method)]public sealed class WebMethodAttribute : Attribute 那么,如果我们需要将一个属性也发布成一个Web方法,该如

flex调用webservice中的自定义类的方法

 flex如何调用webservice中的自定义类,下面有个不错的示例,不了解的朋友可以参考下 代码如下: public class ReturnResult  {  public int curIndex { get; set; }  public DataTable idxList { get; set; }  }  //测试数据库连接  [WebMethod(Description = "!!!测试数据库连接,链接字符串在web.config中")]  public bool c

【转】WebService中使用自定义类的解决方法(5种)

原址:http://www.cnblogs.com/lxinxuan/archive/2007/05/24/758317.html Demo下载:http://files.cnblogs.com/lxinxuan/wa.rar        最近一个项目要用到webservice调用业务层类,刚开始的时候遇到了一点小麻烦,经过这两天的总结和实践,终于总结出几个比较常见的情况下的解决方法.         不知道大家是怎么解决,可能太简单了,所以没有觉得它是一个问题.反正我在博客园中没有搜索到相关

java-Java对象在堆栈中存放疑问

问题描述 Java对象在堆栈中存放疑问 今天突然产生一个疑问,之前接受的概念如下: Arm arm = new Arm(); 给一个变量new一个对象,arm是放在栈里的, new Arm()是存放在堆里,还说局部变量和函数参数都是放在栈里的, 可是Java是面向对象,所有的代码都承载物都是对象(这种情况下,变量和参数不都应该放在堆里么?)或者main函数(这种情况下放在栈里 ,那难道这个概念只针对入口函数么?) 举例: public class Human { int age; Arm arm

webservice中如何引用外部对象。

问题描述 问题1创建了一个webservice用来验证用户信息[WebMethod]publicboolValidation(Useru){return...//}在webservice中引用了User的dll.感觉这样相当麻烦.我的user只是一个类.在这里还必须得把它编译成dll.且在BusinessLogicTier中调用webservice时传入一个User对象,报错:Login.User与Login.Service.User类型参数不匹配..在这里的Service是怎么多出来的??问题

在asp.net webservice中如何使用session

原文:在asp.net webservice中如何使用session 原文:刘武|在asp.net webservice中如何使用session   在使用asp.net编写webservice时,默认情况下是不支持session的,但我们可以把WebMethod的EnableSession选项设为true来显式的打开它,请看以下例子: 1 新建网站WebSite  2 新建web服务WebService.asmx,它具有以下两个方法: C#-Code: [WebMethod(EnableSes

socket-Linux epoll 使用过程中的疑问,请专家给予指点一下

问题描述 Linux epoll 使用过程中的疑问,请专家给予指点一下 else if(events[i].events&EPOLLIN)//如果是已经连接的用户,并且收到数据,那么进行读入. { cout << "EPOLLIN" << endl; if ( (sockfd = events[i].data.fd) < 0) continue; if ( (n = read(sockfd, line, MAXLINE)) < 0) { if

arcgis engine中mapcontrol 疑问

问题描述 arcgis engine中mapcontrol 疑问 跪求"arcgis engine中mapcontrol 如何获取google earth下载的tif图像坐标" 解决方案 什么是ArcGIS Engine?

机器视觉标定-在视觉标定过程中的疑问?

问题描述 在视觉标定过程中的疑问? 在视觉标定过程中有个问题? 1.标定过程中标定板的位置要随机改变的,也就说每幅图的物距是在变化的可是镜头是定焦 镜头,这样拍出来的图像根本就不清晰,标定出来怎么能准确呢?请大神指教..