白衣同志是個好同志,“刨蟲”啊,俺現在用的O/R Broker就是白衣“刨”出來的!
今天準備睡覺,發現白衣同志blog上在推薦“Web Service Framework:XFire”( http://www.aygfsteel.com/calvin/archive/2005/12/04/22390.html).嘿嘿,受夠了axis,終于解放了。
xfire的user's guide做得很漂亮,俺這種E盲都能看個半懂。quick start看完,直接跳到spring一章,順帶拿手上的一個測試工程做測試,HelloXfire。
xfire 要加的包一大堆,guide上“Dependency Guide”這一章純粹是在糊弄人,我的工程是webwork2.1.7(freemarker2.3.4)+spring1.2.5+ hibernate3.0.5+oracle8.1.7的東西,原來的jar不算,新加了一堆進去,最后所有的包加進來有19MB,暈啊!
antlr-2.7.5H3.jar
aopalliance.jar
asm.jar
asm-attrs.jar
cglib-nodep-2.1_2.jar
classes12.jar
commons-codec-1.3.jar
commons-collections-3.1.jar
commons-dbcp-1.2.1.jar
commons-fileupload.jar
commons-io-1.1.jar
commons-lang-2.1.jar
commons-logging.jar
commons-pool-1.2.jar
concurrent-1.3.4.jar
cos-multipart.jar
dom4j-1.6.jar
freemarker.jar
groovy-all-1.0-jsr-04.jar
hibernate3.jar
javamail-1.3.2.jar
jaxen-1.1-beta-8.jar
jdom-1.0.jar
jencrypt.jar
jta.jar
log4j-1.2.9.jar
lucene-1.4.3.jar
nls_charset12.jar
ognl.jar
oscache-2.2.jar
oscore.jar
quartz-1.5.0.jar
quartz-oracle-1.5.0.jar
quartz-weblogic-1.5.0.jar
spring.jar
spring-xwork-integration.jar
stax-1.1.2-dev.jar
stax-api-1.0.jar
stax-utils-snapshot-20040917.jar
velocity-dep.jar
webflow-2.1.7.jar
webwork-2.1.7.jar
webwork2-spring.jar
xfire-all-1.0-M6a.jar
xwork.jar
activation-1.0.2.jar
commons-beanutils-1.7.0.jar
wsdl4j-1.5.1.jar
user's guide上說得比較清楚,下載下來的zip里面也有一個spring的example。
首先是在web.xml中做配置,除了原來spring、webwork的,加上
然后在WEB-INF下面放一個xfire-servlet.xml文件,實際上就是一個spring的配置文件
我做測試的三個例子,echo是抄xfire examples上的,HelloWorld是一個groovy的例子
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
<beans>
<bean id="GroovyScriptFactory" class="org.springframework.beans.factory.script.groovy.GroovyScriptFactory">
<property name="expirySeconds" value="20" />
</bean>

<bean id="HelloService" factory-bean="GroovyScriptFactory" factory-method="create">
<constructor-arg index="0" value="classpath:com/yninfo/rules/services/impl/HelloWorldImpl.groovy" />
</bean>
</beans>
而AccountManager,則是標準的spring+hibernate的東西。
配置完成后,啟動tomcat,用http://192.168.0.100:8080/rules/xfire/echo?wsdl可以看到wsdl的描述。
在vs2005里面,建了個j#的工程(略)。。。
注:手誤,把圖覆蓋了,只好全部刪掉
今天準備睡覺,發現白衣同志blog上在推薦“Web Service Framework:XFire”( http://www.aygfsteel.com/calvin/archive/2005/12/04/22390.html).嘿嘿,受夠了axis,終于解放了。
xfire的user's guide做得很漂亮,俺這種E盲都能看個半懂。quick start看完,直接跳到spring一章,順帶拿手上的一個測試工程做測試,HelloXfire。
xfire 要加的包一大堆,guide上“Dependency Guide”這一章純粹是在糊弄人,我的工程是webwork2.1.7(freemarker2.3.4)+spring1.2.5+ hibernate3.0.5+oracle8.1.7的東西,原來的jar不算,新加了一堆進去,最后所有的包加進來有19MB,暈啊!
antlr-2.7.5H3.jar
aopalliance.jar
asm.jar
asm-attrs.jar
cglib-nodep-2.1_2.jar
classes12.jar
commons-codec-1.3.jar
commons-collections-3.1.jar
commons-dbcp-1.2.1.jar
commons-fileupload.jar
commons-io-1.1.jar
commons-lang-2.1.jar
commons-logging.jar
commons-pool-1.2.jar
concurrent-1.3.4.jar
cos-multipart.jar
dom4j-1.6.jar
freemarker.jar
groovy-all-1.0-jsr-04.jar
hibernate3.jar
javamail-1.3.2.jar
jaxen-1.1-beta-8.jar
jdom-1.0.jar
jencrypt.jar
jta.jar
log4j-1.2.9.jar
lucene-1.4.3.jar
nls_charset12.jar
ognl.jar
oscache-2.2.jar
oscore.jar
quartz-1.5.0.jar
quartz-oracle-1.5.0.jar
quartz-weblogic-1.5.0.jar
spring.jar
spring-xwork-integration.jar
stax-1.1.2-dev.jar
stax-api-1.0.jar
stax-utils-snapshot-20040917.jar
velocity-dep.jar
webflow-2.1.7.jar
webwork-2.1.7.jar
webwork2-spring.jar
xfire-all-1.0-M6a.jar
xwork.jar
activation-1.0.2.jar
commons-beanutils-1.7.0.jar
wsdl4j-1.5.1.jar
user's guide上說得比較清楚,下載下來的zip里面也有一個spring的example。
首先是在web.xml中做配置,除了原來spring、webwork的,加上
1
<context-param>
2
<param-name>contextConfigLocation</param-name>
3
<param-value>classpath:beans.xml,classpath:org/codehaus/xfire/spring/xfire.xml</param-value>
4
</context-param>
5
<servlet>
6
<servlet-name>xfire</servlet-name>
7
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
8
</servlet>
9
<servlet-mapping>
10
<servlet-name>xfire</servlet-name>
11
<url-pattern>/xfire/*</url-pattern>
12
</servlet-mapping>

2

3

4

5

6

7

8

9

10

11

12

然后在WEB-INF下面放一個xfire-servlet.xml文件,實際上就是一個spring的配置文件
1
<?xml version="1.0" encoding="UTF-8"?>
2
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
3
<beans>
4
<!-- START SNIPPET: xfire -->
5
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
6
<property name="urlMap">
7
<map>
8
<entry key="/echo" value-ref="echo" />
9
<entry key="/HelloWorld" value-ref="HelloWorld" />
10
<entry key="/AccountManager" value-ref="AccountManager-xfire" />
11
</map>
12
</property>
13
</bean>
14
<bean id="echoBean" class="com.yninfo.rules.services.impl.EchoImpl" />
15
<!-- Declare a parent bean with all properties common to both services -->
16
<bean id="echo" class="org.codehaus.xfire.spring.remoting.XFireExporter">
17
<property name="serviceFactory" ref="xfire.serviceFactory" />
18
<property name="xfire" ref="xfire" />
19
<property name="serviceBean" ref="echoBean" />
20
<property name="serviceInterface" value="com.yninfo.rules.services.Echo" />
21
</bean>
22
<bean id="HelloWorld" class="org.codehaus.xfire.spring.remoting.XFireExporter">
23
<property name="serviceFactory" ref="xfire.serviceFactory" />
24
<property name="xfire" ref="xfire" />
25
<property name="serviceBean" ref="HelloService" />
26
<property name="serviceInterface" value="com.yninfo.rules.services.HelloWorld" />
27
</bean>
28
<bean id="AccountManager-xfire" class="org.codehaus.xfire.spring.remoting.XFireExporter">
29
<property name="serviceFactory" ref="xfire.serviceFactory" />
30
<property name="xfire" ref="xfire" />
31
<property name="serviceBean" ref="AccountManager" />
32
<property name="serviceInterface" value="com.yninfo.rules.services.AccountManager" />
33
</bean>
34
<!-- END SNIPPET: xfire -->
35
</beans>
36
值得注意的是“serviceBean”,按user's guides上給的例子是“service”,結果是報錯,大意說service這個屬性沒有setter。
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

1
public class ServiceBean
2
implements InitializingBean, ApplicationContextAware
3

{
4
5
private Object service;
6
/** *//**
7
* Gets the object which backs this service.
8
* @return
9
*/
10
public Object getServiceBean()
11
{
12
return service;
13
}
14
}

2

3



4

5

6


7

8

9

10

11



12

13

14

我做測試的三個例子,echo是抄xfire examples上的,HelloWorld是一個groovy的例子












1
<bean id="AccountManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
2
<property name="transactionManager" ref="TransactionManager" />
3
<property name="transactionAttributes">
4
<props>
5
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
6
<prop key="load">PROPAGATION_REQUIRED,readOnly</prop>
7
<prop key="*">PROPAGATION_REQUIRED</prop>
8
</props>
9
</property>
10
<property name="target">
11
<bean class="com.yninfo.rules.services.impl.AccountManagerImpl">
12
<property name="accountDAO" ref="AccountDAO" />
13
</bean>
14
</property>
15
</bean>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

配置完成后,啟動tomcat,用http://192.168.0.100:8080/rules/xfire/echo?wsdl可以看到wsdl的描述。
在vs2005里面,建了個j#的工程(略)。。。
注:手誤,把圖覆蓋了,只好全部刪掉