wsgen公开了未使用@WebMethod注释的方法

时间:2016-03-15 14:57:30

标签: java web-services wsdl webmethod

我定义了以下最小的web服务:

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService
public class DummyWS {

  public static void main(String[] args) {
    final String url= "http://localhost:8888/Dummy";
    final Endpoint endpoint= Endpoint.create(new DummyWS());
    endpoint.publish(url);
  }

  @WebMethod
  public void putData(final String value) {
    System.out.println("value: "+value);
  }

  @WebMethod
  public void doSomething() {
    System.out.println("doing nothing");
  }


  public void myInternalMethod() {
    System.out.println("should not be exposed via WSDL");
  }
}

正如您所看到的,我想要公开两种方法,因为它们使用@WebMethod注释:putDatadoSomething。 但是在运行wsgen时,它会生成一个包含myInternalMethod的WSDL,尽管它没有注释。

我在这里有误配置吗?为什么暴露的方法没有使用@WebMethod注释?

1 个答案:

答案 0 :(得分:1)

好的,我找到了。默认所有公共方法都会公开。要排除方法,必须使用@WebMethod(exclude=true)对其进行注释。 这是一个非常奇怪的要求,因为这意味着我只需要使用{em> 想要公开的@WebMethod来注释这些方法。

这是正确的代码:

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService
public class DummyWS {

  public static void main(String[] args) {
    final String url= "http://localhost:8888/Dummy";
    final Endpoint endpoint= Endpoint.create(new DummyWS());
    endpoint.publish(url);
  }

  public void putData(final String value) {
    System.out.println("value: "+value);
  }

  public void doSomething() {
    System.out.println("doing nothing");
  }


  @WebMethod(exclude=true)
  public void myInternalMethod() {
    System.out.println("should not be exposed via WSDL");
  }
}