zoukankan      html  css  js  c++  java
  • WebService-03-使用CXF开发服务端和客户端

    写在前面的话


    前面两节说了使用Java提供的包开发服务端和客户端,现在使用CXF来开发,CXF提供了两个类发而服务,一个是ServerFactoryBean,另一个是JaxWsServerFactoryBean,我们将分别使用这两个类发而一个简单的服务,并提供与JaxWsServerFactoryBean类发布的服务的客户端。

    JaxWsServerFactoryBean方式

    服务接口


    package com.wds.ws.server.cxf;
    
    import javax.jws.WebService;
    
    /**
     * 此处必须添加@WebServer注解,若不添加,则发布的服务当中无任何方法
     * @author wds
     *
     */
    @WebService
    public 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方式相同,不在详细列出。
  • 相关阅读:
    Java Thread 总结
    用 for/in 在 Java 5.0 中增强循环
    JAVA中synchronized和lock详解
    centos vim的安装目录在哪里
    Cannot add task 'wrapper' as a task with that name already exists.
    servlet的生命周期
    I/O同个文件需要注意的问题
    分治策略---求最大子数组
    Java实现 100!的阶乘
    Java中方法的重载与覆盖(随笔01)
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3151396.html
Copyright © 2011-2022 走看看