3.5. 分配客户端和端点配置
可以通过以下方式分配客户端和端点配置:
- 通过注释(端点)或 API 编程为客户端明确分配.
- 从默认描述符自动分配配置。
- 自动分配容器的配置。
3.5.1. 显式配置分配 复制链接链接已复制到粘贴板!
明确的配置分配适用于必须提前知道其端点或客户端的开发人员。配置来自应用部署中包含的描述符,或者包含在 webservices
子系统中。
3.5.1.1. 配置部署描述符 复制链接链接已复制到粘贴板!
可以包含 Jakarta XML Web 服务客户端和端点实施的 Jakarta EE 存档还可以包含预定义的客户端和端点配置声明。给定存档的所有端点或客户端配置定义必须在一个部署描述符文件中提供,该文件必须是可在 EAP_HOME/docs/schema/schema/jbossws-jaxws-config_4_0.xsd
中找到的模式实施。可以在部署描述符文件中定义许多端点或客户端配置。每一配置必须具有在部署应用的服务器中唯一的名称。配置名称不能由应用外的端点或客户端实施引用。
示例:带有两个端点配置的描述符
同样,可以在描述符中指定客户端配置,该描述符仍在实施上述架构:
3.5.1.2. 应用程序服务器配置 复制链接链接已复制到粘贴板!
JBoss EAP 允许在 webservices
子系统中声明 JBossWS 客户端和服务器预定义配置。因此,可以声明要添加到分配给给定配置的每个端点或客户端的链中的服务器范围的处理程序。
标准配置
默认情况下,在相同 JBoss EAP 实例和端点中运行的客户端被分配有标准配置。除非设置了不同的配置,否则将使用默认值。这样,管理员可以针对客户端和端点配置调整默认处理程序链。webservices
子系统中使用的默认客户端和端点配置的名称是 Standard-Client-Config
和 Standard-Endpoint-Config
。
处理程序类
在设置服务器范围处理程序时,处理程序类需要通过各个 ws 部署类加载器来提供。因此,可能需要在将使用给定预定义配置的部署中指定正确的模块依赖项。确保部署中指定了正确的模块依赖项的一种方法是将依赖项添加到包含处理程序类的模块中,其中一个模块已自动设置为任何部署,如 org.jboss.ws.spi
。
配置示例
示例:默认子系统配置
部署特定 ws-security 端点设置的配置文件:
JBoss EAP 默认配置被修改为默认为 SOAP 消息 schema-validation on:
3.5.1.3. EndpointConfig Annotation 复制链接链接已复制到粘贴板!
旦配置可用于给定应用,则使用 org.jboss.ws.api.annotation.EndpointConfig
注解来分配端点配置到 Jakarta XML Web Services 端点实施。当您分配 webservices
子系统中定义的配置时,您只需要指定配置名称。当您分配应用中定义的配置时,您需要指定部署描述符的相对路径和配置名称。
示例: EndpointConfig 注解
3.5.1.4. Jakarta XML Web 服务功能 复制链接链接已复制到粘贴板!
您还可以使用 org.jboss.ws.api.configuration.ClientConfig 功能设置
配置,该配置是 JBossWS 提供的 Jakarta XML Web 服务功能扩展。
您还可以通过传递 true
传递给 ClientConfigFeature
构造器来设置指定配置的属性。
Endpoint port = service.getPort(Endpoint.class, new ClientConfigFeature("META-INF/my-client-config.xml", "Custom Client Config"), true);
Endpoint port = service.getPort(Endpoint.class, new ClientConfigFeature("META-INF/my-client-config.xml", "Custom Client Config"), true);
在使用当前线程上下文类加载程序将其解析为资源后,JBossWS 解析了指定的配置文件。EAP_HOME/docs/schema/jbossws-jaxws-config_4_0.xsd
模式定义描述符内容,并包含在 jbossws-spi
构件中。
如果为配置文件传递 null
,则将从当前容器配置中读取配置(如果可用)。
Endpoint port = service.getPort(Endpoint.class, new ClientConfigFeature(null, "Container Custom Client Config"));
Endpoint port = service.getPort(Endpoint.class, new ClientConfigFeature(null, "Container Custom Client Config"));
3.5.1.5. API 明确设置 复制链接链接已复制到粘贴板!
或者,JBossWS API 附带可用于在构建客户端时分配配置的设备类。
处理程序
Jakarta XML Web 服务处理程序是从客户端配置中读取的,如下所示:
您还可以使用 ClientConfigUtil
实用程序类来设置处理程序。
ClientConfigUtil.setConfigHandlers(bp, "META-INF/my-client-config.xml", "Custom Client Config");
ClientConfigUtil.setConfigHandlers(bp, "META-INF/my-client-config.xml", "Custom Client Config");
默认 ClientConfigurer
实施在作为使用当前线程上下文类加载程序的资源解析后,会解析指定的配置文件。EAP_HOME/docs/schema/jbossws-jaxws-config_4_0.xsd
模式定义了描述符内容,包含在 jbossws-spi
构件中。
如果为配置文件传递 null
,则将从当前容器配置中读取配置(如果可用)。
ClientConfigurer configurer = ClientConfigUtil.resolveClientConfigurer(); configurer.setConfigHandlers(bp, null, "Container Custom Client Config");
ClientConfigurer configurer = ClientConfigUtil.resolveClientConfigurer();
configurer.setConfigHandlers(bp, null, "Container Custom Client Config");
Properties
类似地,属性从客户端配置中读取,如下所示:
您还可以使用 ClientConfigUtil
实用程序类来设置属性。
ClientConfigurer configurer = ClientConfigUtil.resolveClientConfigurer(); configurer.setConfigProperties(port, "META-INF/my-client-config.xml", "Custom Client Config");
ClientConfigurer configurer = ClientConfigUtil.resolveClientConfigurer();
configurer.setConfigProperties(port, "META-INF/my-client-config.xml", "Custom Client Config");
默认 ClientConfigurer
实施在作为使用当前线程上下文类加载程序的资源解析后,会解析指定的配置文件。EAP_HOME/docs/schema/jbossws-jaxws-config_4_0.xsd
模式定义了描述符内容,包含在 jbossws-spi
构件中。
如果为配置文件传递 null
,则将从当前容器配置中读取配置(如果可用)。
ClientConfigurer configurer = ClientConfigUtil.resolveClientConfigurer(); configurer.setConfigProperties(port, null, "Container Custom Client Config");
ClientConfigurer configurer = ClientConfigUtil.resolveClientConfigurer();
configurer.setConfigProperties(port, null, "Container Custom Client Config");
3.5.2. 从默认描述符自动配置 复制链接链接已复制到粘贴板!
在某些情况下,应用开发人员可能不知道需要用于其客户端和端点实施的配置。在其他情况下,可能不接受 JBossWS API 的显式使用,因为它是编译时间依赖关系。为应对这样的情形,JBossWS 允许在其根目录中包括应用的默认客户端、jaxws-client
-config.xml。在未指定配置文件名称时,这些将被解析为获取配置。
-config.xml 和
端点 jaxws-endpoint
<config-file>WEB-INF/jaxws-endpoint-config.xml</config-file>
<config-file>WEB-INF/jaxws-endpoint-config.xml</config-file>
如果没有指定配置名称,JBossWS 会自动查找名为 的配置:
- 端点实施类的完全限定名称(FQN),适用于 Jakarta XML Web 服务端点。
- 服务端点接口的 FQN,用于 Jakarta XML Web Services 客户端。
没有为 Dispatch
客户端选择自动配置名称。
例如,一个端点实施类 org.foo.bar.EndpointImpl
(没有显式设置预定义的配置)将导致 JBossWS 在应用部署 的根目录中查找
。同样,在客户端,实施 jaxws-endpoint-config.xml 描述符中的 org.foo.
bar.EndpointImplorg.foo.bar.Endpoint
接口的客户端代理将从 jaxws-client-config
进行设置读取。
.xml 描述符中名为 configuration 的 org.foo.bar.
Endpoint
3.5.3. 从容器自动分配配置 复制链接链接已复制到粘贴板!
在未提供显式配置并且默认描述符不可用或不包含相关配置时,JBossWS 将回退为从容器获取预定义配置。此行为为管理员提供了对 Jakarta XML Web Services 客户端和端点设置的额外控制,因为可以独立于部署的应用管理容器。
JBossWS 访问显式命名配置的 webservices
子系统。使用的默认配置名称有:
- 端点实施类的完全限定名称,适用于 Jakarta XML Web 服务端点。
- 服务端点接口的完全限定名称,适用于 Jakarta XML Web Services 客户端。
分配
客户端不会自动配置。如果没有找到使用以上名称计算的配置,则 Standard-Client-Config
和 Standard-Endpoint-Config
配置分别用于客户端和端点。