您的位置:首页 > 其它

xfire本地调试方法(不必启动服务器)

2009-05-05 20:38 274 查看
通过Xfire开发WebService容易上手,而且在性能上也有一定的优越性,现在很多人都在使用它进行WS的开发,由于公司需要,我也参加public class ServiceTest extends AbstractSpringTest了这部分的开发。

由于需要,要进行单元测试,在xfire中提供了一个专门设计的单元测试的基类,org.codehaus.xfire.spring.AbstractSpringTest,我们想进行单元测试的话,用这个基类进行很方便,只需继承这个类即可。

比如,我这里写一个测试类:

 

 

import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
import org.apache.xbean.spring.context.FileSystemXmlApplicationContext;
import org.codehaus.xfire.spring.AbstractXFireSpringTest;
import org.springframework.context.ApplicationContext;

public class ServiceTest extends AbstractXFireSpringTest {

@Override
protected ApplicationContext createContext() {
// TODO Auto-generated method stub
// return new
// ClassPathXmlApplicationContext("classpath:applicatiFonContext.xml");
return new FileSystemXmlApplicationContext("/WEB-INF/applicationContext.xml");
}

}


 

 

其中的createContext()方法是继承自父类的,这个类用来初始化配置,进行服务的初始化工作,同样是在这个类中,我写了一个得到服务接口的方法,也就是可以直接进行调用的接口,实际上这里是得到的服务调用的一个代理类,这个代理类会实现服务接口:

 

 

import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
import org.apache.xbean.spring.context.FileSystemXmlApplicationContext;
import org.codehaus.xfire.spring.AbstractXFireSpringTest;
import org.springframework.context.ApplicationContext;

public class ServiceTest extends AbstractXFireSpringTest {

private String LOCALURL = "xfire.local://IHelloWorld";

@Override
protected ApplicationContext createContext() {
// TODO Auto-generated method stub
// return new
// ClassPathXmlApplicationContext("classpath:applicatiFonContext.xml");
return new FileSystemXmlApplicationContext("/WEB-INF/applicationContext.xml");
}

/**
* 传入一个API的接口,生成这个接口的服务调用代理类
*
* @param service
* @return
*/
public Object getServiceProxyInterface(Class service) {

Service serviceModel = new ObjectServiceFactory().create(service);
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
.newInstance().getXFire());
try {
return factory.create(serviceModel, LOCALURL);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}

}


 

 

这里要注意了,看我上边方法中有这一句:

 

    XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
    .newInstance().getXFire());

 

好多教程上都会强调这里,这个在启动服务后是要这么用的,但是现在我们用的是本地传输,客户端和服务器是运行在一个JVM中的,这个时候我们一定要把红色部分改为:

 

     getXfire();

 

 

另外LOCALURL的格式一定要是"xfire.local://你的服务名称",通过调用getServiceProxyInterface方法,返回接口的一个代理对象,这样便可能过接口来访问这个对象的方法了。网上相关资料也反复强调getXfire()及url格式这一块。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐