WebService JAX-WS client

在上一篇博客中WebService Raw Client ,我们揭开了WebService的内衣,看清了WebService的躶体。明白如何通过查看WSDL来构建SOAP协议的请求和应答。

任何一种工具,都是为了隐藏复杂繁琐的底层实现,这也以藏了原理。但工具却极大的简化了我们的工作。在理解原理以后,我们需要追求工具的便利性。今天就是承接上一篇博文,使用JAX-WS来简化client的开发。我还是使用天气预报服务 http://www.webservicex.net/globalweather.asmx?WSDL 

J2EE SDK

在使用JAX-RS前,先安装J2EE SDK。要求至少版本5以上,我装的是7。在SDK目录glassfish4\glassfish\bin下,有一个命令wsimport是我们需要的。这个命令可以将WSDL转为基于JAX-WS的java类。这些类是开发客户端所依赖的。

导入WSDL

使用wsimport命令,将WSDL转为java类。

C:\glassfish4\glassfish\bin>wsimport -extension -keep -verbose -d d:/share http://www.webservicex.net/globalweather.asmx?WSDL

keep : 保留生成的.java文件

verbose : 输出编译信息。

d : 声明文件产生在哪一个目录中

extension : 在不声明extension的情况下,wsimport只支持soap,对绑定在http上的port不进行编译。所以需要声明extension.

在目录d:/share下,可以看到生成的文件。

WebService JAX-WS client

编写client

在eclipse中,生成一个java project。然后将WSDL生成的java或class导入到项目中。

然后在自己的方法中就可以调用WSDL提供的方法了:

public class App 
{
    public static void main( String[] args )
    {
    	GlobalWeather service = new GlobalWeather();
    	GlobalWeatherSoap port = service.getGlobalWeatherSoap();
    	String body = port.getWeather("shanghai", "China");
        System.out.println(body);
    }
}

运行以后,输出:

<?xml version="1.0" encoding="utf-16"?>
<CurrentWeather>
  <Location>Shanghai / Hongqiao, China (ZSSS) 31-10N 121-26E 3M</Location>
  <Time>Apr 17, 2014 - 11:30 AM EDT / 2014.04.17 1530 UTC</Time>
  <Wind> from the NW (320 degrees) at 4 MPH (4 KT) (direction variable):0</Wind>
  <Visibility> 1 mile(s):0</Visibility>
  <Temperature> 62 F (17 C)</Temperature>
  <DewPoint> 57 F (14 C)</DewPoint>
  <RelativeHumidity> 82%</RelativeHumidity>
  <Pressure> 29.94 in. Hg (1014 hPa)</Pressure>
  <Status>Success</Status>
</CurrentWeather>

是不是超级简单了啊?

你可能感兴趣的:(eclipse,webservice,wsdl,client,jax-ws)