您的位置:首页 > 编程语言 > Java开发

spring与cxf的整合

2014-05-02 10:50 267 查看
一、在web.xml中配置web service的servlet
   

  <servlet >

       <servlet-name >cxf-ws</servlet-name >

       <servlet-class >org.apache.cxf.transport.servlet.CXFServlet </servlet-class>

  </servlet >

  <servlet-mapping >

       <servlet-name >cxf-ws</servlet-name >

       <url-pattern >/ ws/*</url-pattern >

  </servlet-mapping >

二、新建一个applicationContext-ws.xml文件

     在web.xml中引入该配置文件

[align=left]  <context-param>[/align]
[align=left]    <param-name >contextConfigLocation </param-name>[/align]
[align=left]    <param-value >[/align]
[align=left]           classpath:spring/applicationContext-ws.xml[/align]
[align=left]    </param-value>[/align]
[align=left]  </context-param >[/align]

  applicationContext-ws.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:http-conf="http://cxf.apache.org/transports/http/configuration"

        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    

             http://cxf.apache.org/transports/http/configuration   
             http://cxf.apache.org/schemas/configuration/http-conf.xsd " >

     </beans>

三、在applicationContext-ws.xml引入cxf的配置文件:

    <!-- Import Apache CXF
Bean Definition -->

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

     <!-- end -->

四、定义一个web service server端

    <!-- 暴露webservice 1
-->

    <jaxws:server id="helloServer"

        serviceClass="com.iit.song.ws.service.IHello"

        address= "/hello">

        <jaxws:serviceBean>

            <ref bean= "hello"/> <!--
要暴露的 bean 的引用 -->

        </jaxws:serviceBean>

    </jaxws:server >

    <!-- end -->

     wsdl地址为:127.0.0.1:8080/ws/hello?wsdl

    < bean id ="hello" class ="com.iit.song.ws.service.Hello"></bean >

[align=left]     1> 定义一个web service接口[/align]
[align=left]   [/align]
[align=left]      @WebService[/align]

[align=left]public interface IHello {[/align]
[align=left]    public String say();[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]2>实现该接口[/align]

[align=left]@WebService[/align]
[align=left]public class Hello  implements IHello{[/align]
[align=left]    @Override[/align]
[align=left]    public String say(){[/align]
[align=left]          return "hello world" ;[/align]
[align=left]    }[/align]
[align=left]}[/align]

五、定义一个interceptor:

     

     <!-- 暴露webservice 1
-->

    <jaxws:server id= "helloServer"

        serviceClass ="com.iit.song.ws.service.IHello"

        address= "/hello" >

        < jaxws:serviceBean>

            < ref bean= "hello" /> <!--
要暴露的 bean 的引用 -->

        </ jaxws:serviceBean>

        < jaxws:inInterceptors >

[align=left]            < ref bean= "testInInterceptor" />[/align]
[align=left]        </ jaxws:inInterceptors >[/align]

[align=left]
[/align]

    </jaxws:server >

    <!-- end -->

     

     在applicationContext-ws.xml中配置interceptor

     < bean id ="testInInterceptor" class="com.iit.song.ws.interceptor.TestInInterceptor"></bean >

     定义该interceptor:
     public class TestInInterceptor extends AbstractPhaseInterceptor<SoapMessage>{ 
  
    private Logger logger =
LoggerFactory.getLogger(TestInInterceptor. class);   
[align=left]    public TestInInterceptor(String phase){[/align]
[align=left]          super(phase);[/align]

[align=left]    }    [/align]
[align=left]    public TestInInterceptor(){[/align]
[align=left]          super(Phase.PRE_INVOKE );[/align]
[align=left]    }[/align]
[align=left]    @Override[/align]
    public void handleMessage(SoapMessage
message) throws Fault {
         System. out.println("in
interceptor" );
[align=left]    }[/align]

[align=left]     }[/align]
[align=left]
[/align]
[align=left]六、定义一个handler:[/align]
     <!-- 暴露webservice 1
-->

    <jaxws:server id= "helloServer"

        serviceClass ="com.iit.song.ws.service.IHello"

        address= "/hello" >

        < jaxws:serviceBean>

            < ref bean= "hello" /> <!--
要暴露的 bean 的引用 -->

        </ jaxws:serviceBean>

        <jaxws:handlers>

               <ref bean= "handler"/>

        </jaxws:handlers>
[align=left]
[/align]

    </jaxws:server >

    <!-- end -->
[align=left]
[/align]
[align=left]
[/align]
[align=left]     在applicationContext-ws.xml中添加该行:[/align]
[align=left]     < bean id ="handler" class ="com.iit.song.ws.handler.TestHandler"></bean >[/align]
[align=left]
[/align]
[align=left]     [/align]

[align=left]     public class TestHandler implements SOAPHandler<SOAPMessageContext>{[/align]
[align=left]    @Override[/align]
    public boolean handleMessage(SOAPMessageContext
messagecontext) {
[align=left]         SOAPMessage message = messagecontext.getMessage();[/align]
[align=left]          try {[/align]
[align=left]             message.writeTo(System. out);[/align]
[align=left]         } catch (SOAPException e) {[/align]
[align=left]             e.printStackTrace();[/align]
[align=left]         } catch (IOException e) {[/align]
[align=left]             e.printStackTrace();[/align]
[align=left]         }[/align]
[align=left]          return true ;[/align]
[align=left]    }[/align]
[align=left]    @Override[/align]
    public boolean handleFault(SOAPMessageContext
messagecontext) {
[align=left]         System. out.println("handleFault" );[/align]
[align=left]         SOAPMessage message = messagecontext.getMessage();[/align]
[align=left]          try {[/align]
[align=left]             message.writeTo(System. out);[/align]
[align=left]         } catch (SOAPException e) {[/align]
[align=left]             e.printStackTrace();[/align]
[align=left]         } catch (IOException e) {[/align]
[align=left]             e.printStackTrace();[/align]
[align=left]         }[/align]
[align=left]          return true ;[/align]
[align=left]    }[/align]
[align=left]    @Override[/align]
    public void close(MessageContext
messagecontext) {
[align=left]         [/align]
[align=left]    }[/align]
[align=left]    @Override[/align]
[align=left]    public Set<QName> getHeaders() {[/align]
[align=left]         System. out.println("getheaders" );[/align]
[align=left]          return null ;[/align]
[align=left]    }[/align]
[align=left]}[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]七、spring 客户端配置[/align]
[align=left]
[/align]

[align=left]<jaxws:client id= "hello"[/align]
[align=left]   serviceClass="com.iit.song.ws.service.IHello" [/align]
[align=left]   address="http://localhost:8080/ws/IHello" >[/align]
[align=left]       <jaxws:outInterceptors>[/align]
[align=left]           <ref bean= "headerInterceptor" />[/align]
[align=left]       </jaxws:outInterceptors>[/align]
[align=left]</jaxws:client>[/align]

[align=left]
[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  webservice