java - wsgen 公开未使用 @WebMethod 注解的方法

标签 java web-services wsdl 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);
  }

  @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注释?

最佳答案

好的,我找到了。默认情况下,所有公共(public)方法都会公开。要排除某个方法,必须使用 @WebMethod(exclude=true) 对其进行注释。 这是一个相当奇怪的要求,因为这意味着我只需使用 @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");
  }
}

关于java - wsgen 公开未使用 @WebMethod 注解的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36014797/

相关文章:

java - 如果源包含 Elastic Search Server 中给定的搜索文本,则获取所有文档

java - 为什么不根据数据类型调用方法,如果值需要存储在变量中

java - 无法合并Dex Android

java - 如何以线程安全的方式使用 CXF 客户端

.net - svcutil 不生成 soap 客户端

php - 使用 WSDL 构建用于 SOAP 的 PHP 数组

java - 如何在 Android Honeycomb 的操作栏中添加第二个下拉列表?

WCF 契约(Contract)和命名空间?

java - 给定一个 WSDL 文件,创建一个简单的 Java 客户端

javascript - 通过Ajax发送图片到API