天天看點

CXF service的幾種使用方法

以下以服務端和用戶端列舉幾種CXF的常用方法: 伺服器端:

方法一:使用Endpoint.publish進行釋出,這種方式不需要其他的額外的包,也不需要進行配置檔案的書寫,可以用于底層屬jdbc型的應用程式,其中第一個參數為通路時需要調用的功用位址,第二個參數為要釋出的接口的實作類(此種方法非Cxf方式)

Endpoint endpoint =
 Endpoint.publish("http://localhost:8080/helloService",new HelloServiceImpl());
System.out.println("WS釋出成功!");
           

方法二:用CXF的JaxWsServerFactoryBean類進行釋出,使用這種方式釋出,需要導入CXF相關的jar包,但是不需要進行相關配置檔案的書寫,其中address為釋出的位址,serviceClass為接口類

HelloServiceImpl impl = new HelloServiceImpl();
JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
factoryBean.setAddress("http://localhost:8080/WSCXF/helloService");//釋出位址
factoryBean.setServiceClass(IHelloService.class);//接口類
factoryBean.setServiceBean(impl);//釋出接口的實作類的執行個體
factoryBean.create();
System.out.println("WS釋出成功!");
 
           

方法三:使用配置式的,該方法既需要導入CXF的相關jar包,也需要進行配置檔案的書寫,這種方法适用于與spring整合的應用中,因為可以将bean托管給spring,也就可以随心所欲的使用spring中配置的bean了,以下是application-server.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-2.5.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" />

    <!--cxf配置資訊-->
    <bean id="helloServiceBean" class="org.cxf.service.HelloServiceImpl"/>
    <jaxws:endpoint id="helloService" implementor="#helloServiceBean" address="/hello">
    </jaxws:endpoint>

</beans>
      

用戶端:

方法一:使用CXF中 JaxWsProxyFactoryBean用戶端代理工廠調用web服務,這種方法需要導入cxf相關的jar包,由于需要顯式調用暴露方法的接口來生成一個執行個體,是以該方法适用于伺服器端與用戶端處于同一個應用的相同服務下的應用程式

JaxWsProxyFactoryBean soapFactoryBean = new JaxWsProxyFactoryBean();
soapFactoryBean.setAddress("http:// localhost:8080/helloService");
soapFactoryBean.setServiceClass(IHelloService.class);
Object o = soapFactoryBean.create();
IHelloService helloService = (IHelloService)o;
helloService.sayHello();//sayHello()為暴露的接口中的一個方法;

           

方法二:這種方法需要導入相關CXF的jar包,該方法的好處是隻需要知道相關的暴露接口中的方法名,既可以隐式調用,适合于釋出的伺服器和調用的用戶端不處于同一應用,同一服務下的應用程式,注意

http://localhost:8080/WSCXF/helloService   //為暴露的接口的名稱
?wsdl 必須要添加,這個是接口解析成的xml檔案
           
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = 
   dcf.createClient("http://localhost:8080/WSCXF/helloService?wsdl");

//sayHello為接口中定義的方法名稱張三為傳遞的參數傳回一個Object數組
Object[] objects=client.invoke("sayHello", "張三");

//輸出調用結果
System.out.println(objects[0].toString());
           

繼續閱讀