文章目录

  • 1. 通过eclipse等直接生成Client
  • 2. 通过JAVA命令wsimprot命令生成Client
  • 3.通过axis直接调用(无需生成Client)
  • 4.通过axis中的wsdl2java工具生成client
  • 5.直接SOAP调用远程的webservice

1. 通过eclipse等直接生成Client

电话归属地接口:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

创建JAVA项目→在该项目中创建Web Service Client→填入wsdl→无报错生成成功

  • 不用管生成的Client代码,直接阅读wsdl文档
  • wsdl由下到上阅读
  • 强调不用管生成的代码,直接新建一个类开始写测试代码

归属地接口调用代码如下:

//:Call.java
import cn.com.webxml.MobileCodeWS;
import cn.com.webxml.MobileCodeWSSoap;
public class Call {
public static void main(String[] args) {MobileCodeWS mobileCode=new MobileCodeWS();MobileCodeWSSoap  mw= mobileCode.getMobileCodeWSSoap();String returninfo = mw.getMobileCodeInfo("18509391234", null);System.out.println(returninfo);}
}

2. 通过JAVA命令wsimprot命令生成Client

wsimport -d D:\tianqi -s D:\tianqi\s -p com.tianqi -verbose http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl参数说明
-keep:是否生成java源文件
-d:指定.class文件的输出目录
-s:指定.java文件的输出目录
-p:定义生成类的包名,不定义的话有默认包名
-verbose:在控制台显示输出信息
-b:指定jaxws/jaxb绑定文件或额外的schemas
  • 将生成的代码copy到新建的java项目中
  • 阅读wsdl,写测试代码
  • 测试代码如:方式1 Call.java

3.通过axis直接调用(无需生成Client)

这种方法需要非常了解wsdl,通过阅读wsdl就能知道其中的方法,参数等等,然后就可以直接撸代码啦

//:CallAxia.java
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.encoding.XMLType;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;public class CallAxis {public static void main(String[] args) {try {//直接引用远程的wsdl文件删除了后面的?wsdl String endpoint = "http://127.0.0.1:8088//services/Test";//以下都是套路 Service service = new Service();Call call = (Call) service.createCall();call.setTargetEndpointAddress(endpoint);call.setOperationName("TestMethod");//WSDL里面描述的方法名   TestMethodcall.addParameter("in0",XMLType.SOAP_STRING,ParameterMode.IN);//接口的参数call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型 String [] temp = {"111"};Object[] o = {temp};String result = (String) call.invoke(o);//给方法传递参数,并且调用方法System.out.println(result);   //打印接口的返回值} catch (Exception e) {System.err.println(e.toString());}}
}

需要依赖:axis-ant.jar,axis.jar ,commons-discovery.jar ,commons-logging.jar ,jaxrpc.jar ,log4j-1.2.8.jar ,saaj.jar ,wsdl4j.jar

4.通过axis中的wsdl2java工具生成client

天气预报接口:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

  • 在axis官网下载axis2-1.4.1-bin.zip并解压至D盘
  • axis百度云:链接:https://pan.baidu.com/s/1LiOp18mLVouUe3fXqTR6Ng 提取码:fa75
  • 设置环境变量: 新建环境变量:axishome 变量值:D:\axis2-1.4.1
  • 在path中新增变量值: %axishome%\bin
  • 在命令行中输入如下命令:
wsdl2java.bat -uri http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl -o src -p tianqi参数说明(常用):
-o  : 指定生成代码的输出路径
-p  : 指定代码的package名称
-l  : 使用的语言(Java/C) 默认是java
-a  : 生成异步模式的代码
-s  : 生成同步模式的代码
-t  : 为代码生成测试用例
-g  : 生成服务端和客户端的代码
-ss :生成服务端代码 默认不生成
  • 把生成的包导入项目
  • 生成文件中有个xxxxstub.java 创建一个它的对象
  • 这是就能看到它里面的方法了,代码如下:
  • 这种方式需要的依赖较多一定不要漏了(我把lib里的全部导入了具体不知道需要哪些)
//:TianQi.java
import java.rmi.RemoteException;
import org.apache.axis2.AxisFault;
import tianqi.WeatherWebServiceStub;
import tianqi.WeatherWebServiceStub.ArrayOfString;
import tianqi.WeatherWebServiceStub.GetWeatherbyCityName;
import tianqi.WeatherWebServiceStub.GetWeatherbyCityNameResponse;public class TianQi {public static void main(String[] args) {try {WeatherWebServiceStub wws = new WeatherWebServiceStub();GetWeatherbyCityName getweather = new GetWeatherbyCityName();getweather.setTheCityName("安康");try {GetWeatherbyCityNameResponse returninfo1 = wws.getWeatherbyCityName(getweather);ArrayOfString a = returninfo1.getGetWeatherbyCityNameResult();String[] dd = a.getString();          // 将ArrayOfString 转为 String数组for (int i = 0; i < dd.length; i++) {    // 遍历数组System.out.println(dd[i]);           //打印接口的返回值}} catch (RemoteException e) {// TODO Auto-generated catch blockSystem.out.println("接口调用失败");e.printStackTrace();}} catch (AxisFault e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

5.直接SOAP调用远程的webservice

这种模式我从来没有见过,也没有试过,但是网络上有人贴出来,我也转过来

import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;import java.io.*;
import java.net.*;
import java.util.Vector;public class caService {public static String getService(String user) {URL url = null;try {url = new URL("http://192.168.0.100:8080/ca3/services/caSynrochnized");} catch (MalformedURLException mue) {return mue.getMessage();}// This is the main SOAP objectCall soapCall = new Call();// Use SOAP encodingsoapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);// This is the remote object we're asking for the pricesoapCall.setTargetObjectURI("urn:xmethods-caSynrochnized");// This is the name of the method on the above objectsoapCall.setMethodName("getUser");// We need to send the ISBN number as an input parameter to the methodVector soapParams = new Vector();// name, type, value, encoding styleParameter isbnParam = new Parameter("userName", String.class, user,null);soapParams.addElement(isbnParam);soapCall.setParams(soapParams);try {// Invoke the remote method on the objectResponse soapResponse = soapCall.invoke(url, "");// Check to see if there is an error, return "N/A"if (soapResponse.generatedFault()) {Fault fault = soapResponse.getFault();String f = fault.getFaultString();return f;} else {// read resultParameter soapResult = soapResponse.getReturnValue();// get a string from the resultreturn soapResult.getValue().toString();}} catch (SOAPException se) {return se.getMessage();}}
}

JAVA调用Web Service接口的五种方式相关推荐

  1. JAVA 调用Web Service

    JAVA 调用Web Service的方法 1.使用HttpClient  用到的jar文件:commons-httpclient-3.1.jar  方法:  预先定义好Soap请求数据,可以借助于X ...

  2. python rest api_Python调用REST API接口的几种方式汇总

    相信做过自动化运维的同学都用过REST API接口来完成某些动作.API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课. 本文主要介绍python中调用REST AP ...

  3. android 调用java接口_android调用java的web service接口

    android中通过webservice调用服务器端其实还是很简单的,只要按部就班的按照下面步骤进行即可: (1)创建HttpTransportSE对象,该对象用于调用WebService操作 代码如 ...

  4. Java 调用Web service 添加认证头(soapenv:Header)

    前言 有时候调用web service 会出现 Message does not conform to configured policy [ AuthenticationTokenPolicy(S) ...

  5. java中读取properties文件内容五种方式

    一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...

  6. 提高Web Service效率的几种方式(转)

    2008-02-20 16:01 基于SOAP的Web Service的性能一直为人诟病,由于采用 XML标准进行系统间的数据传输,加大了传输的数据量,尤其是在传输一些具有比较严格结构的数据时,会使得 ...

  7. 【转】JAVA 调用Web Service的方法

    转自http://www.cnblogs.com/sun_moon_earth/archive/2009/02/03/1383308.html 1.使用HttpClient 用到的jar文件:comm ...

  8. Java调用.NET webservice方法的几种方式

    最近做项目,涉及到web-service调用,现学了一个星期,现简单的做一个小结.下面实现的是对传喜物流系统(http://vip.cxcod.com/PodApi/GetPodStr.asmx?ws ...

  9. cxf调用接口的几种方式_Java调用CXF WebService接口的两种方式实例

    1.静态调用 // 创建WebService客户端代理工厂 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); // 判断是否抛出 ...

最新文章

  1. 原创jQuery移动设备弹出框插件——msgalert.js
  2. elasticsearch 客户端工具_万字长文:详解 Spring Boot 中操作 ElasticSearch
  3. gunicorn多进程不死_WEB,gunicorn - 无论是多进程、多线程、协程模式,同一个浏览器窗口多个标签页访问同一个url,看上去不会并发的问题...
  4. 【Apache POI】Java Web根据模板导出word文件
  5. 【PAT甲级 十进制转十三进制】1027 Colors in Mars (20 分) Java版 5/5通过
  6. DNN结构:CNN、LSTM/RNN中的Attention结构
  7. 利用两款软件实现图片转文字
  8. windows 批处理 for循环语句
  9. LiveRTMP之MP4文件进行rtmp点播直播推送(三)
  10. docker 服务器重启 镜像丢失_将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定...
  11. 啊哈C语言 第5章 好戏在后面(第24-25讲)
  12. OpenCV:图像检索
  13. JMeter(三):后置处理器[Regular Expression Extractor]
  14. SDK “iphoneos“ cannot be located
  15. Derivation of Linear Regression with Multiple Variables
  16. 这五款特别的蓝牙芯,哪款最合你应用
  17. Linux下riscv-openocd调试环境搭建
  18. 服务器部署MySQL过程
  19. 离散题目13(判断自反关系)
  20. 用原生js实现淘宝详情页图片放大镜效果

热门文章

  1. Adaboost新理解
  2. zabbix 自动化之网络发现
  3. Windows Server 2012 R2 VDI系列(八)—发布RemoteDesktop
  4. checkbox-复选框
  5. Windows Mobile下猜数字游戏的TDD实现
  6. EIGRP路由协议的简单理解及应用
  7. C# -- 冒泡排序
  8. 自定义ActionBar
  9. iOS开发者联系 联系方式
  10. Kubernetes面试题