001: /*
002: * (C) Copyright 2000 - 2005 Nabh Information Systems, Inc.
003: *
004: * This program is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU General Public License
006: * as published by the Free Software Foundation; either version 2
007: * of the License, or (at your option) any later version.
008: *
009: * This program is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012: * GNU General Public License for more details.
013: *
014: * You should have received a copy of the GNU General Public License
015: * along with this program; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
017: *
018: */
019: package com.nabhinc.ws.service.adapter;
020:
021: import java.util.Vector;
022:
023: import com.nabhinc.ws.core.PropertyInfo;
024: import com.nabhinc.ws.core.WebServiceException;
025: import com.nabhinc.ws.core.WebServiceUtil;
026: import com.nabhinc.ws.service.core.JavaDelegateWebService;
027:
028: /**
029: * A Web service implementation that delegates operation
030: * execution to the corresponding method on a Java bean.
031: * <p/>
032: * Service Properties (* indicates required properties):<br/>
033: * <ul>
034: * <li>beanClass* - Java class name of the delegate object.</li>
035: * <li>scope - "service", "session", "request". The
036: * default is "service".</li>
037: * <li>attributeName - Specifies name of the session/appliaction attribute
038: * used for caching the implementation object. Applicable only when
039: * the scope is "session" or "application". </li>
040: * </ul>
041: * <p/>
042: * In addition you can specify properties to be set on the delegate
043: * Java bean object. These properties will depend on the particular
044: * Java bean class you are using and cannot be enumerated here.
045: *
046: * @author Padmanabh Dabke
047: * (c) 2005 Nabh Information Systems, Inc. All Rights Reserved.
048: */
049: public class JavaBeanAdapter extends JavaDelegateWebService {
050: private String jowsBeanClass = null;
051:
052: // Computed attributes
053: // private Class _jowsObjectClass = null;
054: private Vector _jowsBeanProps = new Vector();
055:
056: public void setBeanClass(String objClass) {
057: jowsBeanClass = objClass;
058: }
059:
060: /**
061: * Overrides the default implementation because we want to consider
062: * unrecognized properties as possible candidates for setting bean
063: * properties.
064: */
065: public void setProperties(PropertyInfo[] propInfo)
066: throws WebServiceException {
067: // Clear the bean props vector just in case the properties
068: // are being set after initialization.
069: _jowsBeanProps.clear();
070: jowsBeanClass = null;
071: jdwsScope = JavaDelegateWebService.DEFAULT_SCOPE;
072: jdwsAttributeName = JavaDelegateWebService.DEFAULT_DELEGATE_ATTRIB_NAME;
073:
074: for (int i = 0; i < propInfo.length; i++) {
075: if (propInfo[i].name.equals("beanClass")) {
076: jowsBeanClass = propInfo[i].value;
077: } else if (propInfo[i].name.equals("scope")) {
078: jdwsScope = propInfo[i].value;
079: } else if (propInfo[i].name.equals("attributeName")) {
080: jdwsAttributeName = propInfo[i].value;
081: } else {
082: // Assume it's a bean property
083: _jowsBeanProps.addElement(propInfo[i]);
084: }
085: }
086: checkProperties();
087: if (_jdwsScope == SCOPE_SERVICE)
088: _jdwsJavaObject = createDelegateInstance();
089: }
090:
091: protected void checkProperties() throws WebServiceException {
092: super .checkProperties();
093: if (jowsBeanClass == null) {
094: throw new WebServiceException(
095: "Java object class must be specified.");
096: } else {
097: try {
098: /* _jowsObjectClass = */Class.forName(jowsBeanClass);
099: } catch (Exception ex) {
100: throw new WebServiceException("Invalid object class: "
101: + jowsBeanClass + ".", ex);
102: }
103: }
104: }
105:
106: public Object createDelegateInstance() throws WebServiceException {
107: try {
108: Object javaObj = Class.forName(jowsBeanClass).newInstance();
109: for (int i = 0; i < _jowsBeanProps.size(); i++) {
110: PropertyInfo propInfo = (PropertyInfo) _jowsBeanProps
111: .elementAt(i);
112: WebServiceUtil.setProperty(javaObj, propInfo, true);
113: }
114: return javaObj;
115: } catch (Exception e) {
116: throw new WebServiceException(
117: "Failed to instantiate Java object.", e);
118: }
119:
120: }
121:
122: }
|