Axis2+spring整合例項

許喜樂發表於2015-11-27

一、下載jar包

    axis2-1.6.3下載:

    下載地址:http://axis.apache.org/axis2/java/core/download.cgi,

    下載axis2-1.6.3-bin.zip,此壓縮包包含了所有axis2的jar

    spring3.1.4下載我就不廢話了

二、建立整合工程併發布測試

    1.在搭好的spring MVC框架中,引入axis2的jar

    2.在WEB-INF下建立services資料夾,,名字一定是services,其他不能識別,在services一定要再建立一個資料夾(名字順便,例如:MyService),        在MyService下建立一個資料夾,名字一定是META-INF,在META-INF下建立services.xml檔案和一個空的ServiceData.xml,這個名字也是不變的。

 最後路徑是WEB-INF/services/MyService/META-INF/services.xml services.xml程式碼如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 訪問地址中的訪問那個webservice的名字 -->
<service name="TestWSService">
	<description>Spring 整合例子 </description>
	<parameter name="ServiceObjectSupplier">
		org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
	</parameter>
	<!-- 配置在applicationContext中配置的bean,,這裡的值域bean中的id事一樣的,否則就報錯找不到bean錯 -->

	<parameter name="SpringBeanName">testWSService</parameter>
	<messageReceivers>
		<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
		<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
	</messageReceivers>
</service>



 最後目錄WEB-INF/services/MyService/META-INF/ServiceData.xmlServiceData.xml程式碼如下:

<?xml version="1.0" encoding="UTF-8"?>
<ServiceData>  
</ServiceData>

三、在web.xml中加入以下資訊

<!--axis2  WebService配置資訊開始-->
 <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>
<!-- axis2  WebService配置資訊結束-->



四、在applicationContext.xml中注入引用的service

<bean id="testWSService" class="com.usi.jrtx.service.webservice.TestWSService"></bean>

五、TestWSService.java檔案

package com.usi.jrtx.service.webservice;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import com.github.miemiedev.mybatis.paginator.domain.Order;
import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.usi.jrtx.dao.account.AccountMapper;
import com.usi.jrtx.model.account.Account;

public class TestWSService {
	@Autowired
	private AccountMapper accountMapper;

	/**
	 * 計算減法 d1-d2
	 */
	public Integer jianfa(Integer d1, Integer d2) {
		return d1-d2;
	}

	/**
	 * 計算加法
	 */
	public Integer jiafa(Integer d1, Integer d2) {
		PageBounds pageBounds = new PageBounds(1,1000,Order.formString("id.desc"));
		Account account=new Account();
		List<Account> list=accountMapper.queryAccounts(account, pageBounds);
		System.out.println("接收d1:"+d1);
		System.out.println("接收d2:"+d2);
		for (int i = 0; i < list.size(); i++) {
			System.out.println("賬戶名:"+list.get(i).getAccountName());
		}
		return d1+d2;
	}
}

六、客戶端使用

package com.usi.jrtx.webservice;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.xml.namespace.QName;

import org.apache.axiom.om.OMElement;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

import com.usi.jrtx.model.soap.AccountVO81010;
import com.usi.jrtx.model.soap.ConsumeDetail;
import com.usi.jrtx.model.soap.ConsumeVO88010;
import com.usi.jrwl.util.XMLDomUtil;


public class WebserviceTest {

	/**
	 * 測試
	 * @throws Exception
	 */
	public static void my() throws Exception {
		String url = "http://192.168.20.34:8080/jrtxManager/services/TestWSService?wsdl";
		try {
			// 使用RPC方式呼叫WebService
			RPCServiceClient serviceClient = new RPCServiceClient();
			// 指定呼叫WebService的URL
			EndpointReference targetEPR = new EndpointReference(url);
			Options options = serviceClient.getOptions();
			// 確定目標服務地址
			options.setTo(targetEPR);
			// 確定呼叫方法
			options.setAction("urn:jiafa");
			options.setTimeOutInMilliSeconds(60000);
			QName qname = new QName("http://webservice.service.jrtx.usi.com","jiafa");
			// 指定jiafa方法的引數值
			String requestContent = "";
			try {
			} catch (Exception e) {
				throw new Exception(e.getMessage(), e.getCause());
			}
			Object[] parameters = new Object[] {5,9 };
			// 指定getPrice方法返回值的資料型別的Class物件
			Class[] returnTypes = new Class[] { String.class };
			// 呼叫方法一 傳遞引數,呼叫服務,獲取服務返回結果集
			OMElement element = serviceClient.invokeBlocking(qname, parameters);
			// 值得注意的是,返回結果就是一段由OMElement物件封裝的xml字串。
			String result = element.getFirstElement().getText();
			System.out.println(result);
		} catch (AxisFault e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws Exception {
		my();
	}
}
七、總結:就是那麼簡單!

相關文章