1、首先,看看這個簡單的類代碼:
代碼
package
com.hoo.service;
/** * <b>function:</b>Spring的裝載Bean的Service * @author hoojo * @createDate 2011-3-9 下午06:30:26 * @file SpringService.java * @package com.hoo.service * @project Axis2WebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */
public
class
SpringService {
private
String name;
private
int
number;
public
void
setName(String name) {
this
.name = name;
}
public
void
setNumber(
int
number) {
this
.number = number;
}
public
String getMessage() {
return
this
.number + "
#
" +
this
.name;
}
}
將這個類編譯后的class,放到[tomcat-home]\webapps\axis2\WEB-INF\classes中,注意帶上package類路徑的目錄。
2、在<Tomcat安裝目錄>\webapps\axis2\WEB-INF\web.xml文件中加入下面的內容:
代碼
<
listener
>
<
listener
-
class
>
org.springframework.web.context.ContextLoaderListener
</
listener
-class
>
</
listener
>
<
context
-
param
>
<
param
-
name
>
contextConfigLocation
</
param
-name
>
<
param
-
value
>
classpath*:applicationContext.xml
</
param
-value
>
</
context
-param
>
這段配置會Spring的朋友肯定知道,這個是加載spring容器和設置spring的配置文件的。
3、在[tomcat-home]\webapps\axis2\WEB-INF\classes中新建一個applicationContext.xml文件,文件中的內容如下:
代碼
<?
xml version="1.0" encoding="UTF-8"
?>
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns
:
xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi
:
schemaLocation
=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
>
<
bean
id
=
"SpringBeanService"
class
=
"com.hoo.service.SpringService"
>
<
property
name
=
"name"
value
=
"hoojo"
/>
<
property
name
=
"number"
value
=
"1"
/>
</
bean
>
</
beans
>
上面配置了SpringService,利用Spring的容器幫我們設置name、number這2個屬性的值。
1、 在tomcat-home\webapps\axis2\WEB-INF\lib目錄中有一個axis2-spring-1.5.3.jar文件,該文件用于將被裝配JavaBean的發布成WebService。同樣這里我們采用手動打包發布的模式,在C盤建立一個axis2-spring-ws的目錄,然后在此目錄中新建一個META-INF的目錄,目錄中添加一個services.xml文件,內容如下:
代碼
<
service
name
=
"springService"
>
<
description
>
Spring aware
</
description
>
<
parameter
name
=
"ServiceObjectSupplier"
>
org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
</
parameter
>
<!-- 這里的值和Spring的applicationContext中配置的bean的id對應,就是通過在spring的容器獲取注入的bean -->
<
parameter
name
=
"SpringBeanName"
>
SpringBeanService
</
parameter
>
<
messageReceivers
>
<
messageReceiver
mep
=
"http://www.w3.org/2004/08/wsdl/in-out"
class
=
"org.apache.axis2.rpc.receivers.RPCMessageReceiver"
/>
</
messageReceivers
>
</
service
>
在文件中需要通過ServiceObjectSupplier參數指定SpringServletContextObjectSupplier類來獲得Spring的ApplicationContext對象;
然后用jar命令創建aar文件
然后將生產的aar文件,復制到[tomcat_home]\webapps\axis2\WEB-INF\services目錄中
2、 然后重啟tomcat,訪問:
http://localhost:8080/axis2/services/listServices
就可以看到剛才發布的springService了
3、 編寫客戶端測試代碼
代碼
package
com.hoo.service;
import
javax.xml.namespace.QName;
import
org.apache.axis2.AxisFault;
import
org.apache.axis2.addressing.EndpointReference;
import
org.apache.axis2.client.Options;
import
org.apache.axis2.rpc.client.RPCServiceClient;
/** * <b>function:</b>SpringService客戶端代碼 * @author hoojo * @createDate 2011-3-14 上午14:21:59 * @file LoginServiceClient.java * @package com.hoo.service * @project Axis2WebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */
public
class
SpringServiceClient {
public
static
void
main(String[] args)
throws
AxisFault {
String target = "
http://localhost:8080/axis2/services/springService
";
RPCServiceClient client =
new
RPCServiceClient();
Options options = client.getOptions();
options.setManageSession(
true
);
EndpointReference epr =
new
EndpointReference(target);
options.setTo(epr);
QName qname =
new
QName("
http://service.hoo.com
", "
getMessage
");
Object[] result = client.invokeBlocking(qname,
new
Object[] {
null
},
new
Class[] { String.
class
});
System.out.println(result[0]);
}
}
運行后,看到bean注入的值有輸出。
七、 用Spring創建的JavaBean發布成WebService