第 7 章 了解应用程序迁移更改
本节介绍将应用程序从 JBoss EAP 6.4 或 7.x 迁移到 JBoss EAP 8.0 所需的更改。
7.1. Web 服务应用程序更改 复制链接链接已复制到粘贴板!
JBossWS 5 对 JBoss EAP 7 web 服务提供了新的特性和性能改进,主要是通过升级 Apache CXF、Apache WSS4J 和 Apache Santuario 组件。然后,JBoss EAP 8.0 使用 JBossWS 7 支持其功能。
7.1.1. JAX-RPC 支持更改 复制链接链接已复制到粘贴板!
基于 XML 的 RPC Java API (JAX-RPC)在 Java EE 6 中已被弃用,在 Java EE 7 中是可选的。从 JBoss EAP 7 开始,它不再被支持。使用 JAX-RPC 的应用必须迁移到使用 Jakarta XML Web 服务,该服务为当前的 Jakarta EE 标准 Web 服务框架。
可使用以下任一方式识别 JAX-RPC Web 服务:
-
存在 JAX-RPC 映射文件,它是带有 root 元素 <
java-wsdl-mapping> 的 XML 文件。 存在
webservices.xmlXML 描述符文件,其中包含<webservice-description>元素,其中包含一个<jaxrpc-mapping-file>子元素。以下是定义 JAX-RPC Web 服务的webservices.xml描述符文件示例。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
存在
ejb-jar.xml文件,该文件中包含引用一个 JAX-RPC 映射文件的<service-ref>。
7.1.2. Apache CXF Spring web 服务更改 复制链接链接已复制到粘贴板!
在以前的 JBoss EAP 版本中,您可以通过包含带有端点部署存档的 jbossws-cxf.xml 配置文件来自定义 JBossWS 和 Apache CXF 集成。一个用例是,为 Apache CXF 总线上的 Web 服务客户端和服务器端点配置拦截器链。此集成需要在 JBoss EAP 服务器中部署 Spring。
JBoss EAP 8 不再支持 Spring 集成。必须修改包含 jbossws-cxf.xml 描述符配置文件的任何应用程序,以替换该文件中定义的自定义配置。虽然仍然可以直接访问 Apache CXF API,但请注意,应用程序将无法可移植。
建议的方法将 Spring 自定义配置替换为新的 JBossWS 描述符配置选项。基于 JBossWS 描述符的方法提供类似功能,无需修改客户端端点代码。在某些情况下,您可以将 Spring 替换为上下文依赖注入(CDI)。
7.1.2.1. Apache CXF 拦截器 复制链接链接已复制到粘贴板!
JBossWS 描述符提供新的配置选项,允许您在不修改客户端端点代码的情况下声明拦截器。反之,您可以通过为 cxf.interceptors.in 和 cxf.interceptors.out 属性指定拦截器名称列表,在预定义的客户端和端点配置中声明拦截器。
以下是使用这些属性声明拦截器的 jaxws-endpoint-config.xml 文件的示例。
7.1.2.2. Apache CXF 功能 复制链接链接已复制到粘贴板!
JBossWS 描述符允许您通过为 cxf.features 属性指定功能列表,在预定义的客户端和端点配置中声明功能。
以下是使用此属性声明功能的 jaxws-endpoint-config.xml 文件示例。
7.1.2.3. Apache CXF HTTP 传输 复制链接链接已复制到粘贴板!
在 Apache CXF 中,通过指定 org.apache.cxf.transport.http.HTTPConduit 选项来实现 HTTP 传输配置。JBossWS 集成允许以编程方式使用 Apache CXF API 修改,如下所示:
您还可以通过设置系统属性来控制并覆盖 Apache CXF HTTPConduit 默认值。
| 属性 | 类型 | 描述 |
|---|---|---|
| cxf.client.allowChunking | 布尔值 | 指定是否使用块发送请求。 |
| cxf.client.chunkingThreshold | 整数 | 设置从非区块切换到块模式的阈值。 |
| cxf.client.connectionTimeout | Long | 设置连接超时的毫秒数。 |
| cxf.client.receiveTimeout | Long | 设置接收超时的毫秒数。 |
| cxf.client.connection | 字符串 |
指定是否使用 |
| cxf.tls-client.disableCNCheck | 布尔值 | 指定是否禁用 CN 主机名检查。 |
7.1.3. WS-Security 更改 复制链接链接已复制到粘贴板!
本节介绍 JBoss EAP 6.4 和 JBoss EAP 7.0 中应用的各种 WS-Security 更改。
-
如果您的应用程序包含访问
org.apache.ws.security.WSPasswordCallback类的自定义回调处理器,请注意,此类已移到org.apache.wss4j.common.ext软件包。 -
来自
org.apache.ws.security.saml.ext软件包中的大多数 SAML bean 对象已被移到org.apache.wss4j.common.saml软件包中。 - 默认情况下,不允许使用 RSA v1.5 密钥传输和所有相关算法。
-
以前,安全令牌服务(STS)仅在
BehalfOf令牌上进行验证。现在,它还会验证ActAs令牌。因此,必须在为ActAs令牌提供的UsernameToken中指定有效的用户名和密码。 -
现在,需要 SAML Bearer 令牌具有内部签名。
org.apache.wss4j.dom.SamlAsertionValidator类现在有一个setRequireBearerSignature()方法,用于启用或禁用签名验证。
7.1.4. JBoss 模块结构更改 复制链接链接已复制到粘贴板!
cxf-api 和 cxf-rt-core JARs 已合并到一个 cxf-core JAR 中。因此,JBoss EAP 中的 org.apache.cxf 模块现在包含 cxf-core JAR,并公开比上一版本更多的类。
7.1.5. Bouncy Castle 要求和更改 复制链接链接已复制到粘贴板!
如果要将 AES 加密与 Galois/Counter Mode(GCM)用于 XML/WS-Security 中的对称加密,则需要 BouncyCastle Security Provider。
从 JBoss EAP 7 开始,它包含在 org.bouncycastle 模块中,JBossWS 能够依赖其类加载程序来获取和使用 BouncyCastle Security Provider。因此,在当前 JVM 中静态安装 BouncyCastle 不再需要。对于在容器外运行的应用程序,可以通过向类路径添加 BouncyCastle 库来向 JBossWS 提供安全供应商。
您可以禁用此行为:把 jaxws-endpoint-config.xml 部署描述符文件(对于服务器)或 jaxws-client-config.xml 部署描述符文件(对于客户端)中的 org.jboss.ws.cxf.noLocalBC 属性值设置为true。
如果要使用与 JBoss EAP 附带的版本不同的版本,您仍然可以静态将 BouncyCastle 安装到 JVM。在这种情况下,按照类路径中的提供者选择静态安装的 BouncyCastle Security Provider。要避免任何问题,您必须使用 BouncyCastle 1.72 或更高版本。
7.1.6. Apache CXF 总线选择策略 复制链接链接已复制到粘贴板!
在容器中运行的客户端的默认总线选择策略已从 THREAD_BUS 改为 TCCL_BUS。对于运行内存不足的客户端,默认的策略仍然是 THREAD_BUS。您可以使用以下方法之一将行为恢复到上一版本的行为。
-
使用系统属性
org.jboss.ws.cxf.jaxws-client.bus.strategy值设置为THREAD_BUS来启动 JBoss EAP 服务器。 - 在客户端代码中明确设置选择策略。
7.1.7. WebServiceRef 的 Jakarta XML Web Services 2.2 要求 复制链接链接已复制到粘贴板!
容器必须使用 Jakarta XML Web Services 2.2 风格构造器(在构造器中包含 WebServiceFeature 类)以构建注入 Web 服务引用的客户端。JBoss EAP 6.4 包括了 JBossWS 4,隐藏了这一要求。从包含 JBossWS 5 的 JBoss EAP 7 开始,此要求不会被隐藏。这表明,容器注入的服务类必须通过更新现有代码来实现 Jakarta XML Web 服务 2.2 或更高版本,以使用包含一个或多个 WebServiceFeature 参数的 jakarta.xml.ws.Service 构造器。
protected Service(URL wsdlDocumentLocation,
QName serviceName,
WebServiceFeature... features)
protected Service(URL wsdlDocumentLocation,
QName serviceName,
WebServiceFeature... features)
7.1.8. IgnoreHttpsHost CN 检查更改 复制链接链接已复制到粘贴板!
在以前的版本中,您可以通过将系统属性 org.jboss.security.ignoreHttpsHost 设置为 true 来禁用对证书中提供的服务通用名称(CN)的 HTTPS URL 主机名检查。这个系统属性名称已被 cxf.tls-client.disableCNCheck 替代。
7.1.9. 服务器端配置和类加载 复制链接链接已复制到粘贴板!
由于启用注入服务端点和服务客户端处理程序,便无法再自动加载来自 org.jboss.as.webservices.server.integration JBoss 模块的处理程序类。如果您的应用程序依赖于给定的预定义配置,您可能需要为部署显式定义新的模块依赖项。如需更多信息,请参阅 迁移显式模块依赖项。
7.1.10. 弃用 Java 结束的标准覆盖机制 复制链接链接已复制到粘贴板!
JDK 1.8_40 中弃用了 Java 背书的标准覆盖机制,旨在将其从 JDK 9 中删除。这种机制允许开发人员通过将 JAR 放置到 JRE 中的终端目录中,使库可供所有部署的应用程序使用。
从 JBoss EAP 7 发行版本开始,如果您的应用程序使用了 Apache CXF 的 JBossWS 实施,它会确保以正确顺序添加所需的依赖项,您不应受到此更改的影响。如果您的应用程序直接访问 Apache CXF,则现在必须在 JBossWS 依赖项后提供 Apache CXF 依赖项,作为应用程序部署的一部分。
7.1.11. EAR 归档中的描述符规格 复制链接链接已复制到粘贴板!
在以前的 JBoss EAP 版本中,您可以在 JAR 归档的 META-INF/ 目录中为 Jakarta Enterprise Beans Web 服务部署配置 jboss-webservices.xml 部署描述符文件,或在 POJO Web 服务部署和 POJO Web 服务部署和 Jakarta Enterprise Beans Web 服务端点中捆绑在 WAR 归档的 WEB-INF/ 目录中配置 jboss-webservices.xml 部署描述符文件。
从 JBoss EAP 7 开始,您可以在 EAR 存档的 META-INF/ 目录中配置 jboss-webservices.xml 部署描述符文件。如果在 EAR 归档和 JAR 或 WAR 归档中找到 文件,则 JAR 或 WAR 文件中的配置数据会覆盖 EAR 描述符文件中的对应数据。
jboss-webservices.xml