Java调用WebService的ASMX接口的使用步骤如下:
步骤1:生成Java类
在Java调用WebService接口之前,我们需要先生成Java类用于调用WebService。在传统的方式中,我们需要使用wsimport工具来生成Java类,如下所示:
wsimport -d . -keep http://localhost:8080/xxx?wsdl
这个命令会根据提供的WSDL文件,从远端WebService服务器下载相关资源并生成Java类。
步骤2:调用WebService
在生成Java类之后,我们需要调用WebService接口。Java提供了两种方式可以轻松地实现WebService的调用。
方式一:使用JAX-WS API进行调用
JAX-WS API是Java SE 6以及之后版本自带的Java API,在开发的时候无需使用第三方库就可以直接使用。使用JAX-WS API进行Java调用WebService接口的代码如下:
URL url = new URL("http://localhost:8080/xxx?wsdl");
QName qname = new QName("http://webService.xxx.com/", "xxxWebServiceImplService");
Service service = Service.create(url, qname);
xxxWebServiceService port = service.getPort(xxxWebServiceService.class);
port.xxxMethod();//调用WebService方法
在调用远程WebService方法之前需要设置Service的地址和端口,并通过该Service获取具体的WebService端口实例。
方式二:使用Apache Axis2进行调用
Apache Axis2是一个轻量级的开源Web服务框架,提供了Java调用WebService接口的实现,并在性能,稳定性上有很大优势。使用Axis2调用WebService的代码如下:
//1.创建RPCServiceClient对象并指定WebService的地址
RPCServiceClient serviceClient=new RPCServiceClient();
EndpointReference targetEPR=new EndpointReference("http://localhost:8080/xxx");
Options options=serviceClient.getOptions();
options.setTo(targetEPR);
//2.设置WebService的方法参数
Object[] objs=new Object[]{"java"};
//3.调用WebService方法并获取返回值
Class[] retTypes=new Class[]{String.class};
QName opAddEntry=new QName("http://webService.xxx.com/", "xxxMethod");
Object[] response=serviceClient.invokeBlocking(opAddEntry, objs, retTypes);
String result=(String)response[0];
在调用时需要创建RPCServiceClient对象,设置WebService的地址,方法参数以及调用WebService方法并获取返回值。
示例1:调用远程WebService方法
如下示例中,我们访问的WebService接口是一个简单的字符串拼接方法,从参数可以拼出一个完整字符串,并返回该字符串。
@WebService
public class StringService {
@WebMethod
public String appendString(String str1, String str2) {
return str1 + str2;
}
}
我们同样按照步骤1进行了Java类的生成,生成了StringService类。使用方式一的代码调用示例如下:
URL url = new URL("http://localhost:8080/StringService?wsdl");
QName qname = new QName("http://webservicesamples.com/", "StringService");
Service service = Service.create(url, qname);
StringService stringService = service.getPort(StringService.class);
//调用WebService方法
String result = stringService.appendString("Hello", "World");
System.out.println(result);
使用方式二的代码调用示例如下:
//1.创建RPCServiceClient对象并指定WebService的地址
RPCServiceClient serviceClient=new RPCServiceClient();
EndpointReference targetEPR=new EndpointReference("http://localhost:8080/StringService");
Options options=serviceClient.getOptions();
options.setTo(targetEPR);
//2.设置WebService的方法参数
Object[] paras={new String("Hello"),new String("World")};
//3.调用WebService方法并获取返回值
Class[] retType=new Class[]{String.class};
QName qname1=new QName("http://webservicesamples.com/","appendString");
Object[] results=serviceClient.invokeBlocking(qname1,paras,retType);
String result=(String)results[0];
System.out.println(result);
示例2:传输复杂参数
如下所示的WebService方法接受一个Java对象作为参数,从中获取各个属性并将这些属性拼凑成一个完整的字符串返回:
@WebService
public class ComplexService {
@WebMethod
public String appendString(ComplexObj obj) {
return obj.getStr1() + obj.getStr2() + obj.getStr3();
}
}
@XmlRootElement(name = "ComplexObj")
@XmlAccessorType(XmlAccessType.FIELD)
public class ComplexObj {
private String str1;
private String str2;
private String str3;
//getter and setter
}
我们同样按照步骤1进行了Java类的生成,生成了ComplexService类与ComplexObj类。使用方式一的代码调用示例如下:
URL url = new URL("http://localhost:8080/ComplexService?wsdl");
QName qname = new QName("http://webservicesamples.com/", "ComplexService");
Service service = Service.create(url, qname);
ComplexService complexService = service.getPort(ComplexService.class);
//构造Java对象作为WebService的参数
ComplexObj obj = new ComplexObj();
obj.setStr1("Hello");
obj.setStr2("World");
obj.setStr3("Java");
//调用WebService方法
String result = complexService.appendString(obj);
System.out.println(result);
使用方式二的代码调用示例如下:
//1.创建RPCServiceClient对象并指定WebService的地址
RPCServiceClient serviceClient=new RPCServiceClient();
EndpointReference targetEPR=new EndpointReference("http://localhost:8080/ComplexService");
Options options=serviceClient.getOptions();
options.setTo(targetEPR);
//2.构造Java对象作为WebService的参数
ComplexObj obj=new ComplexObj();
obj.setStr1("Hello");
obj.setStr2("World");
obj.setStr3("Java");
Object[] paras={obj};
//3.调用WebService方法并获取返回值
Class[] retType=new Class[]{String.class};
QName qname1=new QName("http://webservicesamples.com/","appendString");
Object[] results=serviceClient.invokeBlocking(qname1,paras,retType);
String result=(String)results[0];
System.out.println(result);
以上就是Java调用WebService的ASMX接口的完整攻略,包含了生成Java类,以及使用两种方式进行WebService调用的代码示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java调用webservice的.asmx接口的使用步骤 - Python技术站