eclipse 为什么我不能创建webserviceprovider基类?

hrirmatl  于 2023-08-04  发布在  Eclipse
关注(0)|答案(1)|浏览(91)

我正在尝试为我的各种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-但是我只是在基类中实现了...
有人做过吗如果是的话,又是如何做到的呢?

6ioyuze2

6ioyuze21#

子类不能从父类继承注解--所以需要在子类中重复注解。

相关问题