1、服务器端建立
1.1、创建接口
package com.chb.service;
import javax.jws.WebService;
/**
* 1.1、创建接口
*/
public interface IMyService {
public int add(int a, int b);
public int mins(int a, int b);
}
1.2、创建实现类
package com.chb.service;
import javax.jws.WebService;
public class MyServiceImpl implements IMyService{
@Override
public int add(int a, int b) {
System.out.println(a + "+" + b + "=" + (a+b));
return a + b;
}
@Override
public int mins(int a, int b) {
System.out.println(a + "-" + b + "=" +(a-b));
return a - b;
}
}
1.3、开启服务
package com.chb.service;
import javax.xml.ws.Endpoint;
public class MyServer {
public static void main(String[] args) {
//发布的地址
String address = "http://localhost:6666/ns";
Endpoint.publish(address,
new MyServiceImpl());//实现的类
}
1.3.1 启动报错:
报错:Exception in thread "main" java.lang.IllegalArgumentException: class com.chb.service.MyServiceImpl has neither @WebService nor @WebServiceProvider annotation
1.3.2 、关注两个东西
//SEI (Service EndPoint Interface) 服务提供的接口-->IMyService
//SIB (Service implemention Bean) 服务实现的Bean
1.3.3、接口与实现类需要添加下面注解
//接口与实现类需要添加下面注解
@WebService
public interface IMyService {...}
@WebService(endpointInterface="com.chb.service.IMyService")
public class MyServiceImpl implements IMyService{...}
1.3.4、访问 http://localhost:9999/ns?wsdl, 注意后面一定要加?wsdl
, 这就是我们公开给网上的某些接口。
IMyService iMyService = service.getPort(IMyService.class);
如果别人使用, 也需要有这个接口, 这样就太依赖于这个接口, 不可能别人使用你的服务, 还要寻找你要这个接口, 这样也无法跨平台。
问题: 依赖与IMservice, 需要一种方案: 可以通过wsdl生成本地的类, 生成的类不应该根据服务的平台, 而是根据自己的平台, wsdl可能是java, .net,或其他语言开发的, 我们需要解决这个问题。 2. 解决方案:wsimport的使用javax.xml.ws.Service
的实现类
MyServiceImplService extends Service
2.2、MyServiceImplService提供一个很好的方法供我们获取IMService,
/**
* @return
* returns IMyService
*/
@WebEndpoint(name = "MyServiceImplPort")
public IMyService getMyServiceImplPort() {
return super.getPort(new QName("http://service.chb.com/", "MyServiceImplPort"), IMyService.class);
}
2.3、获取IMyService,调用方法
package com.chb.client;
import com.chb.service.IMyService;
import com.chb.service.MyServiceImplService;
public class TestClient {
public static void main(String[] args) {
MyServiceImplService msis = new MyServiceImplService();
//获取IMyService, 简单多了
IMyService iMyService = msis.getMyServiceImplPort();
System.out.println(iMyService.mins(12, 29));
}
}
3、wsdl到底是什么
3.1、types: 用来定义访问的类型
, 以xml形式传递。