android调用web service(cxf)实例应用详解

Android调用Web Service(CXF)实例应用详解

目录

前言

在 Android 开发中,需要调用 Web Service 的场景比较常见。Apache CXF 是一个开源的 Web Service 框架,支持多种协议,包括 SOAP、REST 和 XML/HTTP。本文将介绍使用 Apache CXF 调用 Web Service 的具体步骤,并提供两个示例,演示如何在 Android 应用中调用 Web Service。

步骤

在使用 Apache CXF 调用 Web Service 的过程中,需要完成以下几个步骤。

步骤一:创建 Web Service

在本文中,我们将使用 Eclipse 创建一个简单的 Web Service。具体步骤如下:

  1. 在 Eclipse 中选择“New Project”菜单,创建一个 Java Web 工程。
  2. 在 src 目录下创建一个 Java 类,命名为 WeatherService。
  3. 在 WeatherService 类中添加一个方法,用于获取天气信息。

java
public String getWeatherInfo(String city) {
String result = "";
try {
URL url = new URL("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx");
QName qname = new QName("http://WebXml.com.cn/", "WeatherWebServiceSoap");
Service service = Service.create(url, qname);
WeatherWebServiceSoap soap = service.getPort(WeatherWebServiceSoap.class);
result = soap.getWeatherbyCityName(city);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return result;
}

  1. 在 WeatherService 类上右键,选择“Web Services”->“Create Web Service”。
  2. 在“Create Web Service”向导中,选择“Bottom Up Java Web Service”类型,指定 WeatherService 类为服务实现类。
  3. 点击“Next”继续,选择“Apache CXF 2.x”作为 Web Service 框架,点击“Finish”完成 Web Service 创建。

步骤二:创建 Android 工程

在 Android Studio 中创建一个空白项目。

步骤三:修改 AndroidManifest.xml 文件

将以下权限添加到 AndroidManifest.xml 文件中:

<uses-permission android:name="android.permission.INTERNET" />

步骤四:导入 CXF 库文件

将以下库文件添加到 Android 工程中:

  • cxf-core-3.1.6.jar
  • cxf-rt-bindings-soap-3.1.6.jar
  • cxf-rt-frontend-jaxws-3.1.6.jar
  • cxf-rt-transports-http-3.1.6.jar

步骤五:创建 Web Service 的代理类

在 Android 工程中创建一个名为 WeatherServiceProxy 的类,并在该类中添加以下代码:

public class WeatherServiceProxy {
  private WeatherWebServiceSoap weatherWebService;

  public WeatherServiceProxy() {
    URL url = null;
    try {
      url = new URL("http://10.0.2.2:8080/WeatherService/services/WeatherService?wsdl");
      QName qname = new QName("http://WebXml.com.cn/", "WeatherWebServiceSoap");
      Service service = Service.create(url, qname);
      weatherWebService = service.getPort(WeatherWebServiceSoap.class);
    } catch (MalformedURLException e) {
      e.printStackTrace();
    }
  }

  public String getWeatherInfo(String city) {
    return weatherWebService.getWeatherbyCityName(city);
  }
}

其中,“http://10.0.2.2:8080/WeatherService/services/WeatherService?wsdl”是刚刚创建的 Web Service 的访问地址。

步骤六:调用 Web Service

在 MainActivity 中,添加以下代码:

public class MainActivity extends AppCompatActivity {

  private EditText cityEditText;
  private Button queryButton;
  private TextView resultTextView;

  private WeatherServiceProxy weatherServiceProxy;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    cityEditText = (EditText) findViewById(R.id.cityEditText);
    queryButton = (Button) findViewById(R.id.queryButton);
    resultTextView = (TextView) findViewById(R.id.resultTextView);

    weatherServiceProxy = new WeatherServiceProxy();

    queryButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        String city = cityEditText.getText().toString();
        String result = weatherServiceProxy.getWeatherInfo(city);
        resultTextView.setText(result);
      }
    });
  }
}

其中,“http://10.0.2.2:8080/WeatherService/services/WeatherService?wsdl”是刚刚创建的 Web Service 的访问地址。

至此,使用 Apache CXF 调用 Web Service 就完成了。

示例说明

下面将提供两个示例,演示如何在 Android 应用中调用 Web Service。

示例 1:获取天气信息

Web Service 实现

参考步骤一中的步骤创建 WeatherService。

Android 工程实现

在 MainActivity 中,添加以下代码:

public class MainActivity extends AppCompatActivity {

  private EditText cityEditText;
  private Button queryButton;
  private TextView resultTextView;

  private WeatherServiceProxy weatherServiceProxy;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    cityEditText = (EditText) findViewById(R.id.cityEditText);
    queryButton = (Button) findViewById(R.id.queryButton);
    resultTextView = (TextView) findViewById(R.id.resultTextView);

    weatherServiceProxy = new WeatherServiceProxy();

    queryButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        String city = cityEditText.getText().toString();
        String result = weatherServiceProxy.getWeatherInfo(city);
        resultTextView.setText(result);
      }
    });
  }
}

其中,“WeatherServiceProxy”是刚刚创建的代理类。

示例 2:获取汽车信息

Web Service 实现

  1. 在 src 目录下创建一个 Java 类,命名为 CarService。
  2. 在 CarService 类中添加一个方法,用于获取汽车信息。

java
public String getCarInfo(String code) {
String result = "";
try {
URL url = new URL("http://www.webxml.com.cn/WebServices/CarInfoWebService.asmx");
QName qname = new QName("http://tempuri.org/", "CarInfoWebServiceSoap");
Service service = Service.create(url, qname);
CarInfoWebServiceSoap soap = service.getPort(CarInfoWebServiceSoap.class);
result = soap.getCarInfo(code, "");
} catch (MalformedURLException e) {
e.printStackTrace();
}
return result;
}

  1. 在 CarService 类上右键,选择“Web Services”->“Create Web Service”。
  2. 在“Create Web Service”向导中,选择“Bottom Up Java Web Service”类型,指定 CarService 类为服务实现类。
  3. 点击“Next”继续,选择“Apache CXF 2.x”作为 Web Service 框架,点击“Finish”完成 Web Service 创建。

Android 工程实现

在 MainActivity 中,添加以下代码:

public class MainActivity extends AppCompatActivity {

  private EditText codeEditText;
  private Button queryButton;
  private TextView resultTextView;

  private CarServiceProxy carServiceProxy;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    codeEditText = (EditText) findViewById(R.id.codeEditText);
    queryButton = (Button) findViewById(R.id.queryButton);
    resultTextView = (TextView) findViewById(R.id.resultTextView);

    carServiceProxy = new CarServiceProxy();

    queryButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        String city = codeEditText.getText().toString();
        String result = carServiceProxy.getCarInfo(code);
        resultTextView.setText(result);
      }
    });
  }
}

其中,“CarServiceProxy”是刚刚创建的代理类。

总结

本文介绍了使用 Apache CXF 调用 Web Service 的具体步骤,并提供了两个示例。希望对初学者有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android调用web service(cxf)实例应用详解 - Python技术站

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

相关文章

  • Android中的build.gradle文件深入讲解

    以下是使用标准的Markdown格式文本,详细讲解Android中的build.gradle文件的完整攻略: Android中的build.gradle文件深入讲解 什么是build.gradle文件? 在Android开发中,build.gradle文件是一个重要的配置文件,用于定义和配置项目的构建过程。它包含了项目的依赖项、编译选项、打包配置等信息。 b…

    other 2023年10月14日
    00
  • Java递归求和1+2+3+…+n实例详解

    Java递归求和1+2+3+…+n实例详解 简介 递归(Recursion)是在程序执行过程中调用自身的一种方法,递归函数在调用自身时必须有一个跳出条件,否则就会陷入无限循环中。 在本文中,我们将会学习如何使用递归的方式来解决「1+2+3+…+n」这个经典问题。 问题描述 「1+2+3+…+n」是一个经典的问题,要求计算从1到n之间所有的整数的和…

    other 2023年6月27日
    00
  • Delphi下OpenGL2d绘图之初始化流程详解

    Delphi下OpenGL2d绘图之初始化流程详解 1. 前言 OpenGL是一种跨平台、开放源码、功能强大的图形编程接口,该接口支持2D/3D图形渲染和可视化。而Delphi是一种用于Windows平台的快速应用程序开发(RAD)工具,可以很好地与OpenGL集成,用于图形编程和可视化。本攻略将全面讲解Delphi下OpenGL2d绘图的初始化流程。 2.…

    other 2023年6月20日
    00
  • CentOS下添加新硬盘并分区格式化的详细步骤

    下面是CentOS下添加新硬盘并分区格式化的详细步骤。 步骤一:查看硬盘信息 通过以下命令查看当前系统已经有的硬盘信息: fdisk -l 其中,-l参数表示列出系统中所有硬盘的信息。根据显示内容,可以得知目前系统中已经有哪些硬盘,它们的文件系统分区情况等信息,如下所示: Disk /dev/sda: 21.5 GB, 21474836480 bytes 2…

    other 2023年6月28日
    00
  • windows**工具ophcrack

    当然,我很乐意为您提供有关“Windows工具Ophcrack”的完整攻略。以下是详细的步骤和两个示例: 1 Ophcrack Ophcrack是一款用于破解Windows密码的免费工具。它可以通过使用字典攻击和暴力破解等技术来破解Windows密码。以下是使用Ophcrack的步骤: 1.1 下载Ophcrack 首先,您需要从Ophcrack官方网站下载…

    other 2023年5月6日
    00
  • 浅析Java ClassName.this中类名.this关键字的理解

    浅析Java ClassName.this中类名.this关键字的理解 在Java中,当类中有内部类的时候,在内部类中可能会出现与外部类同名的成员变量或方法,此时就需要使用类名.this关键字来引用外部类的成员。 定义 ClassName.this可以指向外部类的实例。在内部类中使用ClassName.this引用的是外部类的实例对象。 示例1 在下面的示例…

    other 2023年6月27日
    00
  • 子类继承父类时构造函数相关问题解析

    子类继承父类时构造函数相关问题解析 在面向对象语言中,子类可以继承父类的属性和方法,包括构造函数。但是在实际开发中,由于子类继承父类的细节很多,因此在定义子类继承父类的构造函数时,需要注意以下几个问题。 子类继承父类构造函数时需要通过super关键字调用父类的构造函数。 在Java语言中,在子类调用父类的构造函数时,需要使用super关键字。示例如下: pu…

    other 2023年6月26日
    00
  • C#基础 延迟加载介绍与实例

    C#基础 延迟加载介绍与实例 什么是延迟加载 延迟加载指的是在需要使用数据时才进行加载,而不是提前一次性加载所有数据。这种方式可以在一定程度上提高程序的性能和效率,有利于减少内存占用。 在C#语言中,延迟加载主要有两种方式: 延迟加载属性(Lazy) 延迟加载集合(Lazy Initialization) 接下来分别介绍这两种方式的用法和示例。 延迟加载属性…

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