第 5 章 应用程序迁移更改
5.1. Web 服务应用程序更改 复制链接链接已复制到粘贴板!
JBossWS 5 对 JBoss EAP 7 web 服务提供了新的特性和性能改进,主要是通过升级 Apache CXF、Apache WSS4J 和 Apache Santuario 组件。
5.1.1. JAX-RPC 支持更改 复制链接链接已复制到粘贴板!
基于 XML 的 RPC(JAX-RPC)的 Java API 在 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.xml
XML 描述符文件,其中包含<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>
。
5.1.2. Apache CXF Spring web 服务更改 复制链接链接已复制到粘贴板!
在以前的 JBoss EAP 版本中,您可以通过包含带有端点部署存档的 jbossws-cxf.xml
配置文件来自定义 JBossWS 和 Apache CXF 集成。一个用例是,为 Apache CXF 总线上的 Web 服务客户端和服务器端点配置拦截器链。此集成需要在 JBoss EAP 服务器中部署 Spring。
JBoss EAP 7 不再支持 Spring 集成。包含 jbossws-cxf.xml
描述符配置文件的任何应用程序都必须修改,以替换该文件中定义的自定义配置。虽然仍然可以直接访问 Apache CXF API,但请注意,应用程序将无法可移植。
建议的方法将 Spring 自定义配置替换为新的 JBossWS 描述符配置选项。基于 JBossWS 描述符的方法提供类似功能,无需修改客户端端点代码。在某些情况下,您可以将 Spring 替换为上下文依赖注入(CDI)。
Apache CXF 拦截器
JBossWS 描述符提供了新的配置选项,允许您在不修改客户端端点代码的情况下声明拦截器。反之,您可以通过为 cxf.interceptors.in
和 cxf.interceptors.out
属性指定拦截器名称列表,在预定义的客户端和端点配置中声明拦截器。
以下是使用这些属性声明拦截器的 jaxws-endpoint-config.xml
文件的示例。
Apache CXF 功能
JBossWS 描述符允许您通过为 cxf.features
属性指定功能列表,在预定义的客户端和端点配置中声明功能。
以下是使用此属性声明功能的 jaxws-endpoint-config.xml
文件的示例。
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 主机名检查。 |
5.1.3. WS-Security 更改 复制链接链接已复制到粘贴板!
-
如果您的应用程序包含访问
org.apache.ws.security.WSPasswordCallback
类的自定义回调处理器,请注意,此类已移到org.apache.wss4j.common.ext
软件包。 -
org.apache.ws.saml.ext 软件包中的大多数
SAML Bean 对象已移到org.apache.wss4j.common.saml 软件包
。 - 默认情况下,不允许使用 RSA v1.5 密钥传输和所有相关算法。
-
以前,安全令牌服务(STS)仅在
BehalfOf
令牌上进行验证。现在,它还会验证ActAs
令牌。因此,必须在为ActAs
令牌提供的UsernameToken
中指定有效的用户名和密码。 -
SAML 持有者令牌现在需要具有内部签名。
org.apache.wss4j.dom.SamlAsertionValidator
类现在有一个setRequireBearerSignature()
方法,用于启用或禁用签名验证。
5.1.4. JBoss 模块结构更改 复制链接链接已复制到粘贴板!
cxf-api
和 cxf-rt-core
JARs 已合并到一个 cxf-core
JAR 中。因此,JBoss EAP 中的 org.apache.cxf
模块现在包含 cxf-core
JAR,并公开比上一版本更多的类。
5.1.5. Bouncy Castle 要求和更改 复制链接链接已复制到粘贴板!
如果要将 AES 加密与 Galois/Counter Mode(GCM)用于 XML/WS-Security 中的对称加密,则需要 BouncyCastle Security Provider。
JBoss EAP 7 附带 org.bouncastle
模块,而 JBossWS 现在能够依靠其课程加载程序来获取和使用 BouncyCastle 安全提供商。因此,在当前 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.49、1.51 或更高。
5.1.6. Apache CXF 总线选择策略 复制链接链接已复制到粘贴板!
在容器中运行的客户端的默认总线选择策略已从 THREAD_BUS
改为 TCCL_BUS
。对于运行内存不足的客户端,默认的策略仍然是 THREAD_BUS
。您可以使用以下方法之一将行为恢复到之前的版本。
-
使用系统属性
org.jboss.ws.cxf.jaxws-client.bus.strategy
值设置为THREAD_BUS
来启动 JBoss EAP 服务器。 - 在客户端代码中明确设置选择策略。
5.1.7. WebServiceRef 的 Jakarta XML Web Services 2.2 要求 复制链接链接已复制到粘贴板!
容器必须使用 Jakarta XML Web 服务 2.2 风格构造器,它将 WebServiceFeature 类包含在构造器中,以构建注入 Web 服务引用的客户端。JBoss EAP 6.4 包括了 JBossWS 4,隐藏了这一要求。JBoss EAP 7 包括了 JBossWS 5,不再隐藏了这一要求。这意味着,容器注入的用户提供的服务类必须通过更新现有代码来实现 Jakarta XML Web Services 2.2 或更高版本,以使用包含一个或多个 WebServiceFeature
参数的 javax.xml.ws.Service
结构器。
protected Service(URL wsdlDocumentLocation, QName serviceName, WebServiceFeature... features)
protected Service(URL wsdlDocumentLocation,
QName serviceName,
WebServiceFeature... features)
5.1.8. IgnoreHttpsHost CN 检查更改 复制链接链接已复制到粘贴板!
在以前的版本中,您可以通过将系统属性 org.jboss.security.ignoreHttpsHost
设置为 true
来禁用对证书中提供的服务通用名称(CN)的 HTTPS URL 主机名检查。这个系统属性名称已被 cxf.tls-client.disableCNCheck
替代。
5.1.9. 服务器端配置和类加载 复制链接链接已复制到粘贴板!
由于启用注入服务端点和服务客户端处理程序,便无法再自动加载来自 org.jboss.as.webservices.server.integration
JBoss 模块的处理程序类。如果您的应用程序依赖于给定的预定义的配置,您可能需要为部署显式定义新的模块依赖项。如需更多信息,请参阅迁移模块依赖项
5.1.10. 弃用 Java 签名的标准覆盖机制 复制链接链接已复制到粘贴板!
JDK 1.8_40 中弃用了 Java 背书的标准覆盖机制,旨在将其从 JDK 9 中删除。这种机制使开发人员能够通过将 JARs 放入 JRE 中的最终目录,使库可供所有部署的应用程序使用。
如果您的应用程序使用 Apache CXF 的 JBossWS 实施,JBoss EAP 7 可确保以正确顺序添加所需的依赖项,您不应受到此更改的影响。如果您的应用程序直接访问 Apache CXF,则现在必须在 JBossWS 依赖项作为应用程序部署的一部分后提供 Apache CXF 依赖项。
5.1.11. EAR 归档中的描述符规格 复制链接链接已复制到粘贴板!
在以前的 JBoss EAP 版本中,您可以为 Jakarta Enterprise Beans Web 服务部署描述符文件配置 jboss-webservices.xml
部署描述符文件,在 JAR 存档的 META-INF/
目录中配置 JAR 存档或 WEB-INF/
目录中用于 POJO Web 服务部署以及 Jakarta Enterprise Beans Web 服务端点的 Jakarta Enterprise Beans Web 服务端点。
在 JBoss EAP 7 中,您现在可以在 EAR 归档的 META-INF/
目录中配置 jboss-webservices.xml
部署描述符文件。如果 EAR 归档和 JAR 或 WAR 存档中都找到了 jboss-webservices.xml
文件,则 JAR 或 WAR 中的 jboss-webservices.xml
文件中的配置数据会覆盖 EAR 描述符文件中对应的数据。