如何从CXF WebService中排除方法 - 奇怪的行为

时间:2013-03-21 16:59:32

标签: java cxf java-ws

有人可以向我解释一下CXF的以下行为吗?

我有简单的WebService:

import javax.jws.WebMethod;

public interface MyWebService {

    @WebMethod
    String method1(String s);

    @WebMethod
    String method2(String s);

    @WebMethod(exclude = true)
    String methodToExclude(String s);

}

我想在接口中使用methodToExclude(对于Spring),但我不希望在生成的WSDL文件中使用此方法。上面的代码就是这样。

但是当我向界面添加@WebService注释时,我收到错误:

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface MyWebService {

    @WebMethod
    String method1(String s);

    @WebMethod
    String method2(String s);

    @WebMethod(exclude = true)
    String methodToExclude(String s);

}
  

org.apache.cxf.jaxws.JaxWsConfigurationException:@ javax.jws.WebMethod(exclude = true)不能在服务端点接口上使用。方法:methodToExclude

有人可以向我解释一下吗?有什么不同?此外,我不确定它以后是否会正常工作,但我在使用methodToExclude时找不到排除@WebService的方法。

2 个答案:

答案 0 :(得分:7)

@ javax.jws.WebMethod(exclude = true)用于实现:

public class MyWebServiceImpl implements MyWebService {
    ...
    @WebMethod(exclude = true)
    String methodToExclude(String s) {
        // your code
    }
}

不要在接口中包含方法methodToExclude:

@WebService
public interface MyWebService {
    @WebMethod
    String method1(String s);

    @WebMethod
    String method2(String s);

}

答案 1 :(得分:2)

已经很晚了,但我想填写我的答案。

  1. 删除所有 @WebMethod ,因为它们是可选的,只有在必须排除方法时才需要。

    import javax.jws.WebMethod;
    import javax.jws.WebService;
    
    @WebService
    public interface MyWebService {
    
      String method1(String s);
    
      String method2(String s);
    
      String methodToExclude(String s);
    
    }
    
  2. 将@WebMethod(exclude = true)添加到仅接口实现

    public class MyWebServiceImpl implements MyWebService {
    
      String method1(String s) {
        // ...
      }
    
      String method2(String s) {
        // ...
      }
    
      @WebMethod(exclude = true)
      String methodToExclude(String s) {
        // ...
      }
    }