首页 > 编程知识 正文

webservices接口,http调用webservice接口

时间:2023-05-04 20:22:33 阅读:197669 作者:1938

这里先给出一个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 hcdxl 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.2lib新建CXF_HOME D:apache-cxf-2.5.2在PATH中添加 D:apache-cxf-2.5.2可靠的萝莉按照这种方式不一定能一下就配好,我的按上面这种方式配了之后,还是提示“系统找不到指定的路径。”还需要配置javahome的环境变量即:JAVA_HOME=D:Program FilesJavajre6

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。