Glassfish6 WAR 模块尽管有 @WebService 注释,但无法作为 ejb、web、webservice 启动

问题描述 投票:0回答:1

我正在为我为 Glassfish6 开发的 SOAP API 创建 REST 相邻(即 HTTP 方法实现,但不是实际的 REST 结构)API 包装器。在开发过程中,除了 SOAP 之外,我还为 REST 相邻控制器创建了一个新的模块控制器。 SOAP 控制器使用@WebService 进行注释。最初,该模块是作为 JAR 构建并部署的:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ejb-plugin</artifactId> <version>2.1</version> <configuration> <ejbVersion>3.1</ejbVersion> </configuration> </plugin>
它现在已构建并部署为 WAR:

<plugin> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> <configuration> <attachClasses>true</attachClasses> </configuration> </plugin>
我能够构建此模块并将其部署到我的 Glassfish6 服务器。但是,存在一个奇怪且不一致的问题,其中,在部署模块 Glassfish6 时,应用程序将报告应用程序具有引擎 ejb、web,而不是 ejb、web、webservices,如下面应用程序控制台屏幕截图中的外部模块所示:


应用控制台GF6

SOAP 模块控制器:

@WebService(targetNamespace = "http://redactednamespace.com") @Stateless @LoginNotRequired public class External extends BaseController { @Override protected void setModuleNameInRegistry() { registry.putResource(MODULE_NAME, "External"); } }
REST 相邻控制器

@Path("external/{serviceName}") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @Stateless public class ExternalJson extends BaseJsonController { @Override protected void setModuleNameInRegistry() { registry.putResource(MODULE_NAME, "External"); } }
由于 Web 服务未处于活动状态,SOAP 控制器在尝试访问时会抛出 404,声称没有端点正在侦听。不过,使用 REST 控制器确实允许访问模块。

单独重新部署并不能解决问题。更奇怪的是,几个小时后(没有重新部署,也没有我这边的额外步骤),GF6 将报告该模块是一个 Web 服务引擎,并且可以访问 SOAP 控制器(就像您所看到的那样)在屏幕截图中的核心和后台模块中)。在随后的重新部署中,GF6 不会出现将模块正确部署为 ejb、web、webservices 的问题。显然,选择 SOAP 或 REST 将是最佳选择,但不幸的是,目前还不太可行,因此任何建议都是在这里非常感谢。谢谢!

java soap glassfish war glassfish-6
1个回答
0
投票
在查阅这篇文章后,我终于能够解决这个问题,尽管它指的是一只耳朵里有战争:

Glassfish 4.1:耳内战争不公开 Web 服务

有一个旧的 jaxws-rt 依赖项导致了升级到 jakarta 时未解决的问题。删除依赖关系可以让 Web 服务正常启动。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.