为Web服务生成Wsdl / Client Stubs

时间:2013-01-18 17:12:27

标签: java web-services wsdl wsimport

我一直在阅读有关使用Java,Eclipse等的Web服务编程的一些内容。我找到了一个特定的例子,其中该人通过执行以下操作来创建Web服务和客户端:

  1. 定义Web服务java类(interface + impl)
  2. 使用 Endpoint.publish
  3. 部署网络服务
  4. 从网络服务的网址抓取 wsdl (例如,localhost:// greeting?wsdl)
  5. 使用 wsimport 生成存根
  6. 使用生成的存根创建客户端类
  7. 是否有其他方法可以生成 wsdl 而无需发布Web服务并下载它?也许是一个自动生成wsdl和客户端存根的maven插件?

    更新:而不是创建一个新问题,我只是要背负这个问题。

    我通过定义界面创建了我的Web服务:

    @WebService
    public interface HelloWorldWs {
        @WebMethod
        public String sayHello(String name);
    }
    

    和一个impl类:

    @WebService(endpointInterface = "com.me.helloworldws.HelloWorldWs")
    public class HelloWorldWsImpl implements HelloWorldWs {
        @Override
        @WebMethod
        public String sayHello(String name) {
            return "Hello World Ws, " + name;
        }
    }
    

    当我运行 wsgen 时,我收到以下错误:

    The @javax.jws.WebMethod annotation cannot be used in with @javax.jws.WebService.endpointInterface element.
    

    Eclipse似乎没问题。

    知道为什么吗?

    注意,我最初没有注释但是当我尝试调用我的webservice时出现以下错误:

    com.me.helloworldws.HelloWorldWsImpl is not an interface
    

2 个答案:

答案 0 :(得分:1)

JSR 224在3.1节中说:

  

SEI是一个符合以下所有条件的Java界面:

     
      
  • 它的任何方法都可以带有javax.jws.WebMethod注释(见7.11.2)。
  •   
  • javax.jws.WebMethod如果使用,则不得将exclude元素设置为true
  •   

如果实现类包含javax.jws.WebMethod,那么根据规范,您无法放置@WebMethod(exclude=true),而这是不可能的。

取决于Eclipse的自定义版本,显示此警告。例如Rational Application Developer for Websphere显示:

JSR-181, 3.1: WebMethod cannot be used with the endpointInterface 
              property of WebService

答案 1 :(得分:0)

在编程/构建项目(使用一些高级IDE)时,通常您应该能够在自动生成的东西之间找到它 - IDE应该生成它。请仔细检查。