1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.rice.ksb.messaging.serviceexporters;
17  
18  
19  import org.apache.cxf.Bus;
20  import org.apache.cxf.aegis.databinding.AegisDatabinding;
21  import org.apache.cxf.endpoint.ServerRegistry;
22  import org.apache.cxf.frontend.ServerFactoryBean;
23  import org.apache.cxf.interceptor.LoggingInInterceptor;
24  import org.apache.cxf.interceptor.LoggingOutInterceptor;
25  import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
26  import org.apache.log4j.Logger;
27  import org.kuali.rice.core.api.exception.RiceRuntimeException;
28  import org.kuali.rice.ksb.api.bus.ServiceDefinition;
29  import org.kuali.rice.ksb.api.bus.support.SoapServiceDefinition;
30  import org.kuali.rice.ksb.security.soap.CXFWSS4JInInterceptor;
31  import org.kuali.rice.ksb.security.soap.CXFWSS4JOutInterceptor;
32  
33  
34  
35  
36  
37  
38  public class SOAPServiceExporter extends AbstractWebServiceExporter implements ServiceExporter {
39  
40  	static final Logger LOG = Logger.getLogger(SOAPServiceExporter.class);
41  		
42  	public SOAPServiceExporter(SoapServiceDefinition serviceDefinition, Bus cxfBus, ServerRegistry cxfServerRegistry) {
43  	    super(serviceDefinition, cxfBus, cxfServerRegistry);
44  	}
45  
46  	
47  
48  
49  
50  
51  
52  	@Override
53      public void publishService(ServiceDefinition serviceDefinition, Object serviceImpl, String address) {
54  		ServerFactoryBean svrFactory;
55  		
56  		SoapServiceDefinition soapServiceDefinition = (SoapServiceDefinition)serviceDefinition;
57  		
58  		
59  		if (soapServiceDefinition.isJaxWsService()){
60  			LOG.info("Creating JaxWsService " + soapServiceDefinition.getServiceName());
61  			svrFactory = new JaxWsServerFactoryBean();
62  		} else {
63  			svrFactory = new ServerFactoryBean();
64  			
65  			
66  			svrFactory.getServiceFactory().setDataBinding(new AegisDatabinding());
67  		}
68  	
69  		svrFactory.setBus(getCXFBus());
70  		svrFactory.setServiceName(soapServiceDefinition.getServiceName());
71  		svrFactory.setAddress(address);
72  		svrFactory.setPublishedEndpointUrl(soapServiceDefinition.getEndpointUrl().toExternalForm());
73  		svrFactory.setServiceBean(serviceImpl);
74  		
75  		try {
76  			svrFactory.setServiceClass(Class.forName(soapServiceDefinition.getServiceInterface()));
77  		} catch (ClassNotFoundException e) {
78  			throw new RiceRuntimeException("Failed to publish service " + soapServiceDefinition.getServiceName() + " because service interface could not be loaded: " + soapServiceDefinition.getServiceInterface(), e);
79  		}
80  		
81  		
82  		svrFactory.getInInterceptors().add(new LoggingInInterceptor());
83  		svrFactory.getInInterceptors().add(new CXFWSS4JInInterceptor(soapServiceDefinition.getBusSecurity()));
84  		
85  		svrFactory.getOutInterceptors().add(new LoggingOutInterceptor());
86  		svrFactory.getOutInterceptors().add(new CXFWSS4JOutInterceptor(soapServiceDefinition.getBusSecurity()));
87  		
88  		svrFactory.getInFaultInterceptors().add(new CXFWSS4JInInterceptor(soapServiceDefinition.getBusSecurity()));
89  		svrFactory.getOutFaultInterceptors().add(new CXFWSS4JOutInterceptor(soapServiceDefinition.getBusSecurity()));
90  		
91  		svrFactory.create();
92  	}
93  
94  }