传智播客Web Service学习,用于web service实现的两个主要的框架axis和xfire.

   今天继续学习web service,王老师讲了web service中使用的wsdl(网络服务描述语言)和用于web service实现的两个主要的框架,axis,xfire.王老师提到。axis技术要早,比较成熟和稳定。xfire在新的软件系统中比较常用。
   Web Services 技术
SOAP    它把成熟的基于HTTP的WEB技术与XML的灵活性和可扩展性组合在了一起。HTTP用于实现SOAP的RPC风格的
传输,而XML是它的编码模式。一个SOAP请求的HTTP体是一个XML文档,它包含方法中[in]和[in,out]参数的值。这些值被编码成为一个显著的调用元素的子元素,这个调用元素具有SOAPMethodNameHTTP头的方法名和名域URI。调用元素必须出现在标准的SOAP<Envelope> 和<Body>元素内,SOAP的XML特性是为把数据类型的实例序列化成XML的编码模式。
    WSDL是 “网络服务描述语言 (Web Services Description Language)”的缩写。它是为自如地表述多种类型的网络服务
而设定,可以用于描述 SOAP 网络服务。 一个 WSDL 文件不过就是一个文件。更具体地讲,是一个 XML 文件。通常存储于你所访问的 SOAP 网络服务这个被描述对象所在的服务器上。
在 WSDL 文件中描述了调用相应的 SOAP 网络服务的一切:

  服务 URL 和命名空间
  网络服务的类型 (可能是 SOAP 的函数调用,但我说过,WSDL 足够自如地去  描述网络服务的广泛内容)
  有效函数列表
  每个函数的参数
  每个参数的类型
  每个函数的返回值及其数据类型
换言之,一个 WSDL 文件告诉你调用 SOAP 所需要知道的一切。

 

axis 安装配置
安装JDK
安装并配置Tomcat
从官方网站
http://ws.apache.org/axis下载最新的Axis项目打包文件,并将webapps下axis目录拷贝到Tomcat的webapps

目录下
验证Axis的安装,发布一个服务,浏览所发布的服务。
   即时发布
使用即时发布首先需要一个实现服务功能的Java源文件,将其扩展名改为.jws (Java Web Service的缩写),然后将该
文件放到Tomcat下面的webapps/axis目录下即可。但是JWS的web服务发布是一个很简单的Web服务发布方式,在页面中你不能使用包,而且由于代码是在运行期被编译的,所以在部署之后,你也很难找到错误所在。
   定制发布
编写要发布为服务的java类
编译生成的class文件应该放在Tomcat下的webapps/axis/WEB-INF/classes/下面编写deploy.wsdd 文件描述服务的名称,入口等信息切换到命令航下,执行
  java org.apache.axis.client.AdminClient deploy.wsdd
  服务器端发布以后,客户端就可以调用其服务了,客户端的调用有三种方式
  1.DLL动态接口调用方式(Dynamic Invocation Interface)
  2.动态代理方式(Dynamic Proxy)
  3.静态方式 (Stubs)
当前主流的两种web service技术是axis和xfire,先看一下axis的这三种方式的服务调用,ddl方式
  public static void main(String [] args) {
       try {
           String endpoint =
                    "
http://localhost:8080/axis/services/test1";
           //实例化一个服务对象service
           Service  service = new Service();
          
          //创建一个空的调用对象Call,设置Call的操作名称,目标地址,传入参数等等
           //执行调用后即可得到返回的结果
           Call     call    = (Call) service.createCall();
           call.setTargetEndpointAddress( new java.net.URL(endpoint) );
           //QName读取节点   "
http://soapinterop.org/"是namespace
           call.setOperationName(new QName("
http://soapinterop.org/", "add3") );

           Integer ret = (Integer) call.invoke( new Object[] { 1,3 } );

           System.out.println( ret);
       } catch (Exception e) {
           System.err.println(e.toString());
       }
   }

动态代理方式
动态代理需要一个本地的接口作为代理
public interface ITestDynameicProxy extends Remote {
     public String getMessage() throws RemoteException;
}

public static void main(String[] args) throws Exception {
     String wsdlUrl = "
http://localhost:8080/axis/test/Test.jws?wsdl";
     String nameSpaceUri = "
http://soapinterop.org/";
     String serviceName = "Test1Service";
     String portName = "Test1";
     ServiceFactory serviceFactory = ServiceFactory.newInstance();
     Service service = serviceFactory.createService(
      new URL(wsdlUrl), new QName(nameSpaceUri,serviceName));
     //创建代理
     ITestDynameicProxy proxy = (ITestDynameicProxy)service.getPort(
       new QName(nameSpaceUri,portName),ITestDynameicProxy.class);
     System.out.println(proxy.getMessage());
}
    通过输入wsdl地址,命名空间地址和服务名,用服务工厂创建出一个服务实例,再通过设置端口名得到一个服务类

型的服务代理对象,通过该代理,就可以直接访问web服务了。
    静态方式:
按常规方式发布一个web service
得到wsdl文件
通过web页面直接另存为
通过Java2WSDL工具类生成
(java org.apache.axis.wsdl.Java2WSDL -o demo1.wsdl -l
http://localhost:8080/axis/services/demo -n

http://www.itcast.cn/   test.Demo)
利用WSDL2Java工具类生成客户端调用代码
(java org.apache.axis.wsdl.WSDL2Java demo.wsdl -p client)
在生成的代码基础上,进行客户端的调用 
     public static void main(String[] args) throws ServiceException, RemoteException {
 DemoServiceLocator demoService = new DemoServiceLocator();
 Demo demo = demoService.getdemo();
 System.out.println(demo.getMessage());
 }
xfire类似Axis,也有三种客户端调用的方式
     dll方式
 public static void main(String[] args) throws MalformedURLException,
  Exception {
   Client client = new Client(
      new URL("
http://localhost:8080/xfire/services/HelloWorld?wsdl"));
   Object[] results = client.invoke("example", new Object[] { "name" });
   System.out.println((String) results[0]);
}
动态代理方式,这也是要学习的银联项目中要用到的

public static void main(String[] args) {
//1-制造一个service对象,来利用web service所提供的服务
Service service = new ObjectServiceFactory().create(firstPortType.class);
//2-制作一个XFire的代理工厂,有了代理之后,调用web service的方法就好像是在本地进行调用了
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
//3-获取web service提供服务的网址
String sayHelloURL = "
http://localhost:8080/axis/services/Version";
//4-开始使用web service
try {
firstPortType test = (firstPortType)factory.create(service, sayHelloURL);
String str = test.getVersion();
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值