我有简单的Web服务类,如下所示:
@WebService
public class Param {
@WebMethod
public Dictionary getDict(@WebParam(name = "dictname") @XmlElement(required = true) String dictname) {
//do some stuff
return dict;
}
}
我也有wsdl文件。我曾经通过从wsdl文件调用CXF插件生成的类在远程服务器(来自其他服务器)上调用此服务。它看起来如下:
ParamService paramServices = new ParamService(new URL(getParamWsdlUrl()));
Param param = paramServices.getParamPort();
BindingProvider bindingProvider = (BindingProvider) param;
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, getParamUrl());
Dictionary dic = param.getDict("test");
但是现在我想在junit中测试这个Web服务。我不想使用远程服务器执行此任务,而是使用jetty或类似的机制在本地设置它。我在这里遇到的问题是,如果我想创建托管我的服务的jetty实例(1)我希望Param类是我自己的实现。不幸的是后来(2)我需要使用CXF生成的Param类。问题是这两个类具有完全相同的名称和包,因此编译器不知道使用哪一个。
Endpoint endpoint = Endpoint.publish(getParamUrl(), Param.class); // 1
ParamService paramServices = new ParamService(new URL(getParamWsdlUrl()));
Param param = paramServices.getParamPort(); // 2
BindingProvider bindingProvider = (BindingProvider) param;
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, getParamUrl());
Dictionary dic = param.getDict("test");
所以这是我的问题。我该如何解决这个问题?如何更改此问题以测试此服务?也许有一些更简单的方法来调用jetty设置的web服务?我想省略使用服务作为流和发送xml文件,因为它似乎我真的很复杂和不舒服。