WebService接口的调用方法。

本文介绍如何使用免费的Webservice接口查询IP地址的地理位置信息,包括详细的代码示例及常见问题解决方案,如CXF配置、依赖冲突等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里先给出一个webservice的免费接口。用于查询ip地址所在地

http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl

我们先通过浏览器访问。找到头部的一个链接。

targetNamespace="http://WebXml.com.cn/"

还有对应的service接口名称。

<wsdl:service name="IpAddressSearchWebService">

这里我用的是idea。所以直接通过tools里面WebServices直接生成接口那些文件。
在这里插入图片描述

接着来了!直接调用。

 //在这里输入接口链接。
        URL url=new URL("http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl");
        //Qname里面就需要填写我们一开始找的2个东西。第一个输入namespaceurl。第二个输入service名称。
        QName qName=new QName("http://WebXml.com.cn/","IpAddressSearchWebService");
        //这里直接创建连接。
        Service  service=Service.create(url,qName);
        //调用这个service里面的方法。
        IpAddressSearchWebServiceSoap port = service.getPort(IpAddressSearchWebServiceSoap.class);
        //返回的是ArrayOfString。但是我们可以直接toString转成list。调用方法括号内填入你要查询的iP地址
        ArrayOfString countryCityByIp = port.getCountryCityByIp("123.2.2.3");
        //转化 + 遍历
        List<String> list = countryCityByIp.getString();
        Object[] object = list.toArray();
        for (Object o : object) {
            System.out.println(o);
        }

结果是:

123.2.2.3
澳大利亚  

**

在这里附加一下遇到的问题:

**

No.1 No namespace on “html” element. You must send a SOAP message.

解决方法。把CXF的jar包全部移除。

我把maven里面的CXF注释掉就正常了

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>org.apache.cxf</groupId>-->
            <!--<artifactId>cxf-rt-frontend-jaxws</artifactId>-->
            <!--<version>3.1.6</version>-->
        <!--</dependency>-->
        <!--<dependency>-->
            <!--<groupId>org.apache.cxf</groupId>-->
            <!--<artifactId>cxf-rt-transports-http</artifactId>-->
            <!--<version>3.1.6</version>-->
        <!--</dependency>-->
    </dependencies>

No2.src-resolve: 无法将名称 ‘s:schema’ 解析为 ‘element declaration’ 组件。

<s:element ref="s:schema" /><s:any />  修改成 ↓

<s:any minOccurs="2" maxOccurs="2"/>

在运行一次就正常了。

No3.CXF提示Cannot create a secure XMLInputFactory

在这个时候 由于我用的是idea。一开始创立项目的时候就已经导入了。
后面我发现我用的是官方最新的3.2的CXF。可能idea里面的jar包老了跟不上。
于是直接删除相对应的2个jar包。用maven加入最新版。测试正常。

<dependency>
            <groupId>org.codehaus.woodstox</groupId>
            <artifactId>stax2-api</artifactId>
            <version>4.1</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.woodstox</groupId>
            <artifactId>woodstox-core-asl</artifactId>
            <version>4.4.1</version>
        </dependency>

No4.两个类具有相同的 XML 类型名称 “{http://Service/}test”。请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称。

检查你的客户端接口里面的引用是否正确。不正确会导致这个问题。并不一定是名字重复。
(折腾半个钟。因为是双引号引起来的并不容易发现。)

No5.wsdl2java找不到路径(转。测试成功)

今天遇到的问题做个记录,怕以后会忘记!
在环境变量中进行如下操作:
在CLASSPATH中添加 D:\apache-cxf-2.5.2\lib
新建CXF_HOME D:\apache-cxf-2.5.2
在PATH中添加 D:\apache-cxf-2.5.2\bin
按照这种方式不一定能一下就配好,我的按上面这种方式配了之后,还是提示“系统找不到指定的路径。”

还需要配置javahome的环境变量即:JAVA_HOME=D:\Program Files\Java\jre6
<think>嗯,用户问的是WebService接口调用方法,我需要先理清楚这个主题的关键点。首先,得明确什么是WebService,然后介绍常见的调用方式,比如SOAP和REST,可能还要提到XML-RPC之类的,但主要应该是SOAP和REST。用户可能想知道具体步骤,所以需要分步骤说明,每个步骤的关键点是什么,比如SOAP需要WSDL,生成客户端代码,构建请求体,发送请求等。对于REST,可能更简单,用HTTP方法,处理JSON或XML数据。 接下来要考虑用户可能的背景,可能是开发者或者刚接触WebService的人,所以需要语言通俗易懂,避免太专业的术语,或者至少解释清楚。比如,解释WSDL是什么,SOAP协议的结构,RESTful的特点。可能还需要比较SOAP和REST的区别,帮助用户选择适合的方法。 另外,用户提到系统级指令,要确保回答结构清晰,分步骤,可能用编号列表。同时,注意使用中文,避免使用Markdown格式,但用户现在的问题已经处理了格式要求,所以按照正常的中文回答即可。需要检查是否有遗漏的步骤,比如工具的使用,比如Postman测试REST接口,或者SOAPUI工具的使用,这些实用工具可能会帮助用户实际操作。 还要注意可能的常见问题,比如如何解析SOAP的响应,处理可能的错误,或者认证机制如WS-Security,OAuth2.0在SOAP和REST中的使用。不过可能不需要太深入,保持基础即可。需要确保示例正确,比如SOAP的XML请求示例,REST的URL和HTTP方法示例。 最后,总结一下关键点,确保用户理解不同场景下的选择,比如企业内部用SOAP,移动端用REST。可能还需要提醒用户注意接口文档的重要性,以及测试工具的使用。检查是否有错误,比如SOAP是否只能用XML,REST是否支持其他格式,确保信息准确。</think>WebService接口调用方法可分为以下步骤,主要涉及SOAP和REST两种常见协议: 一、SOAP协议调用方法 1. 获取WSDL文件 - WSDL(Web Services Description Language)文件定义了服务地址、操作名称、参数格式 - 访问类似 http://example.com/service?wsdl 获取描述文件 2. 生成客户端代码 - 使用工具自动生成客户端代理类(如Java的wsimport,.NET的wsdl.exe) - 示例Java命令:wsimport -keep http://example.com/service?wsdl 3. 构建SOAP请求 - 按WSDL定义构造XML格式请求体 - 示例请求结构: $$<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header/> <soapenv:Body> <web:MethodName xmlns:web="http://example.com"> <web:Param1>value</web:Param1> </web:MethodName> </soapenv:Body> </soapenv:Envelope>$$ 4. 发送HTTP请求 - 设置Content-Type为text/xml - POST方式发送到服务端点地址 - 使用工具如Postman或代码库(Apache HttpClient等) 二、REST风格调用方法 1. 确认接口规范 - 获取API文档(URL、HTTP方法、参数格式) - 示例端点:GET http://api.example.com/users/{id} 2. 构造HTTP请求 - 选择对应方法(GET/POST/PUT/DELETE) - 设置Headers: - Accept: application/json - Content-Type: application/json(POST/PUT时) 3. 发送请求并处理响应 - 使用工具(curl、Postman)或代码库(Python requests) - Python示例: $$import requests response = requests.get('http://api.example.com/users/123') print(response.json())$$ 三、关键注意事项 1. 安全认证 - SOAP常用WS-Security - REST常用OAuth2.0/Basic Auth/API Key 2. 错误处理 - 检查HTTP状态码(200/404/500等) - 解析错误消息体 3. 工具推荐 - SOAP测试:SoapUI - REST测试:Postman/Insomnia - 调试工具:Wireshark(抓包分析) 四、协议选择建议 - SOAP:适合企业级应用,需要严格契约的场景 - REST:适合移动/Web应用,需要轻量级交互的场景 实际调用时应优先参考具体WebService提供的官方文档,不同服务可能有特殊要求和扩展规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值