axis中发布服务主要有两种方式
- 即时发布JWS
- 定制发布WSDD
即时发布JWS,你可以从上两篇文章中看到了。由于限制过大(带包的类),一般不常用。但即时发布比较简单,对于初学者还是有必要的,学习本来就是个循序渐进的过程。
主要简单讲下第二种发布方式:定制发布WSDD
eclipse项目截图
第一步、编写接口Hello.java,HelloImpl实现类
Hello.java
- package com.bing.inter;
- public interface Hello {
- public String sayHello(String name);
- }
HelloImpl.java
- package com.bing.inter.impl;
- import com.bing.inter.Hello;
- public class HelloImpl implements Hello {
- @Override
- public String sayHello(String name) {
- return "你好,"+name;
- }
- }
- <deployment xmlns="http://xml.apache.org/axis/wsdd/"
- xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
- <service name="helloWS" provider="java:RPC">
- <parameter name="wsdlTargetNamespace" value="http://HelloImpl.impl.inter.bing.com/"/>
- <parameter name="className" value="com.bing.inter.impl.HelloImpl"/>
- <parameter name="allowedMethods" value="sayHello"/>
- <operation name="sayHello" qname="operNS:sayHello"
- xmlns:operNS="http://HelloImpl.impl.inter.bing.com/"
- returnQName="retNS:AddResult"
- xmlns:retNS="http://HelloImpl.impl.inter.bing.com/"
- returnType="rtns:String"
- xmlns:rtns="http://www.w3.org/2001/XMLSchema" >
- <parameter qname="pns:A" xmlns:pns="http://HelloImpl.impl.inter.bing.com/"
- type="tns:String" xmlns:tns="http://www.w3.org/2001/XMLSchema"/>
- </operation>
- </service>
- </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
内容如下:
- set Axis_Lib=C:\axis-1_4\lib
- set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
- set Axis_Servlet=http://localhost:9080/axis/servlet/AxisServlet
- %Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% helloImpl.wsdd
- 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
第四步、客户端测试代码
- package com.bing.test;
- import org.apache.axis.client.Call;
- import org.apache.axis.client.Service;
- public class TestHello2 {
- public static void main(String[] args){
- Service service=new Service();
- String url="http://localhost:9080/axis/services/helloWS?wsdl";
- try {
- Call call=(Call)service.createCall();
- call.setTargetEndpointAddress(url);
- call.setOperation("sayHello");
- System.out.println(call.invoke(new Object[]{"大兵哥"}));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
打印结果:你好,大兵哥
若出现警告:
警告: 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内容分别如下
- <undeployment name="test" xmlns="http://xml.apache.org/axis/wsdd/">
- <service name="urn:helloWS"/>
- </undeployment>
- set Axis_Lib=C:\axis-1_4\lib
- set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
- set Axis_Servlet=http://localhost:9080/axis/servlet/AxisServlet
- %Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% undeploy.wsdd
- pause