java调⽤webservice接⼝⼏种⽅法
webservice的 发布⼀般都是使⽤WSDL(web service descriptive language)⽂件的样式来发布的,在WSDL⽂件⾥⾯,包含这个webservice暴露在外⾯可供使⽤的接⼝。今天搜索到了⾮常好的 webservice provider列表
这上⾯列出了70多个包括很多⽅⾯的free webservice provider,utilities->global weather就可以获取全球的天⽓预报。
下⾯我们来看Java如何通过WSDL⽂件来调⽤这些web service:
注意,以下的代码并没有经过真正的测试,只是说明这些情况,不同版本的Axis相差很⼤,⼤家最好以apache⽹站上的例⼦为准,这⾥仅仅⽤于说明其基本⽤法。
1,直接AXIS调⽤远程的web service
我觉得这种⽅法⽐较适合那些⾼⼿,他们能直接看懂XML格式的WSDL⽂件,我⾃⼰是看不懂的,尤其我不是专门搞这⾏的,即使⼀段时间看懂,后来也就忘记了。直接调⽤模式如下:
import java.util.Date;
DateFormat;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
l.namespace.QName;
import java.lang.Integer;
l.rpc.ParameterMode;
public class caClient {
public static void main(String[] args) {
try {
String endpoint = "localhost:8080/ca3/services/caSynrochnized?wsdl";
// 直接引⽤远程的wsdl⽂件
/
/ 以下都是套路
Service service = new Service();
Call call = (Call) ateCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName("addUser");// WSDL⾥⾯描述的接⼝名称
call.addParameter("userName",
org.ding.XMLType.XSD_DATE,
call.setReturnType(org.ding.XMLType.XSD_STRING);// 设置返回类型
String temp = "测试⼈员";
String result = (String) call.invoke(new Object[] { temp });
/
/ 给⽅法传递参数,并且调⽤⽅法
System.out.println("result is " + result);
} catch (Exception e) {
}
}
}
2,直接SOAP调⽤远程的webservice
这种模式我从来没有见过,也没有试过,但是⽹络上有⼈贴出来,我也转过来
import org.apache.l.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;
import java.io.*;
import java.*;
import java.util.Vector;
public class caService {
public static String getService(String user) {
URL url = null;
try {
url = new URL(
"192.168.0.100:8080/ca3/services/caSynrochnized");
} catch (MalformedURLException mue) {
Message();
}
// This is the main SOAP object
Call soapCall = new Call();
// Use SOAP encoding
soapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
// This is the remote object we're asking for the price
soapCall.setTargetObjectURI("urn:xmethods-caSynrochnized");
// This is the name of the method on the above object
soapCall.setMethodName("getUser");
// We need to send the ISBN number as an input parameter to the method
Vector soapParams = new Vector();
// name, type, value, encoding style
Parameter isbnParam = new Parameter("userName", String.class, user,
null);
soapParams.addElement(isbnParam);
soapCall.setParams(soapParams);
try {
// Invoke the remote method on the object
Response soapResponse = soapCall.invoke(url, "");
// Check to see if there is an error, return "N/A"
if (atedFault()) {
Fault fault = Fault();
String f = FaultString();
return f;
} else {
// read result
Parameter soapResult = ReturnValue();
// get a string from the result
Value().toString();
}
} catch (SOAPException se) {
Message();
}
}
}
3,使⽤wsdl2java把WSDL⽂件转成本地类,然后像本地类⼀样使⽤,即可。这是像我这种懒⼈最喜欢的⽅式,仍然以前⾯的global weather report为例。那么就会出现4个⽂件:
GlobalWeather.java
GlobalWeatherLocator.java
GlobalWeatherSoap.java
GlobalWeatherSoapStub.java
其中GlobalWeatherSoap.java是我们最为关⼼的接⼝⽂件,如果你对RMI等SOAP实现的具体细节不感兴趣,那么你只需要看接⼝⽂件即可,
在使⽤的时候,引⼊这个接⼝即可,就好像使⽤本地类⼀样。
⼀:webService介绍
1.什么是webService
webService是⼀种使⽤http传输SOAP协议数据的远程调⽤技术
2.webService三要素
SOAP:规范XML标签
WSDL:服务端的使⽤说明书
UDDI:⽬录
⼆:webService⼊门⼩程序
1.服务端
(1)、开发步骤
A、创建接⼝
package com.webservice.jaxws;
public interface WeatherService {
//查询天⽓的⽅法
public String queryWeather(String cityName);
}
B、创建实现类,在实现类上加⼊@WebService注解,该注解的作⽤是标识该实现类是webservice的服务类,发布该实现类中的public⽅法
package com.webservice.jaxws;
import javax.jws.WebService;
/**
* 天⽓查询的实现类
* @author Administrator
*
*/
@WebService
public class WeatherServiceImpl implements WeatherService {
//查询天⽓
public String queryWeather(String cityName) {
System.out.println(cityName + "天⽓是:晴天");
return "晴";
}
}
C、发布服务,使⽤EndPoint类中的publish()⽅法发布,参数分别为服务访问的地址和服务的实现类
package com.webservice.jaxws;
import javax.jws.WebService;
/**
* 天⽓查询的实现类
* @author Administrator
*
*/
@WebService
public class WeatherServiceImpl implements WeatherService {
//查询天⽓
public String queryWeather(String cityName) {
System.out.println(cityName + "天⽓是:晴天");
return "晴";
}
}
D、测试服务是否发布成功,阅读使⽤说明书,确认要调⽤的类、⽅法、参数等
● WSDL访问地址:
● WSDL说明书阅读⽅式:从下往上阅读
E、如何发布SOAP1.2版本的服务端
● 引⼊第三⽅jar包
● 在服务实现类上加⼊注解 @BindingType(SOAPBinding.SOAP12HTTP_BINDING)
package com.webservice.jaxws;
import javax.jws.WebService;
l.ws.BindingType;
l.ws.soap.SOAPBinding;
/**
* 天⽓查询的实现类
* @author Administrator
*
*/
@WebService
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
public class WeatherServiceImpl implements WeatherService {
//查询天⽓
public String queryWeather(String cityName) {
System.out.println(cityName + "天⽓是:晴天");
return "晴";
调用webservice服务}
}
2.客户端
(1)、开发步骤
A、在⼯作空间创建⽤于存放使⽤wsimport命令⽣成的客户端代码的java⼯程
B、使⽤jdk提供的wsimport命令⽣成客户端代码
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论