第一个web service服务端
- 创建一个接口,并用@WebService注解标注
- 创建接口实现类,并用相同注解标注。
- 接口注解中添加两个字段:endpointInterface,它的意思是指定接口名;第二个是servicename,这个是自定义的,给创建的服务起一个名字。
- 接着引入jar包,具体见eclipse项目里面的
- 创建一个主类,将其发布出去(这里不一定是主类,只要最后启动某一个类后,最终能达到发布的效果即可)发布的代码是:Endpoint.publish(发布服务的IP地址/发布的服务名(这个名也是随意起),实现服务接口的一个类对象);举例:Endpoint.publish(“http://192.168.1.100/MyFristService“, new HelloWorldWs());
因为导入了servlet,jetty等包,虽然创建时是一个java项目,不过运行后已经是一个web项目了,里面已经有jetty这个web服务器了。所以里面很多东西跟web项目很像。也可以通过浏览器访问它。任何平台,任何语言所写的代码现在都可以调用它。
第一个web service客户端
调用cxf提供的wsdl2java工具,根据wsdl文档生成相应的java代码。
命令行输入:wsdl2java http://ip地址/服务名?wsdl 即可。在当前文件夹下面生成一些java文件wsdl–web service definition language
任何语言实现了web service,都需要提供wsdl文档
找到wsdl2java生成的java文件中,继承了service类的类(这个类的名字与在服务端是设置servicename字段的名字相同),这个类的实例可以当做工厂来使用。
创建实例后,调用这个实例的getXXXPort()方法—注意,这个方法是无参的。返回一个远程web service 代理类,这个类属于一个接口,这个接口的名字与服务端设置的endpointInterface里面设置的一致,我们可以进而调用这个接口的方法。
如果函数的返回值是Map,非javabean等复杂类型,那么cxf处理不了。