本文借助网站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()); } } }