问题描述
我最近在学习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的回复:
帮顶,希望高手来解答
看来没希望了。。。。。。。。。。。。。。