我正在尝试为我的各种REST API创建一个基类。
如果我像下面这样创建一个类,没有基类,那么这就可以正常工作(这也是我重构的起点):
@WebServiceProvider
@ServiceMode(value = javax.xml.ws.Service.Mode.MESSAGE)
@BindingType(value = HTTPBinding.HTTP_BINDING)
public class SpecificRestAPI implements Provider<Source>
{
// arg 0: url including port, e.g. "http://localhost:9902/specificrestapi"
public static void main(String[] args)
{
String url = args[0];
// Start
Endpoint.publish(url, new SpecificRestAPI());
}
@Resource
private WebServiceContext wsContext;
@Override
public Source invoke(Source request)
{
if (wsContext == null)
throw new RuntimeException("dependency injection failed on wsContext");
MessageContext msgContext = wsContext.getMessageContext();
switch (((String) msgContext.get(MessageContext.HTTP_REQUEST_METHOD)).toUpperCase().trim())
{
case "DELETE":
return processDelete(msgContext);
//etc...
}
}
}
字符串
但是,如果我让这个类扩展BaseRestAPI
,并尝试将所有的注解和带注解的对象和方法移动到基类中,我会得到一个错误:
@WebServiceProvider
@ServiceMode(value = javax.xml.ws.Service.Mode.MESSAGE)
@BindingType(value = HTTPBinding.HTTP_BINDING)
public abstract class BaseRestAPI implements Provider<Source>
{
@Resource
private WebServiceContext wsContext;
@Override
public Source invoke(Source request)
{
//etc...
}
}
public class SpecificRestAPI extends BaseRestAPI
{
// arg 0: url including port, e.g. "http://localhost:9902/specificrestapi"
public static void main(String[] args)
{
String url = args[0];
// Start
Endpoint.publish(url, new SpecificRestAPI());
}
型
这不会给我带来编译错误,但在运行时:
线程“main”出现异常java.lang.IllegalArgumentException:class SpecificRestAPI既没有@WebService注解,也没有@WebServiceProvider注解
基于这个错误,我尝试将该注解移到SpecificRestAPI
类中,保留Base类的其余部分;但是我得到了一个eclipse编译器错误,我没有实现Provider
-但是我只是在基类中实现了...
有人做过吗如果是的话,又是如何做到的呢?
1条答案
按热度按时间6ioyuze21#
子类不能从父类继承注解--所以需要在子类中重复注解。