CXF搭建WebService图解

示例所用工具版本介绍:

CXF:2.7.0                  官网:http://cxf.apache.org/index.html

Eclipse:3.5

第一步:新建Web工程,这里命名为CxfDemo(这一步不做介绍了,相信没有不会的)

2.将CXF文件下Lib文件夹中的jar包导入到工程中

3.在工程中新建包com.goma.cxf.test,在包中新建inteface,名称为HelloWord

package com.goma.cxf.test;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface HelloWord {
	@WebMethod
        // public String sayHello(@WebParam(name="name")String name);
        // 通过@WebParam(name="***")来设置WSDL中的参数名称,默认为arg0、arg1……
        public String sayHello(String name);
 }

4.编写接口实现类HelloWordImpl

package com.goma.cxf.test;

public class HelloWordImpl implements HelloWord {

	public String sayHello(String name) {
		// TODO Auto-generated method stub
		return name.concat(",Hello Word! Yes,Word;don't World!");
	}

}

5.发布WebService,采用cxf内置的Jetty服务器发布服务。在HelloWordImpl中添加main()方法,具体如下:

	public static void main(String[] args) {
		HelloWordImpl implementor = new HelloWordImpl();
		JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
		svrFactory.setServiceClass(HelloWord.class);
		//除了http://localhost部分其他部分可以随便写,但格式不能乱 http://IP:PORT/NAME
		svrFactory.setAddress("http://localhost:1111/helloWord");
		svrFactory.setServiceBean(implementor);
		svrFactory.getInInterceptors().add(new LoggingInInterceptor());
		svrFactory.getOutInterceptors().add(new LoggingOutInterceptor());
		svrFactory.create();
                /*************下列方法也可*********
		String address="http://localhost:9000/hello";
                javax.xml.ws.Endpoint.publish(address, implementor);
                System.out.println("WebService run..");
                *********/
       }
 

6.在地址栏输入http://localhost:1111/helloWorld?wsdl可以看到自动生成的WSDL

7.访问WebService

方法1:由wsdl可知接口只有一个供调用的operation,方法名称为sayHello,输入参数变量名称为arg0,数据类型为string,采用地址栏URL,输入:http://localhost:1111/helloWorld/sayHello?arg0=goma,显示返回信息如图:

方法2:客户端编码调用,代码如下:

import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;


public class CxfClient {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		   
	       JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
	       //factory.getInInterceptors().add(new LoggingInInterceptor());
	       factory.getOutInterceptors().add(new LoggingOutInterceptor());
	       factory.setServiceClass(HelloWord.class);
	       factory.setAddress("http://localhost:1111/helloWorld");
	       HelloWord client = (HelloWord) factory.create();
	       String reply = client.sayHello("Goma");
	       System.out.println("Server said: " + reply);
	       System.exit(0);
               /****下列方法也可
	       JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
               org.apache.cxf.endpoint.Client client = dcf.createClient("http://localhost:1111/helloWorld?wsdl");
               //sayHello 为接口中定义的方法名称   张三为传递的参数   返回一个Object数组
               Object[] objects=client.invoke("sayHello", "Goma");
               //输出调用结果
               System.out.println(objects[0].toString());****/
        }
}

 控制台返回信息如下:

另可参考:http://www.blogjava.net/sxyx2008/archive/2010/09/15/332058.html

猜你喜欢

转载自oma1989.iteye.com/blog/1732982
今日推荐