webservice cxf 实例

转自百度空间:http://hi.baidu.com/cpuhandou/item/b8b439860afb99c9ee083d65

CXF webservice 开发入门

1.       新建一个JavaWebProject,命名为cxfDemo

选择【next】,为project添加userLib库。
       

2.       打开新建的project,在src下新建包com.handou.cxf.test。在包中新建inteface名称为HelloWorld
代码如下:
@WebService
public interface HelloWorld {
    @WebMethod
    public String sayHello(@WebParam(name="name")String name);

}

新建一个class为该接口的实现类,其代码如下:
public class HelloWorldImpl implements HelloWorld {
    public String sayHello(String name) {
       // TODO Auto-generated method stub
       return name.concat(" , Hello WebService!!!");
    }
}

3.       发布webservice。
采用cxf内置的Jetty服务器发布服务。在HelloWorldImpl的实现类中添加main()方法,具体如下:
public static void main(String[] args) {
      HelloWorldImpl implementor = new HelloWorldImpl();
      JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
      svrFactory.setServiceClass(HelloWorld.class);
      svrFactory.setAddress("http://localhost:8080/helloWorld");
      svrFactory.setServiceBean(implementor);
      svrFactory.getInInterceptors().add(new LoggingInInterceptor());
      svrFactory.getOutInterceptors().add(new LoggingOutInterceptor());
      svrFactory.create();
   }

4.       在地址栏输入http://localhost:8080/helloWorld?wsdl,查看wsdl详细信息




5.       访问webservice服务端。
方法1:由wsdl可知接口只有一个供调用的operation,方法名称为sayHello,输入参数变量名称为name,数据类型为string,采用地址栏url?+参数测试,输入:
http://localhost:8080/helloWorld/sayHello?name=HanDou,显示返回信息如图:

方法2:客户端编码调用。
        新建Java类HelloClient,其代码如下:
       public class HelloClient {
    /**
     * @param args
     */
    public static void main(String[] args) {   
       JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
       //factory.getInInterceptors().add(new LoggingInInterceptor());
       factory.getOutInterceptors().add(new LoggingOutInterceptor());
       factory.setServiceClass(HelloWorld.class);
       factory.setAddress("http://localhost:8080/helloWorld");
       HelloWorld client = (HelloWorld) factory.create();
       String reply = client.sayHello("HanDou");
       System.out.println("Server said: " + reply);
       System.exit(0);
    }
}

控制台显示反馈消息:



6.       采用spring+cxf集成发布webservice。

1.在WEB-INF下新建beans.xml,beans.xml中添加cxf配置。
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
    <import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

    <jaxws:endpoint 
      id="helloWorld" 
      implementor="com.handou.cxf.test.HelloWorldImpl" 
      address="/HelloWorld"/>
</beans>

2.在web.xml中添加spring和cxf的配置
       <web-app>
    <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>WEB-INF/beans.xml</param-value>
    </context-param>

    <listener>
       <listener-class>
           org.springframework.web.context.ContextLoaderListener
       </listener-class>
    </listener>

    <servlet>
       <servlet-name>CXFServlet</servlet-name>
       <display-name>CXF Servlet</display-name>
       <servlet-class>
           org.apache.cxf.transport.servlet.CXFServlet
       </servlet-class>
       <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
       <servlet-name>CXFServlet</servlet-name>
      <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

3.部署文件至服务器,启动服务器,通过IP地址+端口+工程名+webservice服务名。 
先访问工程,如图:

点击wsdl进入http://localhost:8080/cxf/HelloWorld?wsdl,可获得wsdl详细信息

原文地址:https://www.cnblogs.com/weizizhe/p/3724900.html