java - 在 CXF 中使用 wsdl2java 生成 Web 服务服务器实现

标签 java web-services cxf wsdl2java

背景:

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

任务:

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

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

public class Query extends Service {

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

*其中 IQuery 是服务端点接口(interface)

问题:

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

最佳答案

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

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

关于java - 在 CXF 中使用 wsdl2java 生成 Web 服务服务器实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15336831/

相关文章:

java - 打印独特的字符及其出现

Java - 长时间到 ISO_8601 字符串格式

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

android - 将 Gson 转换为对象?

c# - 序列化对象 Linq to SQL

java - 我无法使用 TomEE 和 Eclipse 发布简单的 JAX-RS 服务 (IllegalArgumentException)

java - 如何向基于 Spring 配置的基于 Apache CXF 的 Web 服务客户端提供服务器地址?

java - 如何在cardView上添加插页式广告?

java - 跳过 CXF 拦截器以获取 Web 服务中的方法之一

java - 通过转换将 List<String> 转换为 List<Object> 甚至 List<Integer>