zoukankan      html  css  js  c++  java
  • 初始cfx开发webservice, 简单实例应用

    项目结构图:

    步骤一: 添加maven 依赖包

    <project xmlns="http://maven.apache.org/POM/4.0.0" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.cfx.ws</groupId>
        <artifactId>ws-cfx-core</artifactId>
        <packaging>war</packaging>
        <version>0.0.1-SNAPSHOT</version>
        <name>ws-cfx-core</name>
        <url>http://maven.apache.org</url>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <cxf.version>2.7.1</cxf.version>
            <junit.version>4.8.1</junit.version>
        </properties>
        <dependencies>    
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-frontend-jaxws</artifactId>
                <version>${cxf.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-transports-http</artifactId>
                <version>${cxf.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-transports-http-jetty</artifactId>
                <version>${cxf.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-ws-security</artifactId>
                <version>${cxf.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-ws-policy</artifactId>
                <version>${cxf.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-bundle-jaxrs</artifactId>
                <version>${cxf.version}</version>
            </dependency>
            <dependency>
                <groupId>javax.ws.rs</groupId>
                <artifactId>jsr311-api</artifactId>
                <version>1.1.1</version>
            </dependency>
                     
            <dependency>
                <groupId>commons-lang</groupId>
                <artifactId>commons-lang</artifactId>
                <version>2.6</version>
            </dependency>
            <dependency>
                <groupId>commons-httpclient</groupId>
                <artifactId>commons-httpclient</artifactId>
                <version>3.0</version>
            </dependency>
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.3</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <finalName>ws-cxf-core</finalName>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                </resource>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**</include>
                    </includes>
                    <excludes>
                        <exclude>**/*.java</exclude>
                    </excludes>
                </resource>
            </resources>
            <plugins>
                <plugin>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>maven-jetty-plugin</artifactId>
                    <configuration>
                        <contextPath>/</contextPath>
                        <connectors>
                            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                                <port>9000</port>
                            </connector>
                        </connectors>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.5</source>
                        <target>1.5</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    </project>
    View Code

    这里使用maven-jetty插件.

    步骤二:编写service接口

    package com.ws.cfx.welc;
    
    import javax.jws.WebMethod;
    import javax.jws.WebParam;
    import javax.jws.WebResult;
    import javax.jws.WebService;
    
    import com.ws.cfx.welc.model.WorkInfo;
    /*
     * ws 接口 
     */
    @WebService
    public interface WelcomeWS {
    
        @WebMethod
        @WebResult String welcomeMessage(@WebParam String message);
        
        @WebMethod
        @WebResult WorkInfo workInfoNode(Long id);
    }

     接口实现

    package com.ws.cfx.welc.impl;
    
    import java.util.Date;
    
    import com.ws.cfx.welc.WelcomeWS;
    import com.ws.cfx.welc.model.WorkInfo;
    /**
     * 
     * @author dennisit@163.com
     *
     */
    public class WelcomeWSImpl implements WelcomeWS{
    
        
        @Override
        public String welcomeMessage(String message) {
            return "server success , accpet message values is :" + message;
        }
    
        @Override
        public WorkInfo workInfoNode(Long id) {
            WorkInfo workInfo = new WorkInfo();
            workInfo.setId(2L);
            workInfo.setWorkname("Node 2");
            workInfo.setWorktime(new Date());
            return workInfo;
        }
    
        
    }

    WS接口中的方法二,依赖自定义Model,WorkInfo.

    package com.ws.cfx.welc.model;
    
    import java.io.Serializable;
    import java.util.Date;
    import org.apache.commons.lang.builder.ToStringBuilder;
    
    public class WorkInfo implements Serializable{
    
        /**
         * 
         */
        private static final long serialVersionUID = -8709189656486577717L;
        
        private Long id;
        private String workname;
        private Date worktime;
        
        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public String getWorkname() {
            return workname;
        }
        public void setWorkname(String workname) {
            this.workname = workname;
        }
        public Date getWorktime() {
            return worktime;
        }
        public void setWorktime(Date worktime) {
            this.worktime = worktime;
        }
        
        @Override
        public String toString() {
            return ToStringBuilder.reflectionToString(this);
        }    
    }
    View Code

    步骤三: 编写ws服务端

    package com.ws.cfx.welc.server;
    
    import org.apache.cxf.endpoint.Server;
    import org.apache.cxf.interceptor.LoggingInInterceptor;
    import org.apache.cxf.interceptor.LoggingOutInterceptor;
    import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
    
    import com.ws.cfx.welc.impl.WelcomeWSImpl;
    
    /**
     * ws : 服务端
     * 
     * @author dennisit@163.com
     * 
     * 服务端测试: http://localhost:9000/ws/welcome?wsdl
     */
    public class WelcomeWSServer {
    
        /**WS服务地址*/
        public static final String WS_URL = "http://localhost:9000/ws/welcome";
        
        public static void main(String[] args) {
            JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
            factory.setServiceClass(WelcomeWSImpl.class);
            factory.setAddress(WelcomeWSServer.WS_URL);
            //添加cfx自定义的日志拦截器
            factory.getInInterceptors().add(new LoggingInInterceptor());  
            factory.getOutInterceptors().add(new LoggingOutInterceptor()); 
            Server server = factory.create();
            server.start();
        }
    }

    启动服务端,访问地址http://localhost:9000/ws/welcome?wsdl出现xml输出,表示服务端正式服务.实例输出内容如下:

    <wsdl:definitions name="WelcomeWSImplService"
        targetNamespace="http://impl.welc.cfx.ws.com/">
        <wsdl:import location="http://localhost:9000/ws/welcome?wsdl=WelcomeWS.wsdl"
            namespace="http://welc.cfx.ws.com/">
        </wsdl:import>
        <wsdl:binding name="WelcomeWSImplServiceSoapBinding" type="ns1:WelcomeWS">
            <soap:binding style="document"
                transport="http://schemas.xmlsoap.org/soap/http" />
            <wsdl:operation name="welcomeMessage">
                <soap:operation soapAction="" style="document" />
                <wsdl:input name="welcomeMessage">
                    <soap:body use="literal" />
                </wsdl:input>
                <wsdl:output name="welcomeMessageResponse">
                    <soap:body use="literal" />
                </wsdl:output>
            </wsdl:operation>
            <wsdl:operation name="workInfoNode">
                <soap:operation soapAction="" style="document" />
                <wsdl:input name="workInfoNode">
                    <soap:body use="literal" />
                </wsdl:input>
                <wsdl:output name="workInfoNodeResponse">
                    <soap:body use="literal" />
                </wsdl:output>
            </wsdl:operation>
        </wsdl:binding>
        <wsdl:service name="WelcomeWSImplService">
            <wsdl:port binding="tns:WelcomeWSImplServiceSoapBinding"
                name="WelcomeWSImplPort">
                <soap:address location="http://localhost:9000/ws/welcome" />
            </wsdl:port>
        </wsdl:service>
    </wsdl:definitions>
    View Code

    步骤四: 编写ws客户端,实现服务调用

    package com.ws.cfx.welc.client;
    
    import java.net.SocketTimeoutException;
    import javax.xml.ws.WebServiceException;
    import org.apache.cxf.interceptor.LoggingInInterceptor;
    import org.apache.cxf.interceptor.LoggingOutInterceptor;
    import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
    import com.ws.cfx.welc.WelcomeWS;
    import com.ws.cfx.welc.model.WorkInfo;
    import com.ws.cfx.welc.server.WelcomeWSServer;
    /**
     * ws : 服务客户端
     * 
     * @author dennisit@163.com
     * 
     *
     */
    public class WelcomeWSClient {
    
        public static void main(String[] args) {
            JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
            factory.setAddress(WelcomeWSServer.WS_URL);
            factory.setServiceClass(WelcomeWS.class);
            //客户端添加cfx日志拦截器
            factory.getInInterceptors().add(new LoggingInInterceptor());  
            factory.getOutInterceptors().add(new LoggingOutInterceptor()); 
            WelcomeWS welcome = (WelcomeWS) factory.create();
            System.out.println(welcome.welcomeMessage("This if first cfx ws ."));
            
            try {  
                WorkInfo workInfo = welcome.workInfoNode(2L);
                System.out.println(workInfo); 
            } catch(Exception e) {  
                if (e instanceof WebServiceException   
                        && e.getCause() instanceof SocketTimeoutException) {  
                    System.err.println("timeout exception.");  
                } else {  
                    e.printStackTrace();  
                }  
            }  
        }
    }

    剔除拦截器日志文件之后的输出内容如下:

    server success , accpet message values is :This if first cfx ws .
    com.ws.cfx.welc.model.WorkInfo@8a2023[id=2,workname=Node 2,worktime=Thu Apr 03 10:30:04 GMT+08:00 2014]


    转载请注明出处:[http://www.cnblogs.com/dennisit/p/3649945.html]


  • 相关阅读:
    LeetCode (160) Intersection of Two Linked Lists
    cmake命令 安装、用法简介
    算法——回文解密,判断一个数组是否为回文
    发现一个好用的播放插件---ckplayer
    阿里云ESC上的Ubuntu图形界面的安装
    tomcat 启动本地项目,但是报错的是另一个项目错误导致的tomcat启动失败
    发现一个有趣的时间控件
    Comparator 排序优先级
    项目Exception,项目前面有红色的小叉×
    日常问题,JasperException
  • 原文地址:https://www.cnblogs.com/dennisit/p/3649945.html
Copyright © 2011-2022 走看看