惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CERT Recently Published Vulnerability Notes
U
Unit 42
T
The Blog of Author Tim Ferriss
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Securelist
L
Lohrmann on Cybersecurity
Blog — PlanetScale
Blog — PlanetScale
Recorded Future
Recorded Future
D
DataBreaches.Net
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
I
Intezer
P
Palo Alto Networks Blog
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
I
InfoQ
宝玉的分享
宝玉的分享
Security Latest
Security Latest
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Threatpost
Cisco Talos Blog
Cisco Talos Blog
P
Proofpoint News Feed
博客园 - 司徒正美
H
Hacker News: Front Page
Y
Y Combinator Blog
爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
NISL@THU
NISL@THU
月光博客
月光博客
有赞技术团队
有赞技术团队
Cloudbric
Cloudbric
酷 壳 – CoolShell
酷 壳 – CoolShell
G
Google Developers Blog
A
Arctic Wolf
博客园 - 【当耐特】
W
WeLiveSecurity
V
Visual Studio Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
V
V2EX
C
Cyber Attacks, Cyber Crime and Cyber Security
S
SegmentFault 最新的问题
The GitHub Blog
The GitHub Blog
The Cloudflare Blog
Stack Overflow Blog
Stack Overflow Blog

博客园 - 黄金海岸

sqlite3环境配置-初始篇 linux-vi备查 QT设计之编译 QT设计之Designer H3C交换机配置命令大全 sqlite3小试牛刀 - 黄金海岸 - 博客园 sqlite3环境配置 在Visual C++ 中调用Excel 2000 软件配置管理-团队开发的基石 VC常用数据类型使用转换详解(转载) vb和vc混合编程实例(ocx和dll) (转载) VC++中使用ADO方式操作ACCESS数据库(转载) 同行评审过程描述(四)——测量 同行评审过程描述(三)——走查步骤 同行评审过程描述(二)——评审步骤 同行评审过程描述(一)——概述(转载) Bugzilla windows安装红宝书(转载) 单元测试 单元测试的基本方法
利用 AXIS开发Webservice(一) —— 如何发布自己的webservice(转)
黄金海岸 · 2010-07-06 · via 博客园 - 黄金海岸

利用AXIS开发Webservice(一) —— 如何发布自己的webservice

关键字: webservice axis wsdl 教程

       因为工作关系需要从事Webservice的开发工作,公司的webserivce是由Apache的AXIS来实现的,以前对这个了解不算多,不过经 过几天的研究,特奉上小小的心得一篇。

        先介绍下本人开发环境吧。 JDK 1.4.2 + Myeclipse 6.0(实在经不起诱惑,尝尝鲜) + Tomcat 5.0.28 + AXIS 1.4。 AXIS 1.4包可以在http://ws.apache.org/axis/ 找到。 假设所有的环境你已经搭好,并且AXIS包也已经下好了。OK, Here we go~

         解压axis-bin-1_4.zip这个包可以看到webapps目录,双击进入把里面的AXIS文件夹拷到 %TOMCAT_HOME%\webapps目录下,之后拷贝activation.jar、mail.jar、tools.jar 到%TOMCAT_HOME%\webapps\axis\WEB-INF\lib目录下。启动tomcat,访问http://localhost:8080/axis/happyaxis.jsp  如果访问成功,恭喜你!基本的配置你已经做完了。

PS:此处的%TOMCAT_HOME%指的是Tomcat的安装目录,至于那另外的三个jar包,J2EE 1.4库里就能找的到。

        现在来说一下最关键的Webservice的发布。AXIS提供了两种发布方式,一种是即时发布(Instant Deployment),另外一种是定制发布(Custom Deployment)。即时发布提供了一种非常简单的webservice的发布方式,但是其中限制太多,因此在实际的开发中定制发布才是首选。这里也 将会以定制发布为重点来介绍。

     1.即时发布 JWS (Java Web Service) Files - Instant Deployment     

    即时发布提供了一种非常简单发布方式,发布者只要有Java源代码(也就是.java文件),然后把其后缀名改成jws(也就是 java web service的缩写)拷贝到%TOMCAT_HOME%\webapps\axis目录下即完成了所有的发布工作。AXIS的编译引擎会处理接下来的所 有事情。下面是一段示例代码:

java 代码

  1. public   class  HelloAXIS {   
  2.        
  3.      public  String Hello(String name){   
  4.          return   "AXIS say hello to "  + name;   
  5.     }   
  6. }  

        把 HelloAXIS.java 文件改成 HelloAXIS.jws 然后拷贝到%TOMCAT_HOME%\webapps\axis目录下,启动Tomcat之后访问 http://localhost:8080/axis/HelloAXIS.jws  如果能看到 Click to see the WSDL这个超链接就说明已经发布成功了,点击进去就可以看到这个Webservice的WSDL描述文件。server端的发布已经完成了,接下来就是 编写Client端测试代码了。

java 代码

  1. package  com.chnic.test;   
  2.   
  3. import  java.net.URL;   
  4.   
  5. import  javax.xml.namespace.QName;   
  6.   
  7. import  org.apache.axis.client.Call;   
  8. import  org.apache.axis.client.Service;   
  9.   
  10. public   class  Test {   
  11.        
  12.      public   static   void  main(String[] args)  throws  Exception{   
  13.         String targetEendPoint =  "http://localhost:8080/axis/HelloAXIS.jws" ;   
  14.         Service service =  new  Service();   
  15.         Call call = (Call) service.createCall();               
  16.         call.setOperationName( new  QName(targetEendPoint,  "Hello" ));   
  17.         call.setTargetEndpointAddress( new  URL(targetEendPoint));   
  18.         String result = (String) call.invoke( new  Object[]{ "Robert" });   
  19.         System.out.println(result);   
  20.     }   
  21. }   

       测试代码很简单,如果熟悉java反射机制的朋友不用两分钟就能看明白。运行后客户端控制台出现 AXIS say hello Robert。测试成功。果然很简单吧。不过在这简单背后却是以牺牲灵活性为代价的。假如你现在手里只有.class 或者一个jar包,jws就不再能满足你的需求了,最要命的就是即时发布不支持带包的类,这点AXIS的用户手册上写的也很明白。

 Important: JWS web services are intended for simple web services. You cannot use packages in the pages, and as the code is compiled at run time you can not find out about errors until after deployment. Production quality web services should use Java classes with custom deployment.

      2.定制发布 Custom Deployment - Introducing WSDD

      比起即时发布定制发布更加烦琐也更复杂,但是换来的却是更大的灵活性,因此在实际项目中定制发布还是不二的选择。定制发布需要你自己 编写一个WSDD(Web Service Deployment Descriptor)文件,这个东东类似与XML稍后会做出介绍。废话不多说,我们来看代码:

java 代码

  1. package  com.chnic.webservice;   
  2.   
  3. public   class  HelloWorld {   
  4.        
  5.      public  HelloWorld(){   
  6.            
  7.     }   
  8.        
  9.      public  String hello(String str){   
  10.          return   "Hello "  + str;   
  11.     }   
  12.        
  13.      public   int  add( int  a,  int  b){   
  14.          return  a + b;   
  15.     }   
  16.        
  17. }   

        一个带包的很简单的类,在eclipse下编译后按照包名拷到 %TOMCAT_HOME%\webapps\axis\WEB-INF\classes 目录下。以这个类为例,拷贝完之后这个HelloWorld.class的路径就是 %TOMCAT_HOME%\webapps\axis\WEB-INF\classes\com\chnic\webservice。 PS: 如果嫌这样太麻烦,可以另外建一个Java Web工程用myeclipse的发布工具发布到Tomcat之后,整体一次性拷贝到websericve的工程中。

       接下来就需要编写发布文件deploy.wsdd。到%TOMCAT_HOME%\webapps\axis\WEB-INF 目录下建立这个文件并在其中添加如下内容:

xml 代码

  1. < deployment   xmlns = http://xml.apache.org/axis/wsdd/  
  2.             xmlns:java = "http://xml.apache.org/axis/wsdd/providers/java" >   
  3.        
  4.      < service   name = "HelloWorld"   provider = "java:RPC" >   
  5.          < parameter   name = "className"   value = "com.chnic.webservice.HelloWorld" />   
  6.          < parameter   name = "allowedMethods"   value = "*" />        
  7.     </ service >   
  8. </ deployment >   

       简单的介绍下各个节点的含义,"HelloWorld"当然是这个webservice的名字,后面紧跟的java:RPC指的是服务类型。这里一共有有 4种类型,分别是:RPC, Document, Wrapped 和 Message。有兴趣可以看下 org.apache.axis.providers这个包和子包下面的类的API文档。之后 的parameter节点第一个当然是指出具体的类,第二个从字面上也很好理解:允许调用的方法。这里的配置告诉引擎可以调用所有的public方法,当 然你也可以自己指定。

     编写完配置发布文件之后,cmd打开windows的控制台,进入%TOMCAT_HOME%\webapps\axis\WEB-INF目录下键入如下命令  

  1. java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd  

       之后控制台返回Processing file deploy.wsdd 和 Done processing 这两段话即说明发布成功。(此时会在同级目录生成一个server- config.wsdd文件 )在这里的AdminClient是AXIS提供的一个客户端管理工具。至于java.ext.dirs的含义可以去了解一下classloader和 JVM类装载机制方面的知识,在这里就不多解释。 还有一点要注意的是在发布的时候Tomcat服务必须处于启动状态,否则就会抛出一堆无法连接的异常信 息。发布成功之后你可以通过访问 http://localhost:8080/axis/servlet/AxisServlet 来查看你所有的定制发布的服务。

客户端测试代码

  1. String targetEendPoint =  "http://localhost:8080/axis/services/HelloWorld" ;   
  2. Service service =  new  Service();   
  3. Call call = (Call) service.createCall();   
  4. call.setTargetEndpointAddress( new  URL(targetEendPoint));   
  5.   
  6. call.setOperationName( new  QName(targetEendPoint,  "hello" ));        
  7. String result = (String) call.invoke( new  Object[]{ "Robert" });   
  8. System.out.println(result);   
  9.   
  10. call.setOperationName( new  QName(targetEendPoint,  "add" ));   
  11. Integer res = (Integer) call.invoke( new  Object[]{ new  Integer( 1 ),  new  Integer( 2 )});   
  12. System.out.println( "The result is: "  + res);  

       运行测试代码,控制台显示 Hello Robert 和 The result is: 3 这两句话,说明发布成功。仔细观察下发现其实除了那个targetEndpoint 之外,即时发布和定制发布的客户端调用代码基本上都是一样的。定制发布的URL可以在WSDL文件里找到。  其实定制发布还有一些高级特性,这个就留到下一篇再说吧。

       本文源自:http://chnic.javaeye.com/blog/127343