XFire构建web service客户端的五种方式

yizhihongxing

XFire是一个高效的轻量级web service框架,可以快速搭建web service应用,并且提供了多种方式构建web service客户端。这里介绍XFire构建web service客户端的五种方式的详细攻略。

方式一:使用Java代码手动构建客户端

使用Java代码手动构建客户端,需要借助XFIRE的相关API(包括Annotation,Client等)。步骤如下:

  1. 新建Java项目,导入xFire相关的jar包

在项目中导入xfire-core.jar、xfire-aegis.jar等xfire相关jar包。

  1. 定义API接口

定义API接口,使用Annotation标注相关参数,在参数中设置@WebParam(name=””)的值表示参数名称,例如:

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

@WebService(name="MathService",
portName = "MathServicePort",
serviceName = "MathService",
targetNamespace = "http://xfire.demo.com/MathService")

public interface MathService {

    float add(@WebParam(name="value1")float value1, @WebParam(name="value2")float value2);

    float substract(float value1, float value2);

}
  1. 生成客户端代理类

使用XFire的ClientFactory对象构建Service客户端代理类,例如:

Class serviceClass = MathService.class; 

String serviceUrl = "http://xfire.demo.com/MathService"; 

ClientProxyFactoryBean clientFactoryBean = new ClientProxyFactoryBean(); 

clientFactoryBean.setServiceClass(serviceClass); 

clientFactoryBean.setAddress(serviceUrl); 

MathService service = (MathService) clientFactoryBean.create(); 
  1. 调用接口

调用生成的客户端代理类中的MathService接口方法即可。例如:

float result = service.add(1.0f, 2.0f);

方式二:使用Spring配置文件构建客户端

使用Spring配置文件构建客户端,需要在Spring配置文件中进行相关配置。步骤如下:

  1. 新建Spring项目,导入xFire和Spring相关的jar包

在Spring项目中导入xfire-core.jar、xfire-aegis.jar、spring-beans.jar、spring-context.jar等相关jar包。

  1. 定义API接口

同方式一中的步骤。

  1. 生成客户端代理类

使用Spring配置文件中的jaxws:client标签配置服务接口和Endpoint地址,例如:

<jaxws:client id="mathService" serviceClass="com.demo.xfire.MathService" address="http://localhost:8080/MathService">
</jaxws:client>

在Spring配置文件中定义服务的引用,例如:

<bean id="mathServiceClient" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
    <property name="serviceInterface" value="com.demo.xfire.MathService"/>
    <property name="wsdlDocumentUrl" value="http://localhost:8080/MathService?wsdl"/>
    <property name="serviceName" value="MathService"/>
    <property name="portName" value="MathServicePort"/>
    <property name="namespaceUri" value="http://xfire.demo.com/MathService"/>
</bean>

其中,serviceInterface属性指定接口类名,wsdlDocumentUrl属性指定服务的WSDL地址,serviceName和portName属性指定服务的名称和端口,namespaceUri属性指定服务的命名空间。

  1. 调用接口

同方式一中的步骤。

方式三:使用命令行工具构建客户端

使用XFire提供的命令行工具xfire.bat或xfire.sh构建客户端,具体步骤如下:

  1. 在命令行上执行以下命令:
xfire.bat genclient http://localhost:8080/MathService?wsdl -p com.demo.xfire -d src

其中,url参数指定服务的WSDL地址,-p参数指定生成客户端代码的包名,-d参数指定生成代码的目录。

  1. 生成客户端代码

在执行完上述命令后,会在指定的目录中生成服务接口的客户端代码,例如:

public interface MathServicePortType extends java.rmi.Remote {
    float add(float value1, float value2) throws java.rmi.RemoteException;

    float substract(float value1, float value2) throws java.rmi.RemoteException;
}

public class MathServiceClient {

    private static final String ENDPOINT_ADDRESS = "http://localhost:8080/MathService";

    private MathServicePortType service;

    public MathServiceClient() throws MalformedURLException, ServiceException {
        URL endpointUrl = new URL(ENDPOINT_ADDRESS);
        QName serviceName = new QName("http://xfire.demo.com/MathService", "MathService");
        Service service = Service.create(endpointUrl, serviceName);
        this.service = service.getPort(MathServicePortType.class);
    }

    public float add(float value1, float value2) throws java.rmi.RemoteException {
        return service.add(value1, value2);
    }

    public float substract(float value1, float value2) throws java.rmi.RemoteException {
        return service.substract(value1, value2);
    }

    public static void main(String[] args) throws Exception {
        MathServiceClient client = new MathServiceClient();
        float result = client.add(1.0f, 2.0f);
        System.out.println(result);
    }
}
  1. 调用接口

在生成的客户端代码中调用服务接口即可。例如:

MathServiceClient client = new MathServiceClient();
float result = client.add(1.0f, 2.0f);

方式四:使用WSDL2Java命令行工具构建客户端

使用Apache CXF提供的命令行工具WSDL2Java构建客户端,具体步骤如下:

  1. 在命令行上执行以下命令:
wsdl2java -impl -ant http://localhost:8080/MathService?wsdl

其中,-impl参数表示是否生成实现类,-ant参数表示生成的构建文件格式为ANT风格。

  1. 生成客户端代码

在执行完上述命令后,会在指定的目录中生成服务接口的客户端代码,包括接口类、服务类以及相关的工具类,例如:

public interface MathService {
    float add(float value1, float value2);
    float substract(float value1, float value2);
}

public class MathServiceClient {

    private static final QName SERVICE_NAME = new QName("http://xfire.demo.com/MathService", "MathService");
    private static final QName PORT_NAME = new QName("http://xfire.demo.com/MathService", "MathServicePort");

    private MathService service;

    public MathServiceClient(URL wsdlUrl) {
        Service service = Service.create(wsdlUrl, SERVICE_NAME);
        this.service = service.getPort(PORT_NAME, MathService.class);
    }

    public float add(float value1, float value2) {
        return service.add(value1, value2);
    }

    public float substract(float value1, float value2) {
        return service.substract(value1, value2);
    }

    public static void main(String[] args) throws Exception {
        URL wsdlUrl = new URL("http://localhost:8080/MathService?wsdl");
        MathServiceClient client = new MathServiceClient(wsdlUrl);
        float result = client.add(1.0f, 2.0f);
        System.out.println(result);
    }
}
  1. 调用接口

在生成的客户端代码中调用服务接口即可。例如:

URL wsdlUrl = new URL("http://localhost:8080/MathService?wsdl");
MathServiceClient client = new MathServiceClient(wsdlUrl);
float result = client.add(1.0f, 2.0f);

方式五:使用Maven插件构建客户端

使用Apache CXF提供的Maven插件构建客户端,具体步骤如下:

  1. 在项目中添加Maven依赖

添加以下依赖:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>${cxf.version}</version>
</dependency>
  1. 在Maven POM文件中配置插件

在build->plugins节点下添加以下插件:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxf.version}</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>${project.basedir}/src/main/resources/MathService.wsdl</wsdl>
                        <wsdlLocation>classpath:/MathService.wsdl</wsdlLocation>
                        <bindingFiles>
                            <bindingFile>${project.basedir}/src/main/resources/MathService-bindings.xml</bindingFile>
                        </bindingFiles>
                        <extraargs>
                            <extraarg>-client</extraarg>
                            <extraarg>-verbose</extraarg>
                            <extraarg>-p</extraarg>
                            <extraarg>com.demo.xfire</extraarg>
                            <extraarg>-d</extraarg>
                            <extraarg>${project.build.directory}/generated-sources/cxf</extraarg>
                        </extraargs>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>

其中,wsdl节点指定服务的WSDL文件所在路径,wsdlLocation节点指定WSDL文件在项目中的位置,bindingFiles节点指定自定义绑定文件的位置,extraargs节点指定额外的参数,例如客户端包名和生成代码的路径。

  1. 生成客户端代码

在Maven项目的根目录上执行以下命令:

mvn generate-sources

即可生成服务接口的客户端代码。

  1. 调用接口

在生成的客户端代码中调用服务接口即可。例如:

MathService service = new MathService();
float result = service.add(1.0f, 2.0f);
System.out.println(result);

示例

以方式二为例,在Spring配置文件中配置MathService客户端以及引用:

<jaxws:client id="mathService" serviceClass="com.demo.xfire.MathService" address="http://localhost:8080/MathService">
</jaxws:client>

<bean id="mathServiceClient" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
    <property name="serviceInterface" value="com.demo.xfire.MathService"/>
    <property name="wsdlDocumentUrl" value="http://localhost:8080/MathService?wsdl"/>
    <property name="serviceName" value="MathService"/>
    <property name="portName" value="MathServicePort"/>
    <property name="namespaceUri" value="http://xfire.demo.com/MathService"/>
</bean>

在Java程序中调用MathService客户端:

public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("spring-client.xml");
    MathService mathService = (MathService)context.getBean("mathServiceClient");
    float result = mathService.add(1.0f, 2.0f);
    System.out.println(result);
}

运行程序即可输出3.0的结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:XFire构建web service客户端的五种方式 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • FileZilla Server ftp 服务器下通过alias别名设置虚拟目录(多个分区)

    下面我将分享一下“FileZilla Server ftp 服务器下通过alias别名设置虚拟目录(多个分区)”的完整攻略。 什么是alias别名 在FileZilla中,alias别名被用来创建虚拟目录的一个关键概念,也就是通过设置一个本地路径的别名,来将网络路径映射到本地磁盘上的路径。这种方式可以让FileZilla用户将任意数量的FTP资源映射到他们的…

    other 2023年6月27日
    00
  • intelcpu命名规则的简略解析

    Intel CPU命名规则的完整攻略 Intel CPU是计算机中常用的处理器,其命名规则是由Intel公司制定的。本文将介绍Intel CPU命名规则的完整攻略,包括两个示例说明。 命名规则 Intel CPU的命名规则通常由一个字母和一组数字组成。其中,字母表示处理器系列,数字表示处理器型号和性能等级。 字母表示处理器系列 CPU的字母表示处理器系列,常…

    other 2023年5月9日
    00
  • Jpa 如何使用@EntityListeners 实现实体对象的自动赋值

    使用@EntityListeners注解可以实现实体对象的自动赋值。该注解作用在JPA实体类上,用于指定监听器。 下面是使用@EntityListeners实现自动赋值的完整攻略。 1. 定义监听器 首先需要定义一个实体监听器,实现javax.persistence.event.EntityListener接口,重写对应的方法,如下所示: public cl…

    other 2023年6月27日
    00
  • vue中let that=this的作用及说明

    在Vue中,经常会遇到需要在回调函数中访问Vue实例的情况。由于JavaScript中的函数作用域问题,直接在回调函数中使用this关键字可能会导致this指向错误的对象。为了解决这个问题,可以使用let that = this的方式来保存正确的this引用。 下面是一个示例,演示了在Vue中使用let that = this的作用: export defa…

    other 2023年8月21日
    00
  • 删除SVN三种方法delSvn(windows+linux)

    删除SVN三种方法 delSvn(windows+linux) 攻略 简介 SVN(Subversion)是目前较为流行的版本控制系统之一。但是,在进行项目开发过程中,我们有时候需要删除SVN,这篇文章主要介绍了如何通过三种不同的方法来删除SVN。本文将提供适用于Windows和Linux操作系统的delSvn代码示例,支持快速高效地删除SVN。 方法一:使…

    other 2023年6月27日
    00
  • PHP中子类重载父类的方法【parent::方法名】

    当子类需要重新定义继承自父类中的一个方法,可以使用重载(override)的方法来实现。在子类中,使用与被重载的方法具有相同名称和参数列表的方法来覆盖父类中的方法。但是在某些情况下,子类可能需要在方法中调用父类的同名方法,以保留父类的行为。在 PHP 中可以使用 parent:: 来访问父类中的方法。 parent:: 很像 self::,但是它指的是父类而…

    other 2023年6月26日
    00
  • CAD查找如何区分大小写?CAD查找设置区分大小写教程

    CAD查找如何区分大小写? 在CAD软件中,查找功能可以帮助我们快速定位和选择特定的元素。区分大小写是一种设置,可以让我们在查找时区分字母的大小写。下面是详细的攻略,教你如何在CAD中设置区分大小写的查找。 步骤1:打开CAD软件 首先,打开你的CAD软件,并确保你已经加载了需要进行查找的图纸或模型。 步骤2:打开查找对话框 在CAD软件的菜单栏上,找到并点…

    other 2023年8月16日
    00
  • 红米内存不足怎么办?红米手机内部储存空间不足的解决方法

    红米内存不足怎么办?红米手机内部储存空间不足的解决方法 红米手机在使用过程中可能会遇到内存不足的问题,这会导致手机运行缓慢、应用程序崩溃等不良影响。下面是一些解决红米手机内存不足问题的方法。 1. 清理缓存和临时文件 缓存和临时文件占据了手机内存的一部分空间,清理它们可以释放一些内存空间。你可以按照以下步骤进行操作: 打开手机的设置菜单。 滑动到\”存储\”…

    other 2023年8月1日
    00
合作推广
合作推广
分享本页
返回顶部