Axis2學習筆記
目錄:
1.準備
2.發佈service
3.生成客戶端代碼
1. 準備
下載axis2 的bin和war兩種發行版本。
Bin版本用於使用自帶的命令生成客戶端代碼。
War包中的WEB-INF目錄下的文件用於服務提供方使用。
2. 發佈service
新建一個Maven項目,在pom.xml中新增以下依賴:
<dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-kernel</artifactId> <version>1.7.3</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-ant-plugin</artifactId> <version>1.7.3</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-corba</artifactId> <version>1.7.3</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-jaxws</artifactId> <version>1.7.3</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-spring</artifactId> <version>1.7.3</version> </dependency>
在本例中是使用spring與axis2集成一起,所以有axis2-spring 依賴。
在web.xml中新增一個axis2 servlet ,代碼如下:
<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-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
把下載的war包中的WEB-INF目錄下的conf、services、modules文件夾複製到工程中的WEB-INF目錄下。
新建一個Service Pojo類:
publicclass NameService { publicvoid print(String name) { System.err.println("print :"+name); } public String getFullName(String name) { return"Your name is "+name; } }
在spring中註冊NameService類爲一個bean。
<bean name="nameService" class="com.hikvision.ws.service.NameService"></bean>
在services目錄下新建META-INF目錄,在META-INF目錄中新建services.xml文件,用於描述該服務。
services.xml:
<servicename="NameService"> <description> NameService </description> <parametername="ServiceObjectSupplier"> org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier </parameter> <messageReceivers> <messageReceivermep="http://www.w3.org/ns/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/> <messageReceivermep="http://www.w3.org/ns/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </messageReceivers> <parametername="SpringBeanName"> nameService </parameter> </service>
其中
<parameter name="SpringBeanName">
注意,services.xml中不要出現
<?xml version=”1.0”encoding=”UTF-8” ?>
在命令行中進入services目錄,輸入命令:jar –cvf NameService.arr ./META-INF
這個命令是將當前目錄中的META-INF中的文件打包成一個NameService.arr文件。
注意:這個命令是jdk中的jar命令,需要本地安裝jdk並且設置環境變量。
這樣會在services目錄生成對應的arr文件,本例生成的是NameService.arr文件。arr文件其實和jar文件類似,兩者的區別是:
*.jar:只包含了class文件與清單文件,不包含資源文件,如圖片等所有res中的文件。
*.aar:包含所有資源,class以及res資源文件全部包含。
NameService.arr文件中包含的是services.xml,是對該服務的描述。
至此,NameService服務配置完畢。啓動tomcat,在瀏覽器中輸入http://localhost:port/項目發佈目錄/services/NameService?wsdl,即可得到服務的wsdl。
3. 生成客戶端代碼
保存上一章節中得到的wsdl文件爲NameService.xml。
解壓axis2的bin版本,在命令行中切換到當前目錄,執行以下命令:
D:\axis2-1.7.3\bin\wsdl2java -uriNameService.xml -p com.test.webService.stub –s
其中“D:\axis2-1.7.3\”是axis2的bin版本解壓到是目錄。 -uri指定了wsdl文件,-p指定了包名, -s代表同步執行。
該命令會在當前目錄生成src文件夾,文件夾中有*stub.java文件,調用這個文件即可調用ws。
新建一個Maven項目,在pom.xml中加入以下依賴:
<dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-kernel</artifactId> <version>1.7.3</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-ant-plugin</artifactId> <version>1.7.3</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-jaxws</artifactId> <version>1.7.3</version> </dependency>
將生成的stub.java文件複製到項目中的指定包中(指生成stub時–p 指定的包)。
新建一個NameServiceClient.java文件:
import java.rmi.RemoteException; import com.hikvision.ws.stub.CaculateServiceStub; import com.hikvision.ws.stub.CaculateServiceStub.Plus; import com.hikvision.ws.stub.NameServiceStub; import com.hikvision.ws.stub.NameServiceStub.GetFullName; publicclass NameServiceClient { publicstatic String getFullName(String name)throwsRemoteException { NameServiceStub stub=new NameServiceStub("http://127.0.0.1:8011/Axis2/services/NameService"); GetFullName getfull=new GetFullName(); getfull.setName(name); return stub.getFullName(getfull).get_return(); } publicstaticvoid main(String[] args)throwsRemoteException { System.err.println(getFullName("12313416546-****************************")); } }
運行該文件就完成了對webservice的調用。