Author: alessio.soldano(a)jboss.com
Date: 2010-08-04 07:47:08 -0400 (Wed, 04 Aug 2010)
New Revision: 12727
Modified:
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/configuration/JBossWSNonSpringBusFactory.java
Log:
[JBWS-3087] Enabling WS-Policy engine in NonSpring bus factory (1st step)
Modified:
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/configuration/JBossWSNonSpringBusFactory.java
===================================================================
---
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/configuration/JBossWSNonSpringBusFactory.java 2010-08-04
10:50:26 UTC (rev 12726)
+++
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/configuration/JBossWSNonSpringBusFactory.java 2010-08-04
11:47:08 UTC (rev 12727)
@@ -21,13 +21,39 @@
*/
package org.jboss.wsf.stack.cxf.client.configuration;
+import java.util.Collection;
import java.util.HashMap;
+import java.util.LinkedList;
import java.util.Map;
+import javax.xml.bind.JAXBException;
+import javax.xml.namespace.QName;
+
import org.apache.cxf.Bus;
import org.apache.cxf.bus.CXFBusFactory;
import org.apache.cxf.bus.extension.ExtensionManagerBus;
import org.apache.cxf.configuration.Configurer;
+import org.apache.cxf.ws.addressing.Names;
+import org.apache.cxf.ws.addressing.policy.AddressingAssertionBuilder;
+import org.apache.cxf.ws.addressing.policy.AddressingPolicyInterceptorProvider;
+import org.apache.cxf.ws.policy.AssertionBuilderRegistry;
+import org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl;
+import org.apache.cxf.ws.policy.PolicyBuilder;
+import org.apache.cxf.ws.policy.PolicyBuilderImpl;
+import org.apache.cxf.ws.policy.PolicyEngine;
+import org.apache.cxf.ws.policy.PolicyEngineImpl;
+import org.apache.cxf.ws.policy.PolicyInterceptorProviderRegistry;
+import org.apache.cxf.ws.policy.PolicyInterceptorProviderRegistryImpl;
+import org.apache.cxf.ws.policy.PolicyProvider;
+import org.apache.cxf.ws.policy.attachment.ServiceModelPolicyProvider;
+import org.apache.cxf.ws.policy.attachment.external.DomainExpressionBuilderRegistry;
+import org.apache.cxf.ws.policy.attachment.wsdl11.Wsdl11AttachmentPolicyProvider;
+import org.apache.cxf.ws.policy.builder.primitive.PrimitiveAssertionBuilder;
+import org.apache.cxf.ws.policy.mtom.MTOMAssertionBuilder;
+import org.apache.cxf.ws.policy.mtom.MTOMPolicyInterceptorProvider;
+import org.apache.cxf.ws.rm.RMManager;
+import org.apache.cxf.ws.rm.policy.RMAssertionBuilder;
+import org.apache.cxf.ws.rm.policy.RMPolicyInterceptorProvider;
/**
*
@@ -37,7 +63,7 @@
*/
public class JBossWSNonSpringBusFactory extends CXFBusFactory
{
- @SuppressWarnings("unchecked")
+ @SuppressWarnings("rawtypes")
@Override
public Bus createBus(Map<Class, Object> extensions, Map<String, Object>
properties) {
if (extensions == null)
@@ -48,13 +74,81 @@
{
extensions.put(Configurer.class, new JBossWSNonSpringConfigurer(new
BeanCustomizer()));
}
+
+ preparePolicyEngine(extensions);
+
+ Bus bus = new ExtensionManagerBus(extensions, properties);
- Bus bus = new ExtensionManagerBus(extensions, properties);
+ initPolicyEngine((PolicyEngineImpl)extensions.get(PolicyEngine.class), bus);
+
possiblySetDefaultBus(bus);
initializeBus(bus);
return bus;
- }
+ }
+ @SuppressWarnings("rawtypes")
+ private static void preparePolicyEngine(Map<Class, Object> extensions)
+ {
+ PolicyEngineImpl engine = new PolicyEngineImpl(true);
+ extensions.put(PolicyEngine.class, engine);
+ DomainExpressionBuilderRegistry domainExpBuilderRegistry = new
DomainExpressionBuilderRegistry();
+ extensions.put(DomainExpressionBuilderRegistry.class, domainExpBuilderRegistry);
+ }
+
+ private static void initPolicyEngine(PolicyEngineImpl engine, Bus bus)
+ {
+ engine.setBus(bus);
+ AssertionBuilderRegistry assertionBuilderRegistry = new
AssertionBuilderRegistryImpl();
+ bus.setExtension(assertionBuilderRegistry, AssertionBuilderRegistry.class);
+ PolicyInterceptorProviderRegistry policyInterceptorProviderRegistry = new
PolicyInterceptorProviderRegistryImpl();
+ bus.setExtension(policyInterceptorProviderRegistry,
PolicyInterceptorProviderRegistry.class);
+ PolicyBuilderImpl policyBuilder = new PolicyBuilderImpl();
+ policyBuilder.setBus(bus);
+ policyBuilder.setAssertionBuilderRegistry(assertionBuilderRegistry);
+ bus.setExtension(policyBuilder, PolicyBuilder.class);
+ Collection<PolicyProvider> policyProviders = engine.getPolicyProviders();
+ Wsdl11AttachmentPolicyProvider wsdl11PolicyAttachmentProvider = new
Wsdl11AttachmentPolicyProvider(bus);
+ wsdl11PolicyAttachmentProvider.setBuilder(policyBuilder);
+ wsdl11PolicyAttachmentProvider.setRegistry(engine.getRegistry());
+ policyProviders.add(wsdl11PolicyAttachmentProvider);
+ ServiceModelPolicyProvider serviceModelPolicyProvider = new
ServiceModelPolicyProvider(bus);
+ serviceModelPolicyProvider.setBuilder(policyBuilder);
+ serviceModelPolicyProvider.setRegistry(engine.getRegistry());
+ policyProviders.add(serviceModelPolicyProvider);
+
+ //MTOM Policy
+ assertionBuilderRegistry.register(new MTOMAssertionBuilder());
+ policyInterceptorProviderRegistry.register(new MTOMPolicyInterceptorProvider());
+
+ //RM
+ RMManager rmManager = new RMManager();
+// rmManager.initialise();
+// rmManager.registerListeners();
+ rmManager.setBus(bus);
+
+ //RM Policy
+ policyInterceptorProviderRegistry.register(new RMPolicyInterceptorProvider(bus));
+ try
+ {
+ assertionBuilderRegistry.register(new RMAssertionBuilder());
+ }
+ catch (JAXBException e)
+ {
+ throw new RuntimeException(e);
+ }
+
+ //Addressing Policy
+ policyInterceptorProviderRegistry.register(new
AddressingPolicyInterceptorProvider());
+ assertionBuilderRegistry.register(new AddressingAssertionBuilder(bus));
+ Collection<QName> addressingKnownEls = new LinkedList<QName>();
+ addressingKnownEls.add(new
QName("http://schemas.xmlsoap.org/ws/2004/08/addressing/policy",
Names.WSAW_USING_ADDRESSING_NAME));
+ addressingKnownEls.add(new QName(Names.WSA_NAMESPACE_WSDL_NAME_OLD,
Names.WSAW_USING_ADDRESSING_NAME));
+ addressingKnownEls.add(Names.WSAW_USING_ADDRESSING_QNAME);
+ PrimitiveAssertionBuilder primitiveAssertionBuilder = new
PrimitiveAssertionBuilder(addressingKnownEls);
+ primitiveAssertionBuilder.setBus(bus);
+ assertionBuilderRegistry.register(primitiveAssertionBuilder);
+ }
+
@Override
protected void initializeBus(Bus bus) {
super.initializeBus(bus);