Xfire很好的提供了对Spring的支持。你可以很方便的将一个Spring bean包装成一个Web Service。可以通过创建Spring管理的XFire engine、ServiceRegistry、ransportManager和 ServiceFactory来实现。
Xfire使用XBean(http://xbean.org)来管理配置文件。XBean允许在XML文档中混合Spring Bean的定义。
下面是一个简单的配置文件:
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>Echo</name>
<serviceClass>org.codehaus.xfire.test.Echo</serviceClass>
</service>
</beans>
可以通过XBean的Classpath application context加载它:
import junit.framework.TestCase;
import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
import org.codehaus.xfire.service.ServiceRegistry;
public class XBeanExampleTest
extends TestCase
{
public void testLoading()
throws Exception
{
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {
"/org/codehaus/xfire/spring/examples/simple.xml",
"/org/codehaus/xfire/spring/xfire.xml" });
ServiceRegistry reg = (ServiceRegistry) context.getBean("xfire.serviceRegistry");
assertTrue(reg.hasService("Echo"));
}
}
下面是一个混合Spring Bean的例子:
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>Echo</name>
<serviceBean>#echoBean</serviceBean>
</service>
<bean id="echoBean" class="org.codehaus.xfire.services.Echo"/>
</beans>
为service设置属性:
<service>
... define your normal attributes ...
<properties>
<property key="mtom-enabled">true</property>
<property key="myProperty">myValue</property>
<properties>
</service>
你可以完全通过Spring声明的方式定义服务,例如:
<bean name="echoService" class="org.codehaus.xfire.spring.ServiceBean">
<property name="serviceBean" ref="echo"/>
<property name="serviceClass" value="org.codehaus.xfire.test.Echo"/>
<property name="inHandlers">
<list>
<ref bean="addressingHandler"/>
</list>
</property>
</bean>
<bean id="echo" class="org.codehaus.xfire.test.EchoImpl"/>
<bean
id="addressingHandler" class="org.codehaus.xfire.addressing.AddressingInHandler"/>