如何获取天气预报的wsdl

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取天气预报的wsdl相关的知识,希望对你有一定的参考价值。

1、天气预报web services地址 
http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
用浏览器打开此地址,保存页面为Weather.xml
2、新建一个java工程 webservices
建立包名 com.test.ws  
将Weather.xml拷贝到src目录下
3、编写批处理WSDL-SQUARED.CMD,使用wsdj2java生成客户端调用代码

set AXIS_HOME=D:\\axis-1_4
set CLASSPATH=.;%AXIS_HOME%\\lib\\axis.jar;%AXIS_HOME%\\lib\\axis-ant.jar;%AXIS_HOME%\\lib\\commons-discovery-0.2.jar;%AXIS_HOME%\\lib\\commons-logging-1.0.4.jar;%AXIS_HOME%\\lib\\jaxrpc.jar;%AXIS_HOME%\\lib\\log4j-1.2.8.jar;%AXIS_HOME%\\lib\\saaj.jar;%AXIS_HOME%\\lib\\wsdl4j-1.5.1.jar
java org.apache.axis.wsdl.WSDL2Java  -p com.test.ws Weather.xml
参考技术A Java调用以WSDL形式发布的web service
webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。今天搜索到了非常好的 webservice provider列表
http://www.webservicex.net/WCF/default.aspx

这上面列出了70多个包括很多方面的free webservice provider,utilities->global weather就可以获取全球的天气预报。
下面我们来看Java如何通过WSDL文件来调用这些web service:
注意,以下的代码并没有经过真正的测试,只是说明这些情况,不同版本的Axis相差很大,大家最好以apache网站上的例子为准,这里仅仅用于说明其基本用法。
1,直接AXIS调用远程的web service
我觉得这种方法比较适合那些高手,他们能直接看懂XML格式的WSDL文件,我自己是看不懂的,尤其我不是专门搞这行的,即使一段时间看懂,后来也就忘记了。直接调用模式如下:
import java.util.Date;
import java.text.DateFormat;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import java.lang.Integer;
import javax.xml.rpc.ParameterMode;

public class caClient

public static void main(String[] args)

try
String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl";
//直接引用远程的wsdl文件
//以下都是套路
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName("addUser");//WSDL里面描述的接口名称
call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,
javax.xml.rpc.ParameterMode.IN);//接口的参数
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型
String temp = "测试人员";
String result = (String)call.invoke(new Object[]temp);
//给方法传递参数,并且调用方法
System.out.println("result is "+result);

如何从 Web 服务的 URL 获取 wsdl 文件

【中文标题】如何从 Web 服务的 URL 获取 wsdl 文件【英文标题】:How to get the wsdl file from a webservice's URL 【发布时间】:2014-01-11 14:46:52 【问题描述】:

我想获取 Web 服务的 WSDL 文件,而我唯一拥有的是它的 URL(如 webservice.example/foo)。

如果我直接使用 URL,则只会传递错误响应。

【问题讨论】:

【参考方案1】:

要使用 Visual Studio 的开发人员命令提示符从 url 下载 wsdl,请在管理员模式下运行它并输入以下命令:

 svcutil /t:metadata http://[your-service-url-here]

您现在可以根据需要在项目中使用下载的 wsdl。

【讨论】:

【参考方案2】:

只有当 web 服务被配置为交付它时,它才有可能获取 WSDL。因此,您必须指定 serviceBehavior 并启用 httpGetEnabled:

<serviceBehaviors>
    <behavior name="BindingBehavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
</serviceBehaviors>

如果 web 服务只能通过 https 访问,您必须启用 httpsGetEnabled 而不是 httpGetEnabled。

【讨论】:

【参考方案3】:

从 Web 服务 URL 获取 WSDL (Web Service Description Language)。

可以通过 SOAP Web 服务实现:

http://www.w3schools.com/xml/tempconvert.asmx

要获取 WSDL,我们只需添加 ?WSDL ,例如:

http://www.w3schools.com/xml/tempconvert.asmx?WSDL

【讨论】:

你将如何使用 url 检索一些数据? 如果你想从 SOAP 中检索数据,你应该使用这个工具 soapui.org 它是免费的并且工作正常。【参考方案4】:

通过在 URL 后面加上 ?WSDL

如果网址是例如:

http://webservice.example:1234/foo

你使用:

http://webservice.example:1234/foo?WSDL

然后 wsdl 将被交付。

【讨论】:

有时也全部大写(WSDL) 如果你没有得到 wsdl,你可能会得到一个带有绑定键或某种验证代码的 xml,这将帮助你编写 wsdl 的实际 url。 知道如何获取导入的 xsd 文件吗? 这不起作用。这是我的网络服务网址:prealert-test.customer-pages.com ?WSDL 是一种约定,通常由框架等遵循。如果它不适合你,我想你应该为你正在使用的框架找到一些特定的东西。

以上是关于如何获取天气预报的wsdl的主要内容,如果未能解决你的问题,请参考以下文章

webserive学习记录4-获取天气的例子

基于java高德天气的接口调用

调用天气预报webservice接口

天气查询接口文档

基于jdk调用天气服务案例及问题

SPRING-WS CLIENT 端 WSDL 试用