本文借助网站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格式执行资料互换,使其抽象于语言实现、平台和硬件。此标准由IBM、Microsoft、UserLand和DevelopMentor在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());
}
}
}