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 }