View Javadoc

1   /**
2    * Copyright 2010 The Kuali Foundation Licensed under the
3    * Educational Community License, Version 2.0 (the "License"); you may
4    * not use this file except in compliance with the License. You may
5    * obtain a copy of the License at
6    *
7    * http://www.osedu.org/licenses/ECL-2.0
8    *
9    * Unless required by applicable law or agreed to in writing,
10   * software distributed under the License is distributed on an "AS IS"
11   * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12   * or implied. See the License for the specific language governing
13   * permissions and limitations under the License.
14   */
15  
16  package org.kuali.student.common.ws.beans;
17  
18  import java.net.URL;
19  
20  import javax.xml.namespace.QName;
21  import javax.xml.ws.BindingProvider;
22  import javax.xml.ws.Service;
23  
24  import org.springframework.core.io.ClassPathResource;
25  
26  public class JaxWsClientFactoryBean implements JaxWsClientFactory {
27      private Class<?> serviceEndpointInterface = null;
28      private String wsdlDocumentLocation = "";
29      private QName serviceQName = null;
30      private String serviceUrl = "";
31      private static final String CLASSPATH_PREFIX = "classpath:";
32      private Object client;
33      
34      @Override
35      public synchronized Object getObject() throws Exception {
36          if(client==null){
37  	    	URL url;
38  	        if (wsdlDocumentLocation.startsWith(CLASSPATH_PREFIX)) {
39  	            ClassPathResource cpr = new ClassPathResource(wsdlDocumentLocation.substring(CLASSPATH_PREFIX.length()));
40  	            url = cpr.getURL();
41  	        } else {
42  	            url = new URL(wsdlDocumentLocation);
43  	        }
44  	        Service service = Service.create(url, serviceQName);
45  	        client = service.getPort(serviceEndpointInterface);
46  	        // Override the service URL
47  	        if (this.serviceUrl != null && !"".equals(this.serviceUrl)) {
48  	            ((BindingProvider) client).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, this.serviceUrl);
49  	        }
50  	    }
51  
52          return client;
53      }
54  
55      @Override
56      public Class<?> getObjectType() {
57          return serviceEndpointInterface;
58      }
59  
60      /**
61       * @return the serviceEndpointInterface
62       */
63      public Class<?> getServiceEndpointInterface() {
64          return serviceEndpointInterface;
65      }
66  
67      /**
68       * @param serviceEndpointInterface
69       *            the serviceEndpointInterface to set
70       */
71      public void setServiceEndpointInterface(Class<?> serviceEndpointInterface) {
72          this.serviceEndpointInterface = serviceEndpointInterface;
73      }
74  
75   
76      /**
77       * @param serviceName
78       *            the serviceName to set
79       */
80      public void setServiceQNameString(String serviceName) {
81          this.serviceQName = QName.valueOf(serviceName);
82      }
83  
84      @Override
85      public boolean isSingleton() {
86          return true;
87      }
88  
89      /**
90       * @return the wsdlDocumentLocation
91       */
92      public String getWsdlLocation() {
93          return wsdlDocumentLocation;
94      }
95  
96      /**
97       * @param wsdlDocumentLocation
98       *            the wsdlDocumentLocation to set
99       */
100     public void setWsdlLocation(String wsdlDocumentLocation) {
101         this.wsdlDocumentLocation = wsdlDocumentLocation;
102     }
103 
104     /**
105      * @return the serviceUrl
106      */
107     public String getAddress() {
108         return serviceUrl;
109     }
110 
111     /**
112      * @param serviceUrl
113      *            the serviceUrl to set
114      */
115     public void setAddress(String add) {
116         this.serviceUrl = add;
117     }
118 
119 	/**
120 	 * @return the serviceQName
121 	 */
122 	public QName getServiceQName() {
123 		return serviceQName;
124 	}
125 
126 	/**
127 	 * @param serviceQName the serviceQName to set
128 	 */
129 	public void setServiceQName(QName serviceQName) {
130 		this.serviceQName = serviceQName;
131 	}
132 
133 	@Override
134 	public QName getServiceName() {
135 		return serviceQName;
136 	}
137 
138 	@Override
139 	public void setServiceName(QName serviceName) {
140 		this.serviceQName = serviceName;
141 	}
142 
143 }