跨平台发布web Service 一般使用axis2,如果不跨平台则使用apache CXF创建web Service较好,下面我将一次介绍通过axis2创建和发布web service的详细。
由于截图之前有网友反映不能查看,所以本文全用文字描述,未知之处,请留言或指出。
详细以及注意事项如下:
第一种发布方式:通过axis2.war发布Webservice(实质是通过axis2工具将webService生成**.aar文件)
一、下载(1)axis2-1.6.3-bin.zip(解压文件,作为与eclipse配置的文件)
网址:http://axis.apache.org/axis2/java/core/download.cgi
(2)axis2-eclipse-codegen-plugin-1.6.2.zip、axis2-eclipse-service-plugin-1.6.2.zip(解压2文件后把
org.apache.axis2.eclipse.codegen.plugin_1.6.2.jar和org.apache.axis2.eclipse.service.plugin_1.6.2.jar
放到eclipse的安装目录,E:\eclipse\dropins文件夹下)
网址:http://axis.apache.org/axis2/java/core/tools/index.html
二、将eclipse与axis2-1.6.3-bin插件集成
(1)在Eclipse的菜单栏中,Window --> Preferences --> Web Services--> Axis2 Perferences,
在Axis2 runtime location中选择Axis2解压缩包的位置,设置好后,点"OK"即行。
三、下载axis2.war(该包放在tomcat---->webapps下),这是核心
四、开始创建项目
在eclipse中新建一个Dynamic web project项目,接口名字尽量简单和规范(接口名规范,非常有用!)
五、生成.aar文件到tomcat的webapps\axis2\WEB_INF\services下
(1)wordspace工作区下,单击右键,新建other---->选择Axis2 Wizards ---->Axis2 Service Archiver ---->next
(2)到Service Archiver时,注意class File Location 只能选择到build\classes目录(如F:\eclipse_mar\WebServiceTest\build\classes)
(3)继续next,直到Server Archiver Generate the Service XML file
在service name 和 Class name 后面输入对应的名字。注意:Service name是指发布成功后访问的名称
如http://localhost:8080/axis2/services/ITestService?wsdl红色字体,而Class name则必须填入接口的全路径!
如:com.interfaces.ITestService ,点击Load 加载成功后即可看到本窗口中的接口中的方法和参数类型!表名已经加载成功!
(4)下一步,将看到:OUtput file location 和 Output file name ,选择导出路径,一般就导出放在 tomcat\webapps\axis2\WEB-INF\services下
这样方便马上测试,而name可以任意取(只要符合命名规范即可)
点击finish,则生成.aar文件成功!
(5)start--tomcat--访问刚刚发布的webService,在地址栏输入http://localhost:8080/axis2/services/ITestService?wsdl,即可看见生成的wsdl文件
注意:以上的方式是发布到axis2.war包中,当然我们也可以把生成.aar文件copy到实际应用中;
同时,也可以使用eclipse的create webservice功能发布我们的webservice,选择axis2生成我们的webservice,
这样webservice就会部署到我们的应用中了。
以上开发环境:
windows 7 64位 +tomcat 7 64位+jdk1.6 32位 +eclipse mar(最新版本)+axis2.war最新版+axis2.1.6.3.bin最新版+axis2两个插件
可能不同版本使用会有差异。
第二种发布方式:是通过生成wsdl文件后,将该项目生成war包,放在tomcat,webapps下
一、新建一个Dynamic web Project工程
注意:需要选择版本是Dynamic web module version 为2.5,否则在生成wsdl文件时会报错误!
二、在该工程src目录下新建com.test.interfaces和com.test.implement包
interfaces中存放接口类-----》ITestService.java :方法testService,参数String 和int ,返回值类型String
implement中存放实现类---->ITestServiceImpl.java
三、完成二以后
点中ITestServiceImpl.java ,单击右键-----》选择web Services----->选择create web Service,然后选择对应的实现类
注意:(1)web service type 选择是 Bottom up java Bean Web Service
(2)service implementation 一定是当前项目下的当前实现类全路径!如果有其它项目打开,那么需要仔细核对是否为当前项目的实现类
点击next,进入下一步
四、选择wsdl文件
点击下拉箭头,选择当前(单击右键的类名)想要生成的wsdl文件
五、点击finish即可
六、发布webService
在发布之前,需要先检查该文件是否能正确使用!
步骤:
1、找到刚刚生成的wsdl文件,相对项目目录为/WebContent/wsdl/ITestAxis2Impl.wsdl
2、点击右键--》点击web services---->选择Test with web service Explorer
3、选择实现类ITestAxis2Impl,在对应的String 和 int 类型(由于我的接口中是两个参数String 和int类型)中输入值,点击Go
4、执行3步骤后,在页面的status状态栏中将会出现调用接口方法后的执行结果,如果有返回应该有的结果,那么web Service创建成功!
开始发布web Service,点击项目名,然后右键export---->输入web---》选择WAR file
------>下一步,选择需要打包的项目名和war包的生成路径(一般直接选择tomcat/webapps目录,也可以选择其他目录)
七、执行以上步骤后,发布就已成功。
八、测试刚刚发布的webService
新建一个java Project(注意:此处不是Dynamic web Project),新建lib文件夹用于存放6个架包
axis.jar、commons-discovery-0.2.jar、commons-logging.jar、jaxrpc.jar、saaj.jar、wsdl4j.jar(这6个架包可以从刚刚生成的web Service中复制,相对目录:/WebContent/WEB-INF/lib)
在src下新建TestAxis2.java文件,代码如下:
package com.test;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.junit.Test;
public class TestAxis2 {
public String invokeTest(){
//远程调用路径
String endpoint="http://localhost:8080/Axis2WebserviceTest3/services/ITestAxis2Impl"; //测试通过打成war包,放在tomcat ---webapps下发布
// (Axis2WebserviceTest3是项目名称) (ITestAxis2Impl实现类名称而非接口名称)
String result="call failed!";
Service service=new Service();
Call call;
try{
call=(Call)service.createCall();
call.setTargetEndpointAddress(endpoint);
//调用方法名,实际上是实现类中的方法名
call.setOperationName("iTestAxis2");
//设置参数名
call.addParameter("str", //接口中的参数名
XMLType.XSD_STRING, //该参数类型
ParameterMode.IN //参数模式,out in
);
call.addParameter("m",
XMLType.XSD_INT,
ParameterMode.IN
);
//设置返回值类型
call.setReturnType(XMLType.XSD_STRING);
String str="dsadjk";
int m=7;
result=(String) call.invoke(new Object[]{str,m});
}catch(Exception e){
e.printStackTrace();
}
return result;
}
@Test
public void testAxis2(){
String ss=invokeTest();
System.out.println(ss);
}
}
测试成功后,eclipse控制台会打印接口返回值。