环境要求:
JDK1.7,并配置Java的环境变量
BaseDao 接口:
/**
* 要使得成为一个可供访问的接口,必须添加:@WebService
* */
@WebService
public interface BaseDao {
//添加一个加法的接口
@WebResult(name="addddddre")
public int add(@WebParam(name="add01")int a,@WebParam(name="add02")int b);
public String t(String a,String b);
public User login(String usename,String password);
}
BaseDaoImpl:
/**
* endpointInterface 是接入点的配置(提供给访问者,访问哪里)
* */
@WebService(endpointInterface="com.sram.dao.BaseDao")
public class BaseDaoImpl implements BaseDao{
@Override
public int add(int a, int b) {
// TODO Auto-generated method stub
System.out.println("a+b的和为"+(a+b));
return a+b;
}
@Override
public String t(String a, String b) {
// TODO Auto-generated method stub
return a+b;
}
@Override
public User login(String username, String password) {
// TODO Auto-generated method stub
System.out.println("username"+username+","+"password"+password);
return new User(username,password);
}
}
添加接口服务:
MyServer.java
public class MyServer {
public static void main(String[] args) {
//添加服务,确定在网上发布的地址
String url="http://localhost:8888/sram";
//发布接口
Endpoint.publish(url, new BaseDaoImpl());
}
}
MyClient:客户端访问接口:
/**
* 定义访问的客户端:
* */
public class MyClient {
public static void main(String[] args) {
URL url;
try {
url = new URL("http://localhost:8888/sram?wsdl");
QName qname = new QName("http://impl.dao.sram.com/","BaseDaoImplService");
//根据服务的名称创建service
Service service = Service.create(url,qname);
//获取接口
BaseDao dao = service.getPort(BaseDao.class);
//通过wsdl转换成Java对象。没有依赖Java程序,但依赖Java接口。
System.out.println(dao.add(3, 5));
/**
* 成功调用服务端的接口,实现功能,但是有问题。
*
* 1,服务商不可能把接口名提供给你。
*
* 2,如果服务器系统使用.NET开发没有接口。所以,咱们写的
* 客户端不应该依赖服务器平台。
* */
System.out.println(dao.t("test1", "test2"));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注意:第一种访问依赖接口BaseDao,不推荐:
方式2:
利用wsimport生成不依赖平台的客户端访问类。
具体办法:打开控制台,在控制台端生成访问文件(前提:需要配置Java的环境变量)
-d 指明生成的目录
-keep 保留Java代码
-verboss 输出生成详细信息
d:/test 为生成代码的地址
生成客户端访问服务器接口的代码:
wsimport -d d:/test -keep -verbose http://localhost:8888/sram?wsdl
生成之后,将其拷贝到访问项目中,再次利用MyClient类,将BaseDao导入地址改为生成文件中的接口的地址。
再次访问,OK!