WSIF 提供了用于调用 Web 服务的 Java API,与调用它所依据的服务格式或转输协议无
关。它处理 WSIF 的目标中确定的所有问题。
WSIF 提供以下功能:
1.具有可对任何 Web 服务进行独立于绑定的访问的 API。
2.它紧密依赖于 WSDL,因此可以调用可在 WSDL 中描述的任何服务。
3.允许对 Web 服务进行无占位程序(完全动态)调用。
4.您可以在运行时将新的或更新的绑定实现插入 WSIF。
5.您可以推迟绑定选择直至运行时。
6.WSIF 是为在非受管环境(单机)和受管容器中工作而设计的。您可以使用 JNDI 来查
找 WSIF 服务,否则将在 WSDL 定义中读取。
在使用WSIF开发相关的web services应用时,需要描述WSDL文档的信息,这也许正是
体现了XML的自描述性。如果开发一个解析wsdl文档的程序,提取相关的方法和参数,然
后在WSIF的程序中调用,这样就形成了一个基于Web Services的自适应的应用。
目前在使用WSIF来制作客户端程序时,可能有一个问题在于用户认证上还存在许多的问题
。其API还没有完善;具体见如下内容:
Uses of Class
org.apache.wsif.wsdl.AuthenticatingProxyWSDLLocatorImpl
No usage of org.apache.wsif.wsdl.AuthenticatingProxyWSDLLocatorImpl
参见一个基于WSIF的client实例:
import org.apache.wsif.WSIFException;
import org.apache.wsif.WSIFMessage;
import org.apache.wsif.WSIFOperation;
import org.apache.wsif.WSIFPort;
import org.apache.wsif.WSIFService;
import org.apache.wsif.WSIFServiceFactory;
import org.apache.wsif.wsdl.AuthenticatingProxyWSDLLocatorImpl;
public class WisfTest{
public static void main(String arg[]){
try{
String url="http://127.0.0.1:7001/axis/services/Version?wsdl";
WSIFServiceFactory factory = WSIFServiceFactory.newInstance();
// AuthenticatingProxyWSDLLocatorImpl awsli=new AuthenticatingProxyWSDLLocatorImpl(url,"gaolong1","19831001");
WSIFService service = factory.getService(url,"http://127.0.0.1:7001/axis/services/Version","VersionService","http://127.0.0.1:7001/axis/services/Version","Version");
//其参数分别代表:WSDL地址参数,Service命名空间参数,WSDL文档中Service名称参数,WSDL文档中的portType命名空间参数,WSDL文档中的portType名称参数
WSIFPort port = service.getPort();
WSIFOperation operation = port.createOperation("getVersion","getVersionRequest",null);
//根据给定的操作名称参数operationName,输入元素名称inputName,输出元素名称outputName.
WSIFMessage input = operation.createOutputMessage();
input.setObjectPart("name","gaolong");
//设置soap消息中part的表现内容
WSIFMessage output = operation.createOutputMessage();
WSIFMessage fault = operation.createFaultMessage();
operation.executeRequestResponseOperation(input,output,fault);
//执行请求和接受响应消息的方法,第一个组作为输入的input消息被发送到服务器端,第二个代表输入响应的信息会在执行后包含着返回的消息,第三个消息用来封装错误和状态消息。
System.out.println(output.getObjectPart("getVersionReturn"));//获得这个soap消息的表现内容
}catch(WSIFException we){
we.printStackTrace();
}
}
}