cxf 入門實例

 

  1 首先下載cxf  www.apache.org 找到cxf 

 

   修改配置文件web.xml 添加下面一段

 

    <servlet>
  <servlet-name>CXF</servlet-name>
  <servlet-class>
   org.apache.cxf.transport.servlet.CXFServlet
  </servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>CXF</servlet-name>
  <url-pattern>/services/*</url-pattern>
 </servlet-mapping>

 

2  寫個簡單的hellword

package test.com.launch.x431.business;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

//標註是webservice
@WebService
public interface IHelloWorld
{
 //WebResult  是返回時wsdl 的顯示名稱   WebParam裏面的name 是參數名稱
 public @WebResult (name="result")String sayHello(@WebParam(name="text")String text);
 
}

 

3 實現

 

package test.com.launch.x431.business;

import javax.annotation.Resource;
import javax.servlet.http.*;
import javax.xml.rpc.server.*;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.MessageContext.Scope;
import javax.xml.ws.WebServiceContext;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.cxf.transport.http.AbstractHTTPDestination;

 


//@WebService(endpointInterface = "test.com.launch.x431.business.IHelloWorld")
public class HelloWorldImpl implements IHelloWorld {
 @Resource
  private WebServiceContext context;
 public String sayHello(String text) {
  System.out.println("sayHello is called!");
   String CustomerIP="";
  //此處可以取得客戶端的ip
   MessageContext ctx = context.getMessageContext();
    HttpServletRequest request = (HttpServletRequest)ctx.get(AbstractHTTPDestination.HTTP_REQUEST);
    String ip=request.getRemoteAddr();
   
    System.out.println(request.getRemoteHost());
     System.out.println(ip+"----");
  
  return "Hello " + text;
 }
}

 

 

4  WEB-INFO 下面添加 cxf-servlet.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"
 xmlns:soap="http://cxf.apache.org/bindings/soap"
 xsi:schemaLocation="  
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd  
http://cxf.apache.org/jaxws  
http://cxf.apache.org/schemas/jaxws.xsd">

 <jaxws:server id="jaxwsService"
  serviceClass="test.com.launch.x431.business.IHelloWorld"
  address="/testHello">
  <jaxws:serviceBean>
   <bean class="test.com.launch.x431.business.HelloWorldImpl" />
  </jaxws:serviceBean>

<!--輸入輸出攔截器-->
  <jaxws:inInterceptors>
   <bean
    class="org.apache.cxf.interceptor.LoggingInInterceptor" />
  </jaxws:inInterceptors>
  <jaxws:outInterceptors>
   <bean
    class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
  </jaxws:outInterceptors>
 </jaxws:server>

<beans>

 

部署後自動生成wsdl 訪問下  就可以看到生成的 wsdl 8080 後是項目名稱

 

http://localhost:8080/x431/services/testHello?wsdl

 

 

5 客戶端測試

package com.launch.test;

import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;

import javax.activation.DataHandler;
import javax.xml.soap.SOAPException;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import com.launch.service.IHelloWorld;

public class Test {

 

 

 public static void main(String[] args) throws ParseException,
   UnsupportedOperationException, SOAPException {

  Map<String, Object> props = new HashMap<String, Object>();

//如果是傳文件的時候 打開這個  大文件的時候會快很多
  props.put("mtom-enabled", Boolean.TRUE);
  JaxWsProxyFactoryBean soapFactoryBean = new JaxWsProxyFactoryBean();
  soapFactoryBean.setAddress("http://localhost:8080/x431/services/testHello");

  soapFactoryBean.setServiceClass(IHelloWorld.class);
  soapFactoryBean.setProperties(props);

  Object o = soapFactoryBean.create();
  IHelloWorld helloService = (IHelloWorld) o;
  String hello= helloService.sayHello(" world");
  System.out.println(hello); 

 

}

}

 

剛開始做的時候,出現很多問題,很多時候都是因爲jar包問題引起的 

如 原來我的 cglib-full-2.0.2 出現問題了 換成了 cglib-nodep-2.2.jar

 或者少了 FastInfoset-1.2.7.jar

 有時候cxf 版本不一樣也會出現問題 我用的 是 cxf-2.2.5.jar

 

 

 

發佈了35 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章