JAX-WS 的全称为 Java API forXML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For XML-RemoteProcedure Call)目前已经被JAX-WS 规范取代。从java5开始支持JAX-WS2.0版本,Jdk1.6.0_13以后的版本支持2.1版本,jdk1.7支持2.2版本。
需求:
跟上一篇的一样,查询天气的功能。实现方式使用jaxws
服务端:
1、定义接口
package com.ule.jaxws;
public interface WeatherService {
String queryWeather(String city);
}
2、接口实现类
package com.ule.jaxws.impl;
import javax.jws.WebMethod;
import javax.jws.WebService;
import com.ule.jaxws.WeatherService;
@WebService//声明是webService
public class WeatherServiceImpl implements WeatherService {
@Override
@WebMethod
public String queryWeather(String city) {
String result = city+":晴天";
return result;
}
}
3、发布服务
package com.ule.jaxws.server;
import javax.xml.ws.Endpoint;
import com.ule.jaxws.impl.WeatherServiceImpl;
public class WeatherServer {
public static void main(String[] args){
Endpoint.publish("http://127.0.0.1:6789/weather", new WeatherServiceImpl());
}
}
4、服务端已经完成,验证服务端是否成功->运行main->浏览器访问http://127.0.0.1:6789/weather?wsdl ->出现xml页面
客户端
1、代码创建,使用jdk自带工具类,在cmd命令行进入到客户端项目的src目录下D:\workspace\logistics\jaxws_client\src> wsimport -s . http://127.0.0.1:6789/weather?wsdl,执行完后再eclipse中刷新项目。
2、创建代码调用服务
package com.ule.jaxws;
import com.ule.jaxws.impl.WeatherServiceImpl;
import com.ule.jaxws.impl.WeatherServiceImplService;
public class WeatherClient {
public static void main(String[] args) {
WeatherServiceImplService service = new WeatherServiceImplService();
WeatherServiceImpl impl = service.getWeatherServiceImplPort();
String result = impl.queryWeather("砀山");
System.out.println(result);
}
}
代码开发完毕,启动服务端,运行客户端,测试执行结果
另外一种调用方式:
package com.ule.jaxws;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import com.ule.jaxws.impl.WeatherServiceImpl;
public class WeatherClient1 {
public static void main(String[] args) throws Exception {
URL wsdlDocumentLocation = new URL("http://127.0.0.1:6789/weather?wsdl");
QName serviceName = new QName("http://impl.jaxws.ule.com/", "WeatherServiceImplService");
Service service = Service.create(wsdlDocumentLocation, serviceName);
WeatherServiceImpl impl = service.getPort(WeatherServiceImpl.class);
String result = impl.queryWeather("砀山");
System.out.println(result);
}
}