Android调用Web Service(CXF)实例应用详解
目录
- 前言
- 步骤
- 步骤一:创建 Web Service
- 步骤二:创建 Android 工程
- 步骤三:修改 AndroidManifest.xml 文件
- 步骤四:导入 CXF 库文件
- 步骤五:创建 Web Service 的代理类
- 步骤六:调用 Web Service
- 示例说明
- 示例 1:获取天气信息
- 示例 2:获取汽车信息
- 总结
前言
在 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。具体步骤如下:
- 在 Eclipse 中选择“New Project”菜单,创建一个 Java Web 工程。
- 在 src 目录下创建一个 Java 类,命名为 WeatherService。
- 在 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;
}
- 在 WeatherService 类上右键,选择“Web Services”->“Create Web Service”。
- 在“Create Web Service”向导中,选择“Bottom Up Java Web Service”类型,指定 WeatherService 类为服务实现类。
- 点击“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 实现
- 在 src 目录下创建一个 Java 类,命名为 CarService。
- 在 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;
}
- 在 CarService 类上右键,选择“Web Services”->“Create Web Service”。
- 在“Create Web Service”向导中,选择“Bottom Up Java Web Service”类型,指定 CarService 类为服务实现类。
- 点击“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技术站