【问题标题】:Generating a web service server implementation using wsdl2java in CXF在 CXF 中使用 wsdl2java 生成 Web 服务服务器实现
【发布时间】:2013-03-11 10:57:33
【问题描述】:

背景:

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

任务:

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

当我查看为服务实现类生成的代码时,我发现它扩展了 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,而不是将它们生成为类文件。

【问题讨论】:

    标签: java web-services cxf wsdl2java


    【解决方案1】:

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

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

    【讨论】:

    • 这是否意味着我需要手动编写自己的名为 Query 的类来实现 IQuery 并定义 Web 服务方法,还是应该直接使用生成的服务实现类作为我的 Web 服务实现?跨度>
    猜你喜欢
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多