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方式相同,不在详细列出。

 

你可能感兴趣的:(webservice)