WebService - CXF开发Server和Client(main方法测试)

简介: WebService - CXF开发Server和Client(main方法测试)

本篇简要记录使用jdk生成Stub进行service与client的测试,未与spring结合且未发布到tomcat容器,Server和Client都是使用的main方法。


篇末有第二种方式(客户端代理工厂)进行客户端开发示例。


这里使用的是CXF,引入jar永远是不可少的(自己下载引入)。



20171104181922905.png



【1】配置系统环境变量

如果使用jetty生成Stub来编写客户端项目,需要进行如下配置:


【2】编辑Service并进行发布

service的编写使用JAX-WS,直接使用注解进行声明,简单便捷。Service项目不需要额外的jar,Client项目需要博文头部提到的jar。

① 编写service接口

package com.web.service;
import javax.jws.WebMethod;
import javax.jws.WebService;
//这里使用了注解,声明为webservice接口
@WebService
public interface ServiceServer {
    //这里使用了注解,声明方法
    @WebMethod
    public String sayHello(String name);
}

② 编写其实现类

package com.web.service.impl;
import javax.jws.WebService;
import com.web.service.ServiceServer;
//这里使用了注解
@WebService
public class ServiceServerImpl implements ServiceServer{
    @Override
    public String sayHello(String name) {
        System.out.println("server sayHello "+name);
        return "hello"+name;
    }
}

③ 使用main方法进行发布

package com.web.service.impl;
import java.util.Date;
import javax.xml.ws.Endpoint;
public class ServerTest {
    public static void main(String[] args) {
        String address = "http://192.168.2.225:8989/ServiceServerImpl";
        Endpoint.publish(address , new ServiceServerImpl());
        System.out.println("webservice 发布成功!"+new Date());
    }
}


【3】根据address,查看并保存wsdl文件

① 浏览器中输入地址,查看wsdl


http://192.168.2.225:8989/ServiceServerImpl?wsdl


将其保存为test.wsdl放入客户端项目下(新建一个客户端项目)


<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.service.web.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:ns1="http://service.web.com/" name="ServiceServerImplService" targetNamespace="http://impl.service.web.com/">
  <wsdl:import location="http://192.168.2.225:8989/ServiceServerImpl?wsdl=ServiceServer.wsdl" namespace="http://service.web.com/">
    </wsdl:import>
  <wsdl:binding name="ServiceServerImplServiceSoapBinding" type="ns1:ServiceServer">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="sayHello">
      <soap:operation soapAction="" style="document"/>
      <wsdl:input name="sayHello">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="sayHelloResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="ServiceServerImplService">
    <wsdl:port binding="tns:ServiceServerImplServiceSoapBinding" name="ServiceServerImplPort">
      <soap:address location="http://192.168.2.225:8989/ServiceServerImpl"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

【4】根据wsdl生成Stub,进行客户端测试

① DOS进入客户端项目src路径


② 根据项目下的wsdl生成Stub

wsimport -keey url



③ 刷新项目,可以看到src下生成了service和impl


20171102211037014.png


另外,还可以直接根据wsdl的url地址生成Stub,不用再保存wsdl具体文件到项目下。

20171102211639772.png



上面两种方式都是使用jdk生成Stub,还可以使用如下命令使用jetty进行生成:

wsdl2java url

④ 编写main方法,进行客户端调用

package com.web.client;
import com.web.service.impl.ServiceServer;
import com.web.service.impl.ServiceServerImplService;
public class Client {
    public static void main(String[] args) {
        ServiceServerImplService factory = new ServiceServerImplService();
        ServiceServer serviceServerImplPort = factory.getServiceServerImplPort();
        System.out.println(serviceServerImplPort.getClass());
        String result = serviceServerImplPort.sayHello("Tom");
        System.out.println("Client "+result);
    }
}


客户端输出结果如下:


服务端输出结果如下:


项目源码与jar下载:http://download.csdn.net/download/j080624/10051042

【Tips】可以采用JaxWsProxyFactoryBean 如下方式:

package com.web.test;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.web.service.ServiceServer;
public class ClientTest2 {
    public static void main(String[] args) {
         //创建WebService客户端代理工厂
          JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
          //注册WebService接口
          factory.setServiceClass(ServiceServer.class);
          //设置WebService地址
          factory.setAddress("http://192.168.2.225:8888/redis/hello");
          ServiceServer serverService = (ServiceServer)factory.create();
          System.out.println("invoke webservice...");
          String sayHello = serverService.sayHello("Lucy");
          System.out.println("message context is:"+sayHello);   
    }
}
目录
相关文章
|
25天前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的1024QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的1024QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同SNR条件下的性能测试。1024QAM调制将10比特映射到复平面上的1024个星座点之一,实现高效数据传输。硬件测试结果表明,在SNR=32dB和40dB时,系统表现出良好的性能。Verilog核心程序展示了各模块的连接与功能实现。
43 7
|
1月前
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
62 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
1月前
|
人工智能 自然语言处理 测试技术
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
Potpie.ai 是一个基于 AI 技术的开源平台,能够为代码库创建定制化的工程代理,自动化代码分析、测试和开发任务。
204 19
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
|
19天前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4ASK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的4ASK调制解调系统的硬件测试版本,该系统包括testbench、高斯信道模块和误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置功能。通过VIO设置不同SNR(如15dB和25dB),实现了对系统性能的实时监测与调整。4ASK是一种通过改变载波幅度表示数据的数字调制方式,适用于多种通信场景。FPGA平台的高效性和灵活性使其成为构建高性能通信系统的理想选择。
66 17
|
1月前
|
人工智能 自然语言处理 测试技术
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
AxBench 是由斯坦福大学推出,用于评估语言模型可解释性方法的基准测试框架,支持概念检测和模型转向任务,帮助研究者系统地比较不同控制技术的有效性。
53 5
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
|
23天前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4FSK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前的文章《基于FPGA的4FSK调制解调系统》,增加了ILA在线数据采集模块和VIO在线SNR设置模块,实现了硬件测试版本。通过VIO设置不同SNR(如10dB和20dB),并展示了ILA采集的数据结果。四频移键控(4FSK)是一种数字调制方法,利用四个不同频率传输二进制数据,具有较高的频带利用率和抗干扰性能。输入的二进制数据分为两组,每组两个比特,对应四个频率f1、f2、f3、f4,分别代表二进制组合00、01、10、11。调制过程中选择相应频率输出,并进行幅度调制以增强抗干扰能力。接收端通过带通滤波器提取信号并还原为原始二进制数据。
34 7
|
1月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
72 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
26天前
|
数据采集 算法 数据处理
【硬件测试】基于FPGA的256QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的256QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同信噪比(如30dB和40dB)的仿真测试,并提供配套操作视频。256QAM调制方案每个符号携带8比特信息,通过复数值星座图映射实现高效传输。Verilog代码展示了核心模块设计,包括SNR设置、数据处理和ILA测试分析,确保系统在实际硬件环境中的稳定性和性能。
22 2
|
1月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的16QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的16QAM基带通信系统硬件测试版本。该系统在仿真基础上增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同信噪比(如15dB、25dB)的测试。16QAM是一种正交幅度调制方式,通过两路4ASK信号叠加实现,每个符号包含4比特信息。系统采用正交调幅法生成16QAM信号,并通过DAC转换为模拟信号。解调时使用正交相干解调,经低通滤波器恢复电平信号。开发板内完成发射与接收,无需定时同步模块。代码可移植至其他开发板,具体步骤见配套文档。
34 2
|
1月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的64QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的64QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集模块和vio在线SNR设置模块,支持不同SNR条件下的仿真与测试。通过设置SNR为25dB和30dB进行测试,验证了系统的可行性和性能。此外,本文详细阐述了64QAM调制解调的工作原理,包括信号生成、调制、解调及误码率测试等环节,并提供了Verilog核心程序代码。
22 0

热门文章

最新文章