利用webservice查询ip的物理地址 java实现

本文借助网站http://WebXml.com.cn提供的ip地址查询服务,利用java实现一个简单的查询,可以方便的使用。http://WebXml.com.cn支持这项服务的ip地址数据库是目前最大最全的

jar文件下载http://download.csdn.net/detail/giantpoplar/7683653

关于soap和webservice,维基百科的解释如下

SOAP(原为Simple Object Access Protocol首字母缩写,即简单对象访问协议)是交换数据的一种协议规范,使用在计算机网络Web服务(web service)中,交换带结构信息。SOAP为了简化网页服务器(Web Server)从XML数据库中提取数据时,节省去格式化页面时间,以及不同应用程序之间按照HTTP通信协议,遵从XML格式执行资料互换,使其抽象于语言实现、平台和硬件。此标准由IBMMicrosoftUserLandDevelopMentor在1998年共同提出,并得到IBM,莲花(Lotus),康柏(Compaq)等公司的支持,于2000年提交给万维网联盟World Wide Web Consortium;W3C),目前SOAP 1.1版是业界共同的标准,属于第二代的XML协定(第一代具主要代表性的技术为XML-RPC以及WDDX)。


Web服务是一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。

根据W3C的定义,Web服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作。网络服务通常是许多应用程序接口(API)所组成的,它们透过网络,例如国际互联网(Internet)的远程服务器端,执行客户所提交服务的请求。

尽管W3C的定义涵盖诸多相异且无法介分的系统,不过通常我们指有关于主从式架构(Client-server)之间根据SOAP协议进行传递XML格式消息。无论定义还是实现,WEB服务过程中会由服务器提供一个机器可读的描述(通常基于WSDL)以辨识服务器所提供的WEB服务。另外,虽然WSDL不是SOAP服务端点的必要条件,但目前基于Java的主流WEB服务开发框架往往需要WSDL实现客户端的源代码生成。一些工业标准化组织,比如WS-I,就在WEB服务定义中强制包含SOAP和WSDL。


具体代码如下:

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;

//利用soap协议来使用webservice;导入jar文件
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpResponseException;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

@SuppressWarnings("serial")
public class Request extends JFrame {
	/**
	 * @author giantpoplar
	 * @param args
	 */
	public static void main(String[] args) {

		new Request();
	}

	// 构造方法,初始化界面
	public Request() {
		this.setTitle("tricks");
		this.setSize(500, 200);
		this.setLocation(500, 100);
		final JTextArea jt1 = new JTextArea();
		final JLabel label = new JLabel();
		JButton jb1 = new JButton("查询");
		// 点击时进行查询,将返回结果显示在label中
		jb1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String str = getAdress(jt1.getText());
				label.setText(str);
			}

		});

		GridLayout gl = new GridLayout(3, 1);
		this.setLayout(gl);
		this.add(label);
		this.add(jt1);
		this.add(jb1);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}

	protected static String format(String str) {
		str = str.substring(str.indexOf('=') + 1);
		str = str.substring(str.indexOf('=') + 1);
		str = "物理地址: " + str.substring(0, str.indexOf(';'));
		return str;

	}

	@SuppressWarnings("finally")
	private static String getAdress(String ip) {
		// java利用ksoap使用webservice的具体步骤
		final String NAMESPACE = "http://WebXml.com.cn/";
		// 服务具体地址
		final String URL = "http://webservice.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx";
		// METHOD_NAME和SOAP_ACTION中服务器根目录下名字一致
		final String METHOD_NAME = "getCountryCityByIp";
		final String SOAP_ACTION = "http://WebXml.com.cn/getCountryCityByIp";
		SoapObject s = null;
		try {
			// 新建http传输对象
			HttpTransportSE ht = new HttpTransportSE(URL);

			SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);
			// 添加属性
			rpc.addProperty("theIpAddress", ip);

			SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
					SoapEnvelope.VER11);
			envelope.bodyOut = rpc;
			envelope.dotNet = true;
			envelope.setOutputSoapObject(rpc);
			ht.call(SOAP_ACTION, envelope);

			// 获取响应结果
			s = (SoapObject) envelope.getResponse();
			
		} catch (HttpResponseException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		} finally {
			return format(s.toString());
		}
	}

}


 
 



你可能感兴趣的:(java,webservice,网络,web服务,ip物理地址)