当前位置:编程学习 > 网站相关 >>

WebService-02-使用CXF开发客户端

写在前面的话


在WebService-01中,使用了Java提供的JAX-WS的方式编写了服务端和客户端的代码,这一次使用CXF开发客户端,服务端代码不变,仅仅是使用CXF开发一个客户端。


服务端(HelloWorld及基实现类)


接口:
[java] 
package com.wds.ws.server.helloworld; 
 
import javax.jws.WebMethod; 
import javax.jws.WebService; 
 
/**
 * @WebService 将 Java 类标记为实现 Web Service,或者将 Java 接口标记为定义 Web Service 接口
 * 
 * @author wds
 *
 */ 
@WebService 
public inte易做图ce HelloWorld { 
     
    public String sayHi(String name); 
     
    /**
     * 通过@WebMethod注解,将exclude的属性设置为true,则可将此方法不暴露为webservice
     * @param name
     * @return
     */ 
    @WebMethod(exclude=true) 
    public String sayHello(String name); 

package com.wds.ws.server.helloworld;

import javax.jws.WebMethod;
import javax.jws.WebService;

/**
 * @WebService 将 Java 类标记为实现 Web Service,或者将 Java 接口标记为定义 Web Service 接口
 *
 * @author wds
 *
 */
@WebService
public inte易做图ce HelloWorld {
 
 public String sayHi(String name);
 
 /**
  * 通过@WebMethod注解,将exclude的属性设置为true,则可将此方法不暴露为webservice
  * @param name
  * @return
  */
 @WebMethod(exclude=true)
 public String sayHello(String name);
}

实现类:


[java]
package com.wds.ws.server.helloworld; 
 
import java.util.Date; 
 
import javax.jws.WebMethod; 
import javax.jws.WebService; 
 
/**
 * 如果注解中填写了endpointInte易做图ce这个属性,那么这个属性值所指定的接口上,也必须有@webservice的注解
 * 
 * portName指定了wsdl中port的名称
 * 
 * serviceName指定了wsdl中服务的名称
 * 
 * @author wds
 */ 
@WebService(endpointInte易做图ce="com.wds.ws.server.helloworld.HelloWorld", portName="hwPort", serviceName="hw") 
public class HelloWorldWs implements HelloWorld{ 
     
    public String sayHello(String name) { 
        System.out.println(new Date() + " sayHello " + name); 
        return name + ", Hello World!"; 
    } 
     
    public String sayHi(String name) { 
        System.out.println(new Date() + " sayHi " + name); 
        return name  + ", welcome webservice world!"; 
    } 
     

package com.wds.ws.server.helloworld;

import java.util.Date;

import javax.jws.WebMethod;
import javax.jws.WebService;

/**
 * 如果注解中填写了endpointInte易做图ce这个属性,那么这个属性值所指定的接口上,也必须有@webservice的注解
 *
 * portName指定了wsdl中port的名称
 *
 * serviceName指定了wsdl中服务的名称
 *
 * @author wds
 */
@WebService(endpointInte易做图ce="com.wds.ws.server.helloworld.HelloWorld", portName="hwPort", serviceName="hw")
public class HelloWorldWs implements HelloWorld{
 
 public String sayHello(String name) {
  System.out.println(new Date() + " sayHello " + name);
  return name + ", Hello World!";
 }
 
 public String sayHi(String name) {
  System.out.println(new Date() + " sayHi " + name);
  return name  + ", welcome webservice world!";
 }
 
}

服务端的发布类:


[java] v
package com.wds.ws.server.helloworld; 
 
import javax.xml.ws.Endpoint; 
 
/**
 * 服务发布类
 * 
 * @author wds
 *
 */ 
public class Publish { 
 
    /**
     * @param args
     */ 
    public static void main(String[] args) { 
        Endpoint.publish("http://localhost:567/helloworld", new HelloWorldWs()); 
    } 
 

package com.wds.ws.server.helloworld;

import javax.xml.ws.Endpoint;

/**
 * 服务发布类
 *
 * @author wds
 *
 */
public class Publish {

 /**
  * @param args
  */
 public static void main(String[] args) {
  Endpoint.publish("http://localhost:567/helloworld", new HelloWorldWs());
 }

}


客户端(CXF编写)


从CXF的官方中下载CXF,我使用的2.7.3的版本,解压,然后使用cmd命令,切换到cxf的bin目录下,执行以下命令:


[plain]
wsdl2java http://localhost:567/helloworld?wsdl

wsdl2java http://localhost:567/helloworld?wsdl
便可以在bin的目录生成WebService服务的客户端代码,复制到工程中去,代码结构如下:

 

 


编写CXFTest测试类,代码如下:


[java] 
 
import com.wds.ws.server.helloworld.HelloWorld; 
import com.wds.ws.server.helloworld.Hw; 
 
/**
 * CXF开发的WebService客户端测试类
 * @author wds
 *
 */ 
public class CXFTest { 
 
    /**
     * @param args
     */ 
    public static void main(String[] args) { 
         
        //service对应于wsdl文件中的service节点中的name  
        Hw hwws = new Hw(); 
         
        //通过service获取port,port的Name对应了wsdl文件中port节点的name  
        HelloWorld ws = hwws.getHwPort(); 
         
        //执行方法  
        String result = ws.sayHi("wds"); 
         
        //输出结果  
        System.out.println(result); 
         
    } 
 

package test;

import com.wds.ws.server.helloworld.HelloWorld;
import com.wds.ws.server.helloworld.Hw;

/**
 * CXF开发的WebService客户端测试类
 * @author wds补充:Web开发 , 其他 ,

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,