写在前面的话
前面两节说了使用Java提供的包开发服务端和客户端,现在使用CXF来开发,CXF提供了两个类发而服务,一个是ServerFactoryBean,另一个是JaxWsServerFactoryBean,我们将分别使用这两个类发而一个简单的服务,并提供与JaxWsServerFactoryBean类发布的服务的客户端。
JaxWsServerFactoryBean方式
服务接口
package com.wds.ws.server.cxf;import javax.jws.WebService;/** * 此处必须添加@WebServer注解,若不添加,则发布的服务当中无任何方法 * @author wds * */@WebServicepublic interface HelloService { public String sayHello(String name);}
服务实现
package com.wds.ws.server.cxf;import java.util.Date;/** * 服务实现类 * @author wds * */public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { String s = new Date() + " " + name; System.out.println("Server:" + s); return s; }}
发布类
package com.wds.ws.server.cxf;import org.apache.cxf.jaxws.JaxWsServerFactoryBean;/** * 使用CXF的ServerFactoryBean发布服务 * @author wds * */public class JaxWsServerFactoryBeanPublish { /** * @param args */ public static void main(String[] args) { //实例化ServerFactoryBean JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); //发布服务的地址 factory.setAddress("http://localhost:567/JaxWsServerFactoryBeanHelloworld"); //提供服务类的类型(接口类型) factory.setServiceClass(HelloService.class); //提供服务的实例 factory.setServiceBean(new HelloServiceImpl()); //发布服务 factory.create(); }}
客户端
使用以下命令
wsdl2java -p com.wds.client.jaxws http://localhost:567/JaxWsServerFactoryBeanHelloworld?wsdl关于wsdl2java的命令在WebService-02中也有说过,此处增加了一p参数,此参数说明指定包结构,复制到客户端的工程中,测试类如下:
package com.wds.client.jaxws;public class JaxWsClientTest { /** * @param args */ public static void main(String[] args) { HelloServiceService factory = new HelloServiceService(); HelloService hs = factory.getHelloServicePort(); System.out.println(hs.sayHello("wds")); }}
ServerFactoryBean
服务的接口和实现与JaxWsServerFactoryBean无特别大区别,只是无须写@WebService注解,发布类代码如下:package com.wds.ws.server.cxf;import org.apache.cxf.frontend.ServerFactoryBean;/** * 使用CXF的ServerFactoryBean发布服务 * @author wds * */public class ServerFactoryBeanPublish { /** * @param args */ public static void main(String[] args) { //实例化ServerFactoryBean ServerFactoryBean factory = new ServerFactoryBean(); //发布服务的地址 factory.setAddress("http://localhost:5678/ServerFactoryBeanHelloworld"); //提供服务类的类型 factory.setServiceClass(HelloServiceImpl.class); //提供服务的实例 factory.setServiceBean(new HelloServiceImpl()); //发布服务 factory.create(); }}其与JaxWsServerFactoryBean发布也很类似,只是在提供服务类的类型时,此处指定了实现类。
客户端的编写方式与JaxWsServerFactoryBean方式相同,不在详细列出。