Web Service:Apache CXF簡單例子

        service框架用apache CXF,服務器tomcat ,還有spring框架

        OpenSource中關於CXF的簡介:Apache CXF一個開源的Service框架,它實現了JCP與Web Service中一些重要標準。CXF簡化了構造,集成,面向服務架構(SOA)業務組件與技術的靈活複用。在CXF中,Service使用WSDL標準定義並能夠使用各種不同的消息格式(或binding)和網絡協議(transports)包括SOAP、XML(通過HTTP或JMS)進行訪問。CXF同樣支持多種model 如:JAX-WS,JBI,SCA和CORBA service。CXF設計成可靈活部署到各種容器中包括Spring-based,JBI,SCA, Servlet和J2EE容器。

       用CXF構建webservice程序的大致流程如下:

       1 配置web.xml文件,加載CXF

       2 編寫java接口,和接口的實現

       3 在spring的applicationContext.xml中配置java文件

       4 創建beans.xml文件,裏面配置接口的實現類

      5 運行tomca服務器即可生成wsdl文件

      6 編寫測試代碼:編寫java測試文件和client-beans.xml文件

      7編寫運行客戶端文件所需的服務器,可以單獨編寫,也可以在隨tomcat啓動

示例代碼。首先下載cxf,然後解壓,將lib下的所有jar包拷到工程下面

    一 最簡單的helloword

     1  web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd"
>


<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>

2  接口HelloWord.java和接口的實現HelloWordImpl.java

package com.demo;

import javax.jws.WebService;

/** *//**
 * service interface
 * 
 * 
@author
 * 
 
*/

@WebService
public interface HelloWord ...{
    String sayHi(String text);
}

 

 

package com.demo;

import javax.jws.WebService;

/** *//**
 * implementation
 * 
 * 
@author 
 * 
 
*/

@WebService
public class HelloWordImpl implements HelloWord ...{

    
public String sayHi(String text) ...{
        
return "Hi" + text;
    }

}

 

3 beans.xml

<?xml version="1.0" encoding="UTF-8"?>

<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="helloWord"
        implementor
="com.demo.HelloWordImpl" address="/HelloWord" />

</beans>

 

4  啓動tomcat服務器,在瀏覽器裏面輸入http://localhost:8888/helloword後頁面上會出現

{http://demo.com/}HelloWordImplPort ,點擊會看到生成的wsdl文件http://localhost:8888/helloword/HelloWord?wsdl

 

5 客戶端Client.java和client-beans.xml

package com.demo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public final class Client ...{

    
private Client() ...{

    }


    
public static void main(String args[]) throws Exception ...{
        
// START SNIPPET: client
        ApplicationContext  context = new ClassPathXmlApplicationContext(
                
new String[] ..."com/demo/client-beans.xml" });

        HelloWord client 
= (HelloWord) context.getBean("client");

        String response 
= client.sayHi("+what????");
        System.out.println(
"Response: " + response);
        System.exit(
0);
        
// END SNIPPET: client
    }

}
<?xml version="1.0" encoding="UTF-8"?>

<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-2.0.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd">

    
<bean id="client" class="com.demo.HelloWord"
        factory
-bean="clientFactory" factory-method="create" />

    
<bean id="clientFactory"
        
class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
        
<property name="serviceClass" value="com.demo.HelloWord" />
        
<property name="address"
            value
="http://localhost:9002/HelloWord" />
    
</bean>

</beans>

 

6 客戶端運行時所需的服務器Server.java

package com.demo;

import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.handler.DefaultHandler;
import org.mortbay.jetty.handler.HandlerCollection;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.webapp.WebAppContext;

public class Server ...{

    
protected Server() throws Exception ...{
        System.out.println(
"Starting Server");

        org.mortbay.jetty.Server server 
= new org.mortbay.jetty.Server();

        SelectChannelConnector connector 
= new SelectChannelConnector();
        connector.setPort(
9002);
        server.setConnectors(
new Connector[] ...{connector});

        WebAppContext webappcontext 
= new WebAppContext();
        webappcontext.setContextPath(
"/");

        webappcontext.setWar(
"WebRoot");

        HandlerCollection handlers 
= new HandlerCollection();
        handlers.setHandlers(
new Handler[] ...{webappcontext, new DefaultHandler()});

        server.setHandler(handlers);
        server.start();
        System.out.println(
"Server ready...");
        server.join();
    }


    
public static void main(String args[]) throws Exception ...{
        
new Server();
    }


}

 

7 運行客戶端Client.java的順序,先啓動tomcat,然後運行Server.java,最後運行Client.java

二 不單獨編寫Server.java文件,讓其和tomcat一同啓動.需要改動的地方

1 web.xml

<context-param>
        
<param-name>contextConfigLocation</param-name>
         
<param-value
發佈了9 篇原創文章 · 獲贊 1 · 訪問量 2748
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章