Glassfish 4.1:war inside ear 不公开网络服务

Glassfish 4.1: war inside ear does not expose webservices

我目前正在努力将应用程序从 Glassfish 3.1.2.2Java7 运行 升级到 Glassfish 4.1Java8 运行。该应用程序被打包为一个 ear 文件,其中包含一个 ejb-jar 和一个 warwar 又包含一些 webservices.

Glassfish 3.1.2.2 中,部署 ear 将导致 war 暴露一些 webservices。但是,当我在 Glassfish 4.1 中部署 ear 时,没有 webservice 暴露。在 Glassfish 中列出 ear 的组件时,war 不会在 4.1 中列出 webservices(仅 web)(但在3.1.2.2)。

我尝试将 war 文件作为独立应用程序部署,执行此操作时 webservices 可用。

有谁知道在使用 Glassfish 4.1 通过 ear 文件部署 webservices 时是否存在已知错误?

关于更改,我已经升级了一些依赖项,但据我所知,没有什么会影响它。

我的application.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
    "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
    "http://java.sun.com/dtd/application_1_3.dtd">
<application>
  <display-name>myApplication-ear</display-name>
  <description>myApplication</description>
  <module>
    <ejb>myApplication-ejb-5.2-SNAPSHOT.jar</ejb>
  </module>
  <module>
    <web>
      <web-uri>myApplication-war-5.2-SNAPSHOT.war</web-uri>
      <context-root>/myApplication-war</context-root>
    </web>
  </module>
</application>

这可能是您的场景吗(?):当作为 Web 服务公开且具有处理程序的 EJB 在它具有依赖项的 EJB 之前初始化时,EJB 模块部署可能会失败。这是由 EJB 容器初始化和加载 EJB Web 服务的方式引起的,解决方法是重命名 EJB,以便在它具有依赖项的 EJB 之后初始化作为 Web 服务公开的 EJB。

问题是旧的依赖项:

  <dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>2.2.7</version>
  </dependency>

我删除了它,因为它已经包含在 java 安装的 rt.jar 中。 不知何故,Glassfish 根本没有处理这个问题,网络服务根本无法工作,server.log

中也没有任何错误痕迹