参考https://blog.csdn.net/c99463904/article/details/76018436
服务端:
1.编写SEI(Service Endpoint Interface),SEI在webservice中称为portType,在java中就是普通接口
public interface ICameraService {
public void test();
}
2. 编写SEI实现类,此类作为webservice提供服务类
@WebService///@WebService表示该类是一个服务类,需要发布其中的public的方法
@Service("CameraServiceImpl")//Spring mvc 纳入容器管理
public class CameraServiceImpl implements ICameraService {
@Override
public void test() {
System.out.print("asada");
}
}
3.发布服务,Endpoint类发布服务,publish方法,两个参数:1.服务地址;2.服务实现类
import javax.xml.ws.Endpoint;
import com.ctfo.spring.SpringInit;
public class Start {
public static void main(String[] args) {
Endpoint.publish("http://192.168.1.107:9010/CameraServiceImpl",SpringInit.ctx.getBean("CameraServiceImpl"));
System.out.println("同步视频数据,视频巡检数据已启动...........");
}
}
启动容器,获取bean
public class SpringInit {
public static AbstractApplicationContext ctx = null;
static{
ctx = new ClassPathXmlApplicationContext("com/applicationContext.xml");
}
}
4. 测试服务是否发布成功,通过阅读wsdl,确定客户端调用的接口、方法、参数和返回值存在,证明服务发布成功 //我们在浏览器输入 http://192.168.1.107:9010/CameraServiceImpl?wsdl 来获取wsdl文件进行阅读 //wsdl,是以XML文件形式来描述WebService的”说明书”,有了说明书,我们才可以知道如何使用或是调用这个服务.
客户端:
客户端方式:
1.直接编写服务端接收程序,需要有服务端同名的接口类
客户端创建一个ICameraService接口,然后如下:
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
public static ICameraService ceraetWebServiceConnection(){
JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean();
svr.setServiceClass(ICameraService.class);
svr.setAddress("http://192.168.1.107:9010/CameraServiceImpl");
ICameraService is = (ICameraService)svr.create();
return is;
}
2.用jdk工具生成java客户端代码
在JDK的bin文件夹中,有一个wsimport.exe,这个工具依据wsdl文件生成相应的类文件,然后用这些类文件,就可以像调用本地的类一样调用WebService提供的方法。
1)首先创建一个server空项目
用cmd命令找到项目所在路径下的src然后
cmd 命令:wsimport -s . http://192.168.1.102:9010/TestPublishServerImpl?wsdl 就能直接在src这个路径下生成代码。
cmd命令 dir 显示当前所有文件 cd 转到指定文件 直接输入 d: 跳转到D盘
如果cmd提示没有wsimport命令 需要在cmd中设置一下java环境变量,把电脑设置的环境变量路径复制到cmd中运行一遍就好
2)编写客户端
public class testClient {
public static void main(String[] args) {
//创建service
CameraServiceImplService service=new CameraServiceImplService ();
//获取代理对象
CameraServiceImpl impl=service.getPort(CameraServiceImpl.class);
//获取服务端方法
String word=impl.test();
System.out.println(word);
}
}