axis1发布方式

来源:互联网 发布:淘宝网重复铺货 编辑:程序博客网 时间:2024/06/05 03:41

axis中发布服务主要有两种方式

  • 即时发布JWS
  • 定制发布WSDD

即时发布JWS,你可以从上两篇文章中看到了。由于限制过大(带包的类),一般不常用。但即时发布比较简单,对于初学者还是有必要的,学习本来就是个循序渐进的过程。

主要简单讲下第二种发布方式:定制发布WSDD

eclipse项目截图


第一步、编写接口Hello.java,HelloImpl实现类

Hello.java

[java] view plaincopy
  1. package com.bing.inter;  
  2. public interface Hello {  
  3.     public String sayHello(String name);  
  4. }  

HelloImpl.java
[java] view plaincopy
  1. package com.bing.inter.impl;  
  2.   
  3.   
  4. import com.bing.inter.Hello;  
  5.   
  6. public class HelloImpl implements Hello {  
  7.   
  8.     @Override  
  9.     public String sayHello(String name) {  
  10.         return "你好,"+name;  
  11.     }  
  12. }  
第二步、在src目录下helloImpl.wsdd,内容如下

[html] view plaincopy
  1. <deployment xmlns="http://xml.apache.org/axis/wsdd/"  
  2.     xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">  
  3.     <service name="helloWS" provider="java:RPC">  
  4.      <parameter name="wsdlTargetNamespace" value="http://HelloImpl.impl.inter.bing.com/"/>  
  5.         <parameter name="className" value="com.bing.inter.impl.HelloImpl"/>  
  6.         <parameter name="allowedMethods" value="sayHello"/>  
  7.          <operation name="sayHello" qname="operNS:sayHello"   
  8.                  xmlns:operNS="http://HelloImpl.impl.inter.bing.com/"   
  9.                  returnQName="retNS:AddResult"   
  10.                  xmlns:retNS="http://HelloImpl.impl.inter.bing.com/"   
  11.                  returnType="rtns:String"   
  12.                  xmlns:rtns="http://www.w3.org/2001/XMLSchema" >  
  13.         <parameter qname="pns:A" xmlns:pns="http://HelloImpl.impl.inter.bing.com/"   
  14.                    type="tns:String" xmlns:tns="http://www.w3.org/2001/XMLSchema"/>  
  15.       </operation>  
  16.     </service>  
  17. </deployment>  

说明:

第3行,HelloWS是发布的名字,可以自定义。

第4行,设置自定义命名空间,我这里是按照包路径反着定义的。 (其实axis2就是这么定义命名空间的)

第5行,value的值为HelloImpl的类路径

第6行,指定这个服务允许别人访问的方法名,这里只让访问sayHello,如果改成*号,则这个类所有    public的方法都能被客户端调用。

第7行-第15行,设置sayHello的输入参数,返回类型。因为返回类型是String,

                          注意的重点地方,第11,第14行String类型。其中的命名空间和上面保持一致,其他的参数设置,

                         qname="operNS:sayHello"   returnQName="retNS:AddResult"    qname="pns:A 我是自定义的。参考axis1自带的例子,

                       (axis1自带的例子,是个很好的资料,建议学习下。)

第三步、设置axis1环境变量。


设置AXIS_HOME=C:\axis-1_4

AXIS_LIB=%AXIS_HOME%\bin


或者编写.bat文件.在C:\tomcat\tomcat6\webapps\axis 目录下新建hello.bat

内容如下:

[plain] view plaincopy
  1. set Axis_Lib=C:\axis-1_4\lib     
  2. set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%      
  3. set Axis_Servlet=http://localhost:9080/axis/servlet/AxisServlet      
  4. %Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% helloImpl.wsdd  
  5. pause  

说明:

第3行:是你本地的tomcat的axis地址URL

第4行,-l 代表: sets the AxisServlet URL

         -l<url>         sets the AxisServlet URL
        -h<hostName     sets the AxisServlet host
        -p<portNumber>  sets the AxisServlet port
        -s<servletPath> sets the path to the AxisServlet
        -f<fileName>    specifies that a simple file protocol should be used
        -u<username>    sets the username
        -w<password>    sets the password
        -d              sets the debug flag (for instance, -ddd would set it to
        -t<name>        sets the transport chain touse


把helloImpl.wsdd复制到C:\tomcat\tomcat6\webapps\axis 目录中

把Hello.class,HelloImpl.class。即上图中bulid目录下classes/com目录复制到C:\tomcat\tomcat6\webapps\axis\WEB-INF\classes(可删除其他没有调用的类。只保留Hello.class,HelloImp.class)

然后cd到 C:\tomcat\tomcat6\webapps\axis,目录,执行hello.bat


发布成功!在C:\tomcat\tomcat6\webapps\axis\WEB-INF目录下,多了一个server-config.wsdd。

访问:http://localhost:9080/axis/services/helloWS?wsdl

第四步、客户端测试代码

             

[java] view plaincopy
  1. package com.bing.test;  
  2.   
  3. import org.apache.axis.client.Call;  
  4. import org.apache.axis.client.Service;  
  5.   
  6. public class TestHello2 {  
  7.     public static void main(String[] args){  
  8.         Service service=new Service();  
  9.         String url="http://localhost:9080/axis/services/helloWS?wsdl";  
  10.         try {  
  11.             Call call=(Call)service.createCall();  
  12.             call.setTargetEndpointAddress(url);  
  13.             call.setOperation("sayHello");  
  14.             System.out.println(call.invoke(new Object[]{"大兵哥"}));  
  15.         } catch (Exception e) {  
  16.             e.printStackTrace();  
  17.         }  
  18.     }  
  19. }  

打印结果:你好,大兵哥


若出现警告:

警告: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.

缺少mail-1.4.jar包(可从tomcat中lib目录中复制)。把它放在eclipse项目axis1的lib目录下即可。


若要不发布,可编写undeploy.wsdd,unhello.bat内容分别如下

[html] view plaincopy
  1. <undeployment name="test" xmlns="http://xml.apache.org/axis/wsdd/">  
  2.   <service name="urn:helloWS"/>  
  3. </undeployment>  
[plain] view plaincopy
  1. set Axis_Lib=C:\axis-1_4\lib     
  2. set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%      
  3. set Axis_Servlet=http://localhost:9080/axis/servlet/AxisServlet      
  4. %Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% undeploy.wsdd  
  5. pause  

0 0