3.5. 分配客户端和端点配置
可以通过以下方式分配客户端和端点配置:
- 通过注释(端点)或 API 编程为客户端明确分配.
- 从默认描述符自动分配配置。
- 自动分配容器的配置。
3.5.1. 显式配置分配
明确的配置分配适用于必须提前知道其端点或客户端的开发人员。配置来自应用部署中包含的描述符,或者包含在 webservices
子系统中。
3.5.1.1. 配置部署描述符
可以包含 JAX-WS 客户端和端点实施的 Java EE 存档还可以包含预定义的客户端和端点配置声明。给定存档的所有端点或客户端配置定义必须在一个部署描述符文件中提供,该文件必须是可在 EAP_HOME/docs/schema/schema/jbossws-jaxws-config_4_0.xsd
中找到的模式实施。可以在部署描述符文件中定义许多端点或客户端配置。每一配置必须具有在部署应用的服务器中唯一的名称。配置名称不能由应用外的端点或客户端实施引用。
示例:带有两个端点配置的描述符
<?xml version="1.0" encoding="UTF-8"?> <jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd"> <endpoint-config> <config-name>org.jboss.test.ws.jaxws.jbws3282.Endpoint4Impl</config-name> <pre-handler-chains> <javaee:handler-chain> <javaee:handler> <javaee:handler-name>Log Handler</javaee:handler-name> <javaee:handler-class>org.jboss.test.ws.jaxws.jbws3282.LogHandler</javaee:handler-class> </javaee:handler> </javaee:handler-chain> </pre-handler-chains> <post-handler-chains> <javaee:handler-chain> <javaee:handler> <javaee:handler-name>Routing Handler</javaee:handler-name> <javaee:handler-class>org.jboss.test.ws.jaxws.jbws3282.RoutingHandler</javaee:handler-class> </javaee:handler> </javaee:handler-chain> </post-handler-chains> </endpoint-config> <endpoint-config> <config-name>EP6-config</config-name> <post-handler-chains> <javaee:handler-chain> <javaee:handler> <javaee:handler-name>Authorization Handler</javaee:handler-name> <javaee:handler-class>org.jboss.test.ws.jaxws.jbws3282.AuthorizationHandler</javaee:handler-class> </javaee:handler> </javaee:handler-chain> </post-handler-chains> </endpoint-config> </jaxws-config>
同样,可以在描述符中指定客户端配置,该描述符仍在实施上述架构:
<?xml version="1.0" encoding="UTF-8"?> <jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd"> <client-config> <config-name>Custom Client Config</config-name> <pre-handler-chains> <javaee:handler-chain> <javaee:handler> <javaee:handler-name>Routing Handler</javaee:handler-name> <javaee:handler-class>org.jboss.test.ws.jaxws.clientConfig.RoutingHandler</javaee:handler-class> </javaee:handler> <javaee:handler> <javaee:handler-name>Custom Handler</javaee:handler-name> <javaee:handler-class>org.jboss.test.ws.jaxws.clientConfig.CustomHandler</javaee:handler-class> </javaee:handler> </javaee:handler-chain> </pre-handler-chains> </client-config> <client-config> <config-name>Another Client Config</config-name> <post-handler-chains> <javaee:handler-chain> <javaee:handler> <javaee:handler-name>Routing Handler</javaee:handler-name> <javaee:handler-class>org.jboss.test.ws.jaxws.clientConfig.RoutingHandler</javaee:handler-class> </javaee:handler> </javaee:handler-chain> </post-handler-chains> </client-config> </jaxws-config>
3.5.1.2. 应用程序服务器配置
JBoss EAP 允许在 webservices
子系统中声明 JBossWS 客户端和服务器预定义配置。因此,可以声明要添加到分配给给定配置的每个端点或客户端的链中的服务器范围的处理程序。
标准配置
默认情况下,在相同 JBoss EAP 实例和端点中运行的客户端被分配有标准配置。除非设置了不同的配置,否则将使用默认值。这样,管理员可以针对客户端和端点配置调整默认处理程序链。webservices
子系统中使用的默认客户端和端点配置的名称是 Standard-Client-Config
和 Standard-Endpoint-Config
。
处理程序类
在设置服务器范围处理程序时,处理程序类需要通过各个 ws 部署类加载器来提供。因此,可能需要在将使用给定预定义配置的部署中指定正确的模块依赖项。确保部署中指定了正确的模块依赖项的一种方法是将依赖项添加到包含处理程序类的模块中,其中一个模块已自动设置为任何部署,如 org.jboss.ws.spi
。
配置示例
示例:默认子系统配置
<subsystem xmlns="urn:jboss:domain:webservices:2.0"> <!-- ... --> <endpoint-config name="Standard-Endpoint-Config"/> <endpoint-config name="Recording-Endpoint-Config"> <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM"> <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/> </pre-handler-chain> </endpoint-config> <client-config name="Standard-Client-Config"/> </subsystem>
部署特定 ws-security 端点设置的配置文件:
<jaxws-config xmlns="urn:jboss:jbossws-jaxws-config:4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="urn:jboss:jbossws-jaxws-config:4.0 schema/jbossws-jaxws-config_4_0.xsd"> <endpoint-config> <config-name>Custom WS-Security Endpoint</config-name> <property> <property-name>ws-security.signature.properties</property-name> <property-value>bob.properties</property-value> </property> <property> <property-name>ws-security.encryption.properties</property-name> <property-value>bob.properties</property-value> </property> <property> <property-name>ws-security.signature.username</property-name> <property-value>bob</property-value> </property> <property> <property-name>ws-security.encryption.username</property-name> <property-value>alice</property-value> </property> <property> <property-name>ws-security.callback-handler</property-name> <property-value>org.jboss.test.ws.jaxws.samples.wsse.policy.basic.KeystorePasswordCallback</property-value> </property> </endpoint-config> </jaxws-config>
JBoss EAP 默认配置被修改为默认为 SOAP 消息 schema-validation on:
<subsystem xmlns="urn:jboss:domain:webservices:2.0"> <!-- ... --> <endpoint-config name="Standard-Endpoint-Config"> <property name="schema-validation-enabled" value="true"/> </endpoint-config> <!-- ... --> <client-config name="Standard-Client-Config"> <property name="schema-validation-enabled" value="true"/> </client-config> </subsystem>
3.5.1.3. EndpointConfig Annotation
旦配置可用于给定应用,则使用 org.jboss.ws.api.annotation.EndpointConfig
注释来分配端点配置到 JAX-WS 端点实施。当您分配 webservices
子系统中定义的配置时,您只需要指定配置名称。当您分配应用中定义的配置时,您需要指定部署描述符的相对路径和配置名称。
示例: EndpointConfig 注解
@EndpointConfig(configFile = "WEB-INF/my-endpoint-config.xml", configName = "Custom WS-Security Endpoint") public class ServiceImpl implements ServiceIface { public String sayHello() { return "Secure Hello World!"; } }
3.5.1.4. JAX-WS Feature
您还可以使用 org.jboss.ws.api.configuration.ClientConfig 功能设置
配置,该配置是 JBossWS 提供的 JAX-WS 功能扩展。
import org.jboss.ws.api.configuration.ClientConfigFeature; Service service = Service.create(wsdlURL, serviceName); Endpoint port = service.getPort(Endpoint.class, new ClientConfigFeature("META-INF/my-client-config.xml", "Custom Client Config")); port.echo("Kermit");
您还可以通过传递 true
传递给 ClientConfigFeature
构造器来设置指定配置的属性。
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"));
3.5.1.5. API 明确设置
或者,JBossWS API 附带可用于在构建客户端时分配配置的设备类。
处理程序
JAX-WS 处理程序是从客户端配置中读取的,如下所示:
import org.jboss.ws.api.configuration.ClientConfigUtil; import org.jboss.ws.api.configuration.ClientConfigurer; Service service = Service.create(wsdlURL, serviceName); Endpoint port = service.getPort(Endpoint.class); BindingProvider bp = (BindingProvider)port; ClientConfigurer configurer = ClientConfigUtil.resolveClientConfigurer(); configurer.setConfigHandlers(bp, "META-INF/my-client-config.xml", "Custom Client Config"); port.echo("Kermit");
您还可以使用 ClientConfigUtil
实用程序类来设置处理程序。
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");
属性
类似地,属性从客户端配置中读取,如下所示:
import org.jboss.ws.api.configuration.ClientConfigUtil; import org.jboss.ws.api.configuration.ClientConfigurer; Service service = Service.create(wsdlURL, serviceName); Endpoint port = service.getPort(Endpoint.class); ClientConfigUtil.setConfigProperties(port, "META-INF/my-client-config.xml", "Custom Client Config"); port.echo("Kermit");
您还可以使用 ClientConfigUtil
实用程序类来设置属性。
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");