`

通过HTTP协议发送XML数据并调用webservice

阅读更多
package cn.itcast.service;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;
import cn.itcast.utils.StreamTool;

public class MobileInfoService {

	
	private static String readSoapFile(InputStream inStream, String mobile) throws Exception{
		byte[] data = StreamTool.readInputStream(inStream);
		String soapxml = new String(data);
		Map<String, String> params = new HashMap<String, String>();
		params.put("mobile", mobile);
		return replace(soapxml, params);
	}

	
	public static String replace(String xml, Map<String, String> params)throws Exception{
		String result = xml;
		if(params!=null && !params.isEmpty()){
			for(Map.Entry<String, String> entry : params.entrySet()){
				String name = "\\$"+ entry.getKey();
				Pattern pattern = Pattern.compile(name);
				Matcher matcher = pattern.matcher(result);
				if(matcher.find()){
					result = matcher.replaceAll(entry.getValue());
				}
			}
		}
		return result;
	}

	public static String getMobileAddress(InputStream inStream, String mobile)throws Exception{
		String soap = readSoapFile(inStream, mobile);
		byte[] data = soap.getBytes();
		URL url = new URL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");
		HttpURLConnection conn = (HttpURLConnection)url.openConnection();
		conn.setRequestMethod("POST");
		conn.setConnectTimeout(5 * 1000);
		conn.setDoOutput(true);//如果通过post提交数据,必须设置允许对外输出数据
		conn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
		conn.setRequestProperty("Content-Length", String.valueOf(data.length));
		OutputStream outStream = conn.getOutputStream();
		outStream.write(data);
		outStream.flush();
		outStream.close();
		if(conn.getResponseCode()==200){
			return parseResponseXML(conn.getInputStream());
		}
		return null;
	}

	private static String parseResponseXML(InputStream inStream) throws Exception{
		XmlPullParser parser = Xml.newPullParser();
		parser.setInput(inStream, "UTF-8");
		int eventType = parser.getEventType();//产生第一个事件
		while(eventType!=XmlPullParser.END_DOCUMENT){//只要不是文档结束事件
			switch (eventType) {	
			case XmlPullParser.START_TAG:
				String name = parser.getName();//获取解析器当前指向的元素的名称
				if("getMobileCodeInfoResult".equals(name)){
					return parser.nextText();
				}
				break;
			}
			eventType = parser.next();
		}
		return null;
	}
}

 

package cn.itcast.mobile.address;

import java.io.InputStream;

import cn.itcast.service.MobileInfoService;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private EditText mobileText;
    private TextView addressView;
    private static final String TAG = "MainActivity";
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mobileText = (EditText)this.findViewById(R.id.mobile);
        addressView = (TextView)this.findViewById(R.id.address);
        Button button = (Button)this.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {			
			@Override
			public void onClick(View v) {
				String mobile = mobileText.getText().toString();
				InputStream inStream = this.getClass().getClassLoader().getResourceAsStream("mobilesoap.xml");
				try {
					addressView.setText(MobileInfoService.getMobileAddress(inStream, mobile));
				} catch (Exception e) {
					Log.e(TAG, e.toString());
					Toast.makeText(MainActivity.this, "查询失败", 1).show();
				}
			}
		});
    }
}

 

分享到:
评论

相关推荐

    拼接xml调用webservice

    本主题的核心是"拼接XML调用WebService",这通常指的是通过构建XML字符串来构造请求,然后发送该请求到一个Web Service接口以获取响应。以下是对这个过程的详细解释: 1. **XML基础**:XML是一种结构化标记语言,它...

    调用webservice,通过post传参读取返回的XML

    通过整合这些元素,我们可以构建一个Web应用程序,该应用程序能够通过POST方式调用WebService,传递参数,并解析返回的XML数据,以便在页面上展示。这涉及到了客户端与服务器端的交互,XML数据的处理以及ASP.NET Web...

    ETL KETTLE 中利用Httpclient 调用webservice接口获取XML数据,并解析XML 数据

    ETL KETTLE 中利用Httpclient 调用webservice接口获取XML数据,并解析XML 数据。 完整的KTR实例

    JAVA调用webservice并解析xml

    Web服务是一种通过HTTP协议传输数据的应用程序接口(API)。SOAP是基于XML的协议,用于在Web服务之间传递结构化信息。它定义了消息格式、错误处理和协议绑定。 在Java中,我们通常使用Apache CXF或JAX-WS(Java API...

    使用Http post的方式调用webservice

    POST是HTTP协议中的一个请求方法,用于向服务器发送数据。在调用WebService时,POST方法可以承载请求参数,将其封装在请求体中发送到服务端。 1. **构建HTTP请求** 在Java中,可以使用`java.net.URL`、`java.net....

    使用WebService的方法返回xml格式的数据

    在本场景中,我们将探讨如何通过WebService来调用数据库中的数据并以XML格式进行返回。 1. **XML基础**:XML全称为Extensible Markup Language,它是一种自定义标记语言,用于结构化地表示数据。XML文档由元素、...

    webservice远程调用,返回数据生成xml文件,并通过SAX解析出来

    webservice远程调用,返回String数据并生成xml文件到本地工程,在通过SAX解析器把数据解析出来。这是webservice应用的一个简单的例子。根据该例子的思想,可以实现很多功能了。例如把client工程的sayHello方法改为...

    c#操作XML 读取、生成,WEBSERVICE接口

    Web Service是一种基于HTTP协议的远程调用技术,允许不同系统间进行数据交换。在C#中,可以使用ASP.NET的`System.Web.Services`命名空间创建Web Service。以下创建一个简单的WebService接口,用于接收和返回XML数据...

    oracle 调用webservice

    Webservice 通常使用 SOAP(Simple Object Access Protocol)协议来传输数据,使用 WSDL(Web Service Description Language)来描述服务接口。Webservice 的优点包括跨平台、跨语言、灵活性高、可重用性强等。 二...

    httpClient调用webservice接口

    WebService提供了通过HTTP协议进行远程过程调用的能力,使得不同应用程序之间能够进行数据交换与通信。其中,HttpClient作为一种常用的Java库,被广泛用于发送HTTP请求并接收响应。本文将详细介绍如何使用HttpClient...

    SQL Server调用Webservice示例

    首先,你可以通过HTTP请求获取Web Service的XML响应,然后解析这个响应并提取所需数据。这种方式适合简单数据交换,但不适用于复杂的数据结构。 2. **使用.NET Framework的存储过程**: SQL Server 2005及以后版本...

    Delphi调用WebService的实例(非常经典)[参考].pdf

    "Delphi调用WebService的实例(非常经典)" 在 Delphi 中调用 WebService 是一种非常经典的实例。下面我们将详细介绍 Delphi 调用 WebService 的相关知识点。 首先, Delphi 调用 WebService 需要了解基本概念。...

    webservice接口接收xml,string代码

    在现代软件开发中,WebService作为一种基于HTTP协议的应用程序接口(API),广泛应用于不同系统之间的数据交换与服务调用。本篇文章将根据提供的代码示例,详细介绍如何通过WebService接口接收XML格式的数据以及字符串...

    通过webservice提交xml数据以及soap协议的使用

    在本主题中,我们将深入探讨如何通过Web服务提交XML数据以及SOAP(Simple Object Access Protocol)协议的使用。 XML(Extensible Markup Language)是Web服务中常用的数据交换格式,它是一种自描述、结构化的文本...

    超简单的webservice调用

    接着,根据`README.md`的指示,理解并运行项目,查看如何通过封装好的接口调用Web Service。这可能涉及到解析返回的SOAP响应,以及处理可能出现的异常情况。最后,如果想要扩展或优化这个示例,可以深入研究Hutool的...

    VC++中WebService服务的调用

    WebService是一种基于Web的、松耦合的服务,它使用标准的HTTP协议进行通信,并通过XML(eXtensible Markup Language)进行数据交换。在本篇文章中,我们将深入探讨如何在VC++环境中实现对WebService的调用。 首先,...

    C# Webservice返回指定的xml格式

    在C#中,Web服务(WebService)是一种基于HTTP协议的通信方式,用于不同应用程序之间的数据交换。本篇文章将深入探讨如何使用C#和Visual Studio 2019(VS2019)来创建一个WebService,使其能够返回指定的XML格式。...

    java调用json参数的webservice

    调用WebService通常涉及到SOAP(Simple Object Access Protocol)消息,这是一种基于XML的协议用于在Web上传输信息。 在Java中调用带有JSON参数的WebService,可以按照以下步骤进行: 1. 定义WebService服务端代码...

    SqlServer触发器调用WebService

    WebService可以通过HTTP协议进行通信,并且通常使用XML作为数据格式。WebService的一个主要优势在于它的平台无关性,这意味着无论客户端和服务器端采用何种编程语言或操作系统,都可以轻松地进行交互。 #### 三、...

    安卓调用WebService服务对返回的xml解析展示

    终于调通安卓调用Webservice,传参并解析XML的样例,使用工具:Android Studio和Eclipse.Eclipse启动WebServer,Android Studio进行Application编码调试。两个工程文件都在压缩包中。喜极而泣。。。

Global site tag (gtag.js) - Google Analytics