You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apache CXF中显示WebService服务列表?

问题描述

我正尝试展示基于Apache CXF搭建的简单JAX-WS服务所提供的服务列表。
使用以下依赖:

<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-frontend-jaxws</artifactId>
  <version>3.5.2</version>
</dependency>
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-transports-http-jetty</artifactId>
  <version>3.5.2</version>
</dependency>

服务类代码:

@WebService
public class Foo {

    @WebMethod
    public String helloWorld() {
        return "hello";
    }

}

我通过以下代码发布服务:

Endpoint.publish("http://0.0.0.0:1234/foo", new Foo());

之后可以访问http://127.0.0.1:1234/foo?wsdl查看WSDL,但尝试访问/services路径(根据CXF文档,默认会创建包含可用端点列表的/services页面)却没有效果。想知道是否有办法启用该功能,且能否通过编程方式实现(不使用XML文件)?

解决方案

问题出在你使用的是JDK原生的Endpoint.publish()方法发布服务,这并不会触发CXF的扩展功能(包括/services服务列表页面)。要启用该功能,必须使用CXF自身的API来发布服务,以下是具体实现步骤:

1. 使用CXF的JaxWsServerFactoryBean发布服务

替换原有的发布代码,改用CXF提供的JaxWsServerFactoryBean创建并发布服务,同时启动CXF内置的Jetty服务器,这样会自动注册服务列表的Servlet。

示例代码:

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory;

public class ServicePublisher {
    public static void main(String[] args) {
        // 配置JAX-WS服务
        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
        factory.setServiceClass(Foo.class);
        factory.setAddress("/foo");
        
        // 创建并发布服务
        factory.create();
        
        // 启动Jetty服务器,监听指定端口
        JettyHTTPServerEngineFactory engineFactory = new JettyHTTPServerEngineFactory();
        engineFactory.createJettyHTTPServerEngine("0.0.0.0", 1234);
        
        System.out.println("服务已启动,访问http://127.0.0.1:1234/services查看服务列表");
    }
}

2. 验证效果

启动上述代码后,访问http://127.0.0.1:1234/services即可看到包含所有已发布服务的HTML列表页面,点击对应服务的链接还能直接查看WSDL。

原理说明

CXF的/services页面由其内置的CXFServlet负责处理,当使用CXF原生API发布服务时,会自动注册该Servlet并关联服务列表展示逻辑。而JDK原生的Endpoint.publish()是独立于CXF的实现,不会加载这些扩展组件,因此无法启用服务列表功能。

内容的提问来源于stack exchange,提问作者Alexa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:36:21