001 /** 002 * Copyright 2005-2012 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.ksb.messaging.serviceconnectors; 017 018 import org.apache.cxf.aegis.databinding.AegisDatabinding; 019 import org.apache.cxf.frontend.ClientProxyFactoryBean; 020 import org.apache.cxf.interceptor.LoggingInInterceptor; 021 import org.apache.cxf.interceptor.LoggingOutInterceptor; 022 import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; 023 import org.kuali.rice.core.api.exception.RiceRuntimeException; 024 import org.kuali.rice.ksb.api.bus.support.SoapServiceConfiguration; 025 import org.kuali.rice.ksb.impl.cxf.interceptors.ImmutableCollectionsInInterceptor; 026 import org.kuali.rice.ksb.security.soap.CXFWSS4JInInterceptor; 027 import org.kuali.rice.ksb.security.soap.CXFWSS4JOutInterceptor; 028 import org.kuali.rice.ksb.security.soap.CredentialsOutHandler; 029 import org.kuali.rice.ksb.service.KSBServiceLocator; 030 031 import java.net.URL; 032 033 034 /** 035 * 036 * @author Kuali Rice Team (rice.collab@kuali.org) 037 * @since 0.9 038 */ 039 public class SOAPConnector extends AbstractServiceConnector { 040 041 public SOAPConnector(final SoapServiceConfiguration serviceConfiguration, final URL alternateEndpointUrl) { 042 super(serviceConfiguration, alternateEndpointUrl); 043 } 044 045 @Override 046 public SoapServiceConfiguration getServiceConfiguration() { 047 return (SoapServiceConfiguration) super.getServiceConfiguration(); 048 } 049 050 /** 051 * This overridden method returns a CXF client praoxy for web service. 052 * 053 * @see org.kuali.rice.ksb.messaging.serviceconnectors.ServiceConnector#getService() 054 */ 055 public Object getService() { 056 ClientProxyFactoryBean clientFactory; 057 058 //Use the correct bean factory depending on pojo service or jaxws service 059 if (getServiceConfiguration().isJaxWsService()){ 060 clientFactory = new JaxWsProxyFactoryBean(); 061 } else { 062 clientFactory = new ClientProxyFactoryBean(); 063 clientFactory.getServiceFactory().setDataBinding(new AegisDatabinding()); 064 } 065 066 try { 067 clientFactory.setServiceClass(Class.forName(getServiceConfiguration().getServiceInterface())); 068 } catch (ClassNotFoundException e) { 069 throw new RiceRuntimeException("Failed to connect to soap service " + getServiceConfiguration().getServiceName() + " because failed to load interface class: " + getServiceConfiguration().getServiceInterface(), e); 070 } 071 clientFactory.setBus(KSBServiceLocator.getCXFBus()); 072 clientFactory.setServiceName(getServiceConfiguration().getServiceName()); 073 clientFactory.setAddress(getActualEndpointUrl().toExternalForm()); 074 075 //Set logging, transformation, and security interceptors 076 clientFactory.getOutInterceptors().add(new LoggingOutInterceptor()); 077 clientFactory.getOutInterceptors().add(new CXFWSS4JOutInterceptor(getServiceConfiguration().getBusSecurity())); 078 if (getCredentialsSource() != null) { 079 clientFactory.getOutInterceptors().add(new CredentialsOutHandler(getCredentialsSource(), getServiceConfiguration())); 080 } 081 082 clientFactory.getInInterceptors().add(new LoggingInInterceptor()); 083 clientFactory.getInInterceptors().add(new CXFWSS4JInInterceptor(getServiceConfiguration().getBusSecurity())); 084 clientFactory.getInInterceptors().add(new ImmutableCollectionsInInterceptor()); 085 086 087 Object service = clientFactory.create(); 088 return getServiceProxyWithFailureMode(service, getServiceConfiguration()); 089 } 090 }