axis2 容易入手
准备工作:
1.下载了axis2-eclipse-service-archiver-wizard.zip
axis2-eclipse-codegen-wizard.zip
两个eclipse插件,貌似要1.3版本的才能支持在用java类生成wsdl时选择skip wsdl
2.下载axis2-1.4.1和axis2-1.4.1-war
一.简单入门
1.编写服务端代码
package simple; public class HelloService { public String sayHello(String name) { return "Hello, " + name + "."; } public String saySorry(String name) { return "Sorry, " + name + "."; } public String getOk() { return "ok"; } }
2.用axis2-eclipse-service-archiver 生成,new - other,选择axis2 service archiver ,然后进入向导,注意第二步“add the wsdl file”的时候选择“skip wsdl”,最后生成aar。生成的aar已经包含了services.xml。
services.xml内容如下:
<service name="MyService"> <description>Hello world</description> <parameter name="ServiceClass">simple.HelloService</parameter> <operation name="sayHello"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> <operation name="saySorry"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> <operation name="getOk"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </operation> </service>
3.先把下载的axis2.war放到[tomcat_home]\webapps下。启动tomcat解压axis2.war。
然后把刚才生成的aar放在[tomcat_home]\webapps\axis2\WEB-INF\services下,重新启动tomcat
就可以在http://localhost:8888/axis2/services/MyService?wsdl 访问。
4.生成客户端访问。用axis2-eclipse-codegen生成客户端代码。
-------------------------------------------------
如果用插件生成时,有如下错误,java.lang.reflect.InvocationTargetException
,解决办法如下
Axis2_Codegen_Wizard_1.3.0从wsdl生产java客户端代码(首先要保证webservice已经启动)时候出现invocationTargetException,解决办法如下:
stax-api-1.0.1.jar
backport-util-concurrent-3.1.jar
and save them to eclipse/plugins/[Axis2 Codegen Wizard]/lib (replace [Axis2 Codegen Wizard] with the real plugin directory).
2). Add to the eclipse/plugins/[Axis2 Codegen Wizard]/plugin.xml the followings (to the <runtime> element), if they are missing:
<library name="lib/stax-api-1.0.1.jar">
<export name="*"/>
</library>
<library name="lib/backport-util-concurrent-3.1.jar">
<export name="*"/>
</library>
或者还是直接用命令吧:
在cmd下运行:
[your_axis2_home]\bin> wsdl2java.bat -uri http://localhost:8888/axis2/services/MyService?wsdl -o D:\输出目录
-------------------------------------------------------
通过上面办法顺利生成客户端代码之后,可以看到生成了MyServiceCallbackHandler和MyServiceStub
【xxxxxxStub和xxxxxxxCallbackHandler】的package 默认为service类的所在package
QName也为所在package
xxxxxxStub默认wsdl为你生成wsdl2java时使用的wsdl
利用生成的MyServiceCallbackHandler和MyServiceStub,编写调用代码如下(编译时要先引入axis2的jar)
package simple; public class Client { public static void main(String[] args) throws Exception { MyServiceStub stub = new MyServiceStub(); MyServiceStub.SayHello sayHello = new MyServiceStub.SayHello(); sayHello.setName(" yoyo "); System.out.println(stub.sayHello(sayHello).get_return()); } } //会输出hello yoyo
二.不用aar发布web service的方法。
1.在web.xml中配置AxisServlet。如下所示:
<?xml version="1.0" encoding="UTF-8"?> <web-app id="wmf" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> </web-app>
2.在[yourWebProject]\WebRoot\WEB-INF下新建services目录,在在services目录新建 deployService目录(名字随便,真正的webservice的服务名是services.xml里面定义的),在deployService 下新建META-INF目录,在META-INF下放置你的services.xml。
目录结构如下:
3.访问http://localhost:8080/[yourWebProject]/services/MyService?wsdl 即可