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.impl.cxf.interceptors.ImmutableCollectionsInInterceptor;
31 import org.kuali.rice.ksb.security.soap.CXFWSS4JInInterceptor;
32 import org.kuali.rice.ksb.security.soap.CXFWSS4JOutInterceptor;
33
34
35
36
37
38
39 public class SOAPServiceExporter extends AbstractWebServiceExporter implements ServiceExporter {
40
41 static final Logger LOG = Logger.getLogger(SOAPServiceExporter.class);
42
43 public SOAPServiceExporter(SoapServiceDefinition serviceDefinition, Bus cxfBus, ServerRegistry cxfServerRegistry) {
44 super(serviceDefinition, cxfBus, cxfServerRegistry);
45 }
46
47
48
49
50
51
52
53 @Override
54 public void publishService(ServiceDefinition serviceDefinition, Object serviceImpl, String address) {
55 ServerFactoryBean svrFactory;
56
57 SoapServiceDefinition soapServiceDefinition = (SoapServiceDefinition)serviceDefinition;
58
59
60 if (soapServiceDefinition.isJaxWsService()){
61 LOG.info("Creating JaxWsService " + soapServiceDefinition.getServiceName());
62 svrFactory = new JaxWsServerFactoryBean();
63 } else {
64 svrFactory = new ServerFactoryBean();
65
66
67 svrFactory.getServiceFactory().setDataBinding(new AegisDatabinding());
68 }
69
70 svrFactory.setBus(getCXFBus());
71 svrFactory.setServiceName(soapServiceDefinition.getServiceName());
72 svrFactory.setAddress(address);
73 svrFactory.setPublishedEndpointUrl(soapServiceDefinition.getEndpointUrl().toExternalForm());
74 svrFactory.setServiceBean(serviceImpl);
75
76 try {
77 svrFactory.setServiceClass(Class.forName(soapServiceDefinition.getServiceInterface()));
78 } catch (ClassNotFoundException e) {
79 throw new RiceRuntimeException("Failed to publish service " + soapServiceDefinition.getServiceName() + " because service interface could not be loaded: " + soapServiceDefinition.getServiceInterface(), e);
80 }
81
82
83 svrFactory.getInInterceptors().add(new LoggingInInterceptor());
84 svrFactory.getInInterceptors().add(new CXFWSS4JInInterceptor(soapServiceDefinition.getBusSecurity()));
85 svrFactory.getInInterceptors().add(new ImmutableCollectionsInInterceptor());
86
87 svrFactory.getOutInterceptors().add(new LoggingOutInterceptor());
88 svrFactory.getOutInterceptors().add(new CXFWSS4JOutInterceptor(soapServiceDefinition.getBusSecurity()));
89
90 svrFactory.getInFaultInterceptors().add(new CXFWSS4JInInterceptor(soapServiceDefinition.getBusSecurity()));
91 svrFactory.getOutFaultInterceptors().add(new CXFWSS4JOutInterceptor(soapServiceDefinition.getBusSecurity()));
92
93 svrFactory.create();
94 }
95
96 }