Apache-Axis小结
以前用过axis, 不过好久不弄, 有忘记了。很多很多东西放在收藏夹里面, 但是长时间不去看,结果就是还是不熟悉!现在再简单总结一下吧。
Axis开发服务器端webservice其实很简单。
1 下载引入axis相关jar。
2 新建javaweb项目axis,取名最好就是axis,否则可能报错或者访问无返回, 具体为什么, 没有研究。
然后,引入axis jar
3 web.xml加入:
<listener> <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class> </listener> <servlet> <servlet-name>AxisServlet</servlet-name> <display-name>Apache-Axis Servlet</display-name> <servlet-class> org.apache.axis.transport.http.AxisServlet </servlet-class> </servlet> <servlet> <servlet-name>AdminServlet</servlet-name> <display-name>Axis Admin Servlet</display-name> <servlet-class> org.apache.axis.transport.http.AdminServlet </servlet-class> <load-on-startup>100</load-on-startup> </servlet>
<servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
<!-- uncomment this if you want the admin servlet -->
<!--
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/servlet/AdminServlet</url-pattern>
</servlet-mapping>
-->
和
<servlet> <servlet-name>SOAPMonitorService</servlet-name> <display-name>SOAPMonitorService</display-name> <servlet-class> org.apache.axis.monitor.SOAPMonitorService </servlet-class> <init-param> <param-name>SOAPMonitorPort</param-name> <param-value>5001</param-value> </init-param> <load-on-startup>100</load-on-startup> </servlet> <servlet-mapping> <servlet-name>SOAPMonitorService</servlet-name> <url-pattern>/SOAPMonitor</url-pattern> </servlet-mapping>
同web.xml目录增加 server-config.wsdd 表示对外提供的webservice, 这个wsdd是axis自带的,一般包含AdminService 、Version 两个webservice。
两个不可去掉,Adminservice 用来部署其他一些webservice用的。
3 部署axis项目,启动tomcat,访问 http://localhost:8080/axis/services。
可以看到刚刚的两个webservice, 同时客户端可以对它进行访问。
4 部署其他webservice。
首先:服务端(当前项目axis中)建立一个简单的java类:
public class HelloWorld { public String sayHello() { return "HELLO WORLD!"; } }
然后:同样的,我们需要在web.xml目录提供我们的wsdd:myWS.wsdd,以让axis检查到。 wsdd的描述主要是:
deployment>service>parameter 这样的结构。 service就是表达对外的服务,通常其为服务端(当前项目axis中)一个简单的java类,里面只要提供public方法即可。
<?xml version="1.0" encoding="UTF-8"?> <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="SMSendService" provider="java:RPC"> <parameter name="className" value="com.smns.SMSender"/> <parameter name="allowedMethods" value="*"/> </service> <service name="HelloService" provider="java:RPC"> <parameter name="className" value="HelloWorld"/> <parameter name="allowedMethods" value="*"/> </service> </deployment>
一个wsdd里面可以部署多个webservice
再次:
在在web.xml同目录打开命令行,执行下面命令, 将我们新写的webservice部署上。
java -cp D:\ws\la\axis\WebRoot\WEB-INF\lib\activation.jar;D:\ws\la\axis\WebRoot\WEB-INF\lib\axis-ant.jar;D:\ws\la\axis\WebRoot\WEB-INF\lib\axis.jar;D:\ws\la\axis\WebRoot\WEB-INF\lib\commons-discovery-0.2.jar;D:\ws\la\axis\WebRoot\WEB-INF\lib\commons-logging-1.0.4.jar;D:\ws\la\axis\WebRoot\WEB-INF\lib\jaxrpc.jar;D:\ws\la\axis\WebRoot\WEB-INF\lib\log4j-1.2.8.jar;D:\ws\la\axis\WebRoot\WEB-INF\lib\mailapi.jar;D:\ws\la\axis\WebRoot\WEB-INF\lib\saaj.jar;D:\ws\la\axis\WebRoot\WEB-INF\lib\wsdl4j-1.5.1.jar;D:\ws\la\axis\WebRoot\WEB-INF\lib\xmlsec-1.4.2.jar;D:\ws\la\axis\WebRoot\WEB-INF\lib\xml-apis-2.6.2.jar;D:\ws\la\axis\WebRoot\WEB-INF\lib\mail.jar org.apache.axis.client.AdminClient -1http://localhost:8080/axis/services/AdminService myWS.wsdd
注:此时,tomcat应该已经启动了,否则无法通过Adminservice部署新的服务。
然后重新访问 http://localhost:8080/axis/services会发现我们的webservice已经部署上了!
当然, 我想还有其他方式部署webservice
然后呢,服务端的webservice就写好了!!
客户端:
Axis同时提供一些客户端api对其webservice进行访问。
首先:创建客户端的java项目(不一定的java项目,只要是java程序即可):TestAxis。
public static void main(String [] args) throws Exception { String endpoint = "http://localhost:" +"8080"+ "/axis/services/HelloService "; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new java.net.URL(endpoint) ); call.setOperationName("sayHello" ); String res = (String) call.invoke( new Object[] {} ); System.out.println( res ); }
执行,即可看到结果HELLO WORLD! 当然,这个是客户端的结果。 服务端的结果则由服务端决定。
参考:http://www.cnblogs.com/mingzi/archive/2009/03/09/1406839.html
相关文章
- 深入浅出Mesos(六):亲身体会Apache Mesos
- 【Mybatis异常】 org.apache.ibatis.binding.BindingException: Parameter 'storeId' not found. Available parameters are [form, param1]
- MyEclipse启动Tomcat报错:Could not find the main class: org.apache.catalina.startup
- Apache Kafka Producer For Beginners
- PHP快速入门 如何配置Apache服务器
- org.apache.subversion.javahl.ClientException: svn: E200007: Commit failed
- Apache Flink 1.10.0 发布 | 云原生生态周报 Vol. 38
- Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)[原创]
- 【APACHE MINA2.0开发之二】自定义实现SERVER/CLIENT端的编解码工厂(自定义编码与解码器)!
- CVE-2021-44228-Apache-Log4j-Rce漏洞反弹win&linux
- Apache Hive-1.2.1 Manual Patch and Compile
- Centos设置开机启动Apache和Mysql[总结]
- The APR based Apache Tomcat Native library which allows optimal performance in production 问题的解决
- java.lang.NullPointerException at java.lang.ProcessBuilder.start(Unknown Source) at org.apache.hadoop.util.Shell.runCommand(Shell.java:482)
- Cloudera公司主要提供Apache Hadoop开发工程师认证
- 【异常】IDEA中Maven插件提示异常Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin
- 05 - vulhub - Apache HTTPD 换行解析漏洞(CVE-2017-15715)