使用CXF中的wsdl2java生成Web服务服务器实现

时间:2013-03-11 10:57:33

标签: java web-services cxf wsdl2java

背景:

我之前有过使用Apache CXF Web服务的经验,但我使用随Apache CXF发行版附带的wsdl2java工具生成服务端点接口(SEI)和服务实现有点新鲜。

任务:

我目前正致力于实施基于SOAP的Web服务,该服务将由外部系统使用。我已经定义了消息(XSD)和WSDL文件。我尝试使用Apache CXF中的wsdl2java工具生成SEI。使用JAXB类型作为输入参数并将类型返回到Web服务方法,可以正确生成SEI。

当我看一下为服务实现类生成的代码时,我看到它扩展了javax.xml.ws.Service类。此外,还会生成许多重载方法,这些方法与服务端点接口中的方法同名,并在方法名称后附加“Soap12Http”。其中一些方法采用WebServiceFeature类型的参数...而其他方法不采用任何参数。示例:

public class Query extends Service {

        @WebEndpoint(name = "product_query-soap12-http")
    public IQuery getProductsSoap12Http(WebServiceFeature... features) {
        return super.getPort(getProductsSoap12Http, IQuery.class,features);
    }
}

*其中IQuery是服务端点接口

问题:

  1. 我希望服务实现类能够实现服务端点接口,而不是扩展javax.xml.ws.Service。这是一个有效的期望吗?
  2. 我期待服务实现类从服务端点接口实现方法。这是一个有效的期望吗?
  3. 我还想知道是否可以要求wsdl2java命令为JAXB POJOS生成一个jar而不是将它们生成为类文件。

1 个答案:

答案 0 :(得分:0)

对于1和2,答案是否定的。生成的XXXXService类几乎是WSDL中各种SEI代理的工厂。 wsdl中的每个端点/绑定/ portType组合应该在Service对象上产生一系列“getXYZPort(...)”调用,以返回该特定SEI的实例。

对于3,上周cxf的工具中添加了一个-clientjar选项(尚未发布,需要最新的快照)可能接近所需的。