User: cgjung
Date: 02/04/09 02:59:41
Modified: jboss.net/src/main/org/jboss/net/axis/server
AxisService.java AxisServiceMBean.java
EntityBeanDeserializer.java
EntityBeanDeserializerFactory.java
Log:
parameterizable typemappings.
adopted latest subdeployer changes/patches from Mr. Maisey.
Revision Changes Path
1.17 +8 -27
contrib/jboss.net/src/main/org/jboss/net/axis/server/AxisService.java
Index: AxisService.java
===================================================================
RCS file:
/cvsroot/jboss/contrib/jboss.net/src/main/org/jboss/net/axis/server/AxisService.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- AxisService.java 4 Apr 2002 04:34:41 -0000 1.16
+++ AxisService.java 9 Apr 2002 09:59:41 -0000 1.17
@@ -5,7 +5,7 @@
* See terms of license at gnu.org.
*/
-// $Id: AxisService.java,v 1.16 2002/04/04 04:34:41 user57 Exp $
+// $Id: AxisService.java,v 1.17 2002/04/09 09:59:41 cgjung Exp $
package org.jboss.net.axis.server;
@@ -18,8 +18,8 @@
import org.jboss.deployment.DeploymentInfo;
import org.jboss.deployment.MainDeployerMBean;
import org.jboss.deployment.SubDeployer;
+import org.jboss.deployment.SubDeployerSupport;
-import org.jboss.system.ServiceMBeanSupport;
import org.jboss.web.WebApplication;
import org.apache.log4j.Category;
@@ -84,11 +84,11 @@
* </ul>
* @created 27. September 2001
* @author <a href="mailto:[EMAIL PROTECTED]">Christoph G. Jung</a>
- * @version $Revision: 1.16 $
+ * @version $Revision: 1.17 $
*/
public class AxisService
- extends ServiceMBeanSupport
+ extends SubDeployerSupport
implements AxisServiceMBean, MBeanRegistration {
//
@@ -324,16 +324,7 @@
// and deploy the info
webDeployer.start(myDeploymentInfo);
- try {
- // Register with the main deployer
- server.invoke(
- MainDeployerMBean.OBJECT_NAME,
- "addDeployer",
- new Object[] { this },
- new String[] { "org.jboss.deployment.SubDeployer" });
- } catch (Exception e) {
- log.error("Could not register with MainDeployer", e);
- }
+ super.startService();
} else {
throw new Exception(Constants.CANNOT_FIND_WEB_DEPLOYER);
}
@@ -342,6 +333,9 @@
/** what to do to stop axis temporarily --> undeploy the servlet */
public void stopService() throws Exception {
+
+ super.stopService();
+
// tear down all running web services
//Is this really what you want to do? Not leave services running anyway?
for (Iterator apps = new java.util.ArrayList(deployments.values()).iterator();
@@ -358,19 +352,6 @@
} catch (Exception e) {
log.error("Could not undeploy deployment " + info, e);
}
- }
-
- // deregister from main deployer such that we do not get
- // web services assigned anymore
- try {
- // Register with the main deployer
- server.invoke(
- MainDeployerMBean.OBJECT_NAME,
- "removeDeployer",
- new Object[] { this },
- new String[] { "org.jboss.deployment.SubDeployer" });
- } catch (Exception e) {
- log.error("Could not deregister from MainDeployer", e);
}
// undeploy Axis servlet
1.5 +3 -3
contrib/jboss.net/src/main/org/jboss/net/axis/server/AxisServiceMBean.java
Index: AxisServiceMBean.java
===================================================================
RCS file:
/cvsroot/jboss/contrib/jboss.net/src/main/org/jboss/net/axis/server/AxisServiceMBean.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- AxisServiceMBean.java 3 Apr 2002 08:44:52 -0000 1.4
+++ AxisServiceMBean.java 9 Apr 2002 09:59:41 -0000 1.5
@@ -5,7 +5,7 @@
* See terms of license at gnu.org.
*/
-// $Id: AxisServiceMBean.java,v 1.4 2002/04/03 08:44:52 user57 Exp $
+// $Id: AxisServiceMBean.java,v 1.5 2002/04/09 09:59:41 cgjung Exp $
package org.jboss.net.axis.server;
@@ -13,10 +13,10 @@
* Mbean interface to the AxisService
* @author <a href="mailto:[EMAIL PROTECTED]">Christoph G. Jung</a>
* @created 27. September 2001
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.5 $
*/
public interface AxisServiceMBean
- extends org.jboss.deployment.SubDeployerMBean
+ extends org.jboss.deployment.SubDeployer, org.jboss.system.ServiceMBean
{
public String getRootContext();
public void setRootContext(String name) throws Exception;
1.2 +146 -82
contrib/jboss.net/src/main/org/jboss/net/axis/server/EntityBeanDeserializer.java
Index: EntityBeanDeserializer.java
===================================================================
RCS file:
/cvsroot/jboss/contrib/jboss.net/src/main/org/jboss/net/axis/server/EntityBeanDeserializer.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- EntityBeanDeserializer.java 2 Apr 2002 13:48:39 -0000 1.1
+++ EntityBeanDeserializer.java 9 Apr 2002 09:59:41 -0000 1.2
@@ -5,10 +5,12 @@
* See terms of license at gnu.org.
*/
-// $Id: EntityBeanDeserializer.java,v 1.1 2002/04/02 13:48:39 cgjung Exp $
+// $Id: EntityBeanDeserializer.java,v 1.2 2002/04/09 09:59:41 cgjung Exp $
package org.jboss.net.axis.server;
+import org.jboss.net.axis.ParameterizableDeserializer;
+
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -30,6 +32,7 @@
import javax.naming.InitialContext;
import javax.ejb.EJBHome;
+import javax.naming.NamingException;
import java.beans.PropertyDescriptor;
import java.beans.IntrospectionException;
@@ -39,6 +42,7 @@
import java.util.List;
import java.util.Collection;
import java.util.Iterator;
+import java.util.StringTokenizer;
/**
* Server-side deserializer hitting an existing entity bean. Derived
@@ -47,80 +51,137 @@
* descriptor.
* @author jung
* @created 21.03.2002
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
-public class EntityBeanDeserializer extends DeserializerImpl {
+public class EntityBeanDeserializer
+ extends DeserializerImpl
+ implements ParameterizableDeserializer {
//
// Attributes
//
+ protected Map options;
+
protected EJBHome home;
protected Method findMethod;
- protected Class[] findSignature;
- protected List findElements = new java.util.ArrayList();
+ protected List findElements = new java.util.ArrayList(1);
protected Object[] findObjects;
protected TypeDesc typeDesc;
protected QName xmlType;
protected Class javaType;
- protected Map propertyMap = new java.util.HashMap();
+ protected Map propertyMap = new java.util.HashMap(4);
protected int collectionIndex = -1;
- protected Collection fieldSetters=new java.util.ArrayList();
-
+ protected Collection fieldSetters = new java.util.ArrayList(4);
+ protected boolean initialized = false;
+
/**
* Construct a new BeanSerializer
- * @param homeType home class of the entity bean
* @param remoteType remote interface of the entity bean
- * @param findMethodName name of the find method to reconstruct the bean
- * @param findSignature signature of the find method
- * @param findAttributes the name of the attributes used to call the find method
* @param xmlType fully-qualified xml tag-name of the corresponding xml structure
*/
- public EntityBeanDeserializer(
- String jndiName,
- Class remoteType,
- String findMethodName,
- Class[] findSignature,
- String[] findElements,
- QName xmlType)
+ public EntityBeanDeserializer(Class remoteType, QName xmlType)
throws Exception {
// first the default constructor
this.xmlType = xmlType;
this.javaType = remoteType;
- // Get a list of the bean properties
- BeanPropertyDescriptor[] pd = getPd(javaType);
- // loop through properties and grab the names for later
- for (int i = 0; i < pd.length; i++) {
- BeanPropertyDescriptor descriptor = pd[i];
- propertyMap.put(descriptor.getName(), descriptor);
- propertyMap.put(JavaUtils.xmlNameToJava(descriptor.getName()), descriptor);
- }
- typeDesc = TypeDesc.getTypeDescForClass(javaType);
- this.findSignature = findSignature;
- // then we do the lookup struff
- this.home = (EJBHome) new InitialContext().lookup(jndiName);
- findMethod = home.getClass().getMethod(findMethodName, findSignature);
- for (int count = 0; count < findElements.length; count++) {
- if (typeDesc != null) {
-
this.findElements.add(typeDesc.getAttributeNameForField(findElements[count]));
- } else {
- this.findElements.add(new QName("", findElements[count]));
- }
+ }
+
+ /** returns an option string with a default */
+ protected String getStringOption(String key, String def) {
+ String value = (String) options.get(key);
+ if (value == null) {
+ value = def;
}
- this.findObjects = new Object[findElements.length];
+ return value;
}
- public EntityBeanDeserializer(
- Class remoteType,
- QName xmlType)
- throws Exception {
- this(remoteType.getName().
- substring(remoteType.getName().lastIndexOf(".")+1)
- +"Home",remoteType,"findByPrimaryKey",new Class[]
{String.class},
- new String[] {"name"},xmlType);
+ /**
+ * initialize the deserializer
+ */
+
+ protected void initialize() throws SAXException {
+ if (!initialized) {
+ initialized = true;
+
+ try {
+ //
+ // Extract home from jndiName
+ //
+ this.home =
+ (EJBHome) new InitialContext().lookup(
+ getStringOption("JndiName", javaType.getName() + "Home"));
+
+ //
+ // Extract find method from name and sig
+ //
+
+ String findMethodName = getStringOption("FindMethodName",
"findByPrimaryKey");
+ String findMethodSignatureString =
+ getStringOption("FindMethodSignature", "java.lang.String");
+ List findMethodSignatureClasses = new java.util.ArrayList(1);
+ StringTokenizer tokenizer = new
StringTokenizer(findMethodSignatureString, ";");
+ while (tokenizer.hasMoreTokens()) {
+ findMethodSignatureClasses.add(
+ Thread.currentThread().getContextClassLoader().loadClass(
+ tokenizer.nextToken()));
+ }
+ this.findMethod =
+ home.getClass().getMethod(
+ findMethodName,
+ (Class[]) findMethodSignatureClasses.toArray(
+ new Class[findMethodSignatureClasses.size()]));
+
+ //
+ // Do some reasonable preprocessing
+ //
+
+ // Get a list of the bean properties
+ BeanPropertyDescriptor[] pd = getPd(javaType);
+ // loop through properties and grab the names for later
+ for (int i = 0; i < pd.length; i++) {
+ BeanPropertyDescriptor descriptor = pd[i];
+ propertyMap.put(descriptor.getName(), descriptor);
+ propertyMap.put(JavaUtils.xmlNameToJava(descriptor.getName()),
descriptor);
+ }
+ typeDesc = TypeDesc.getTypeDescForClass(javaType);
+
+ //
+ // Next prepare the elements we need to call the finder
+ //
+
+ String findMethodElements = getStringOption("FindMethodElements",
"name");
+ tokenizer = new StringTokenizer(findMethodElements, ";");
+ while (tokenizer.hasMoreElements()) {
+ if (typeDesc != null) {
+
this.findElements.add(typeDesc.getAttributeNameForField(tokenizer.nextToken()));
+ } else {
+ this.findElements.add(new QName("", tokenizer.nextToken()));
+ }
+ }
+
+ this.findObjects = new Object[findElements.size()];
+ } catch (NamingException e) {
+ throw new SAXException("Could not lookup home.", e);
+ } catch (ClassNotFoundException e) {
+ throw new SAXException("Could not find signature class.", e);
+ } catch (NoSuchMethodException e) {
+ throw new SAXException("Could not find finder method.", e);
+ }
+
}
+ }
+
+ public void setOptions(Map options) {
+ this.options = options;
+ }
+
+ public Map getOptions() {
+ return options;
+ }
+
/**
* Deserializer interface called on each child element encountered in
* the XML stream.
@@ -183,9 +244,10 @@
dSer.setDefaultType(tm.getTypeQName(type));
}
- QName elementQName=new QName(namespace,localName);
+ QName elementQName = new QName(namespace, localName);
if (findElements.contains(elementQName)) {
- dSer.registerValueTarget(new
FindPropertyTarget(findElements.indexOf(elementQName)));
+ dSer.registerValueTarget(
+ new FindPropertyTarget(findElements.indexOf(elementQName)));
} else if (propDesc.getWriteMethod().getParameterTypes().length == 1) {
// Success! Register the target and deserializer.
collectionIndex = -1;
@@ -193,8 +255,7 @@
} else {
// Success! This is a collection of properties so use the index
collectionIndex++;
- dSer.registerValueTarget(
- new BeanPropertyTarget(propDesc, collectionIndex));
+ dSer.registerValueTarget(new BeanPropertyTarget(propDesc,
collectionIndex));
}
return (SOAPHandler) dSer;
}
@@ -218,6 +279,8 @@
DeserializationContext context)
throws SAXException {
+ initialize();
+
if (typeDesc == null)
return;
@@ -254,7 +317,8 @@
JavaUtils.getMessage("AttrNotSimpleType00", bpd.getName(),
type.toString()));
if (findElements.contains(attrQName)) {
- dSer.registerValueTarget(new
FindPropertyTarget(findElements.indexOf(attrQName)));
+ dSer.registerValueTarget(
+ new FindPropertyTarget(findElements.indexOf(attrQName)));
} else if (bpd.getWriteMethod().getParameterTypes().length == 1) {
// Success! Create an object from the string and set
// it in the bean
@@ -277,15 +341,15 @@
throws SAXException {
try {
value = findMethod.invoke(home, findObjects);
- Iterator allSetters=fieldSetters.iterator();
- while(allSetters.hasNext()) {
+ Iterator allSetters = fieldSetters.iterator();
+ while (allSetters.hasNext()) {
((BeanPropertyTarget) allSetters.next()).setReal(value);
}
- fieldSetters=null;
+ fieldSetters = null;
} catch (InvocationTargetException e) {
- throw new SAXException("Encountered exception "+e.getTargetException());
+ throw new SAXException("Encountered exception " + e.getTargetException());
} catch (IllegalAccessException e) {
- throw new SAXException("Encountered exception "+e);
+ throw new SAXException("Encountered exception " + e);
}
super.onEndElement(namespace, localName, context);
}
@@ -306,10 +370,10 @@
* Class which knows how to update a bean property
*/
public class BeanPropertyTarget implements Target {
- private BeanPropertyDescriptor pd;
+ private BeanPropertyDescriptor pd;
private int index = -1;
- Object value;
-
+ Object value;
+
/**
* This constructor is used for a normal property.
* @param Object is the bean class
@@ -332,14 +396,14 @@
}
public void set(Object value) throws SAXException {
- this.value=value;
- if(fieldSetters!=null) {
- fieldSetters.add(this);
- } else {
- setReal(EntityBeanDeserializer.this.value);
- }
+ this.value = value;
+ if (fieldSetters != null) {
+ fieldSetters.add(this);
+ } else {
+ setReal(EntityBeanDeserializer.this.value);
+ }
}
-
+
public void setReal(Object target) throws SAXException {
try {
if (index < 0)
@@ -483,21 +547,21 @@
return myPd;
}
}
-
- /**
- * Create a BeanPropertyDescriptor array for the indicated class.
- */
- public static BeanPropertyDescriptor[] getPd(Class javaType) {
- BeanPropertyDescriptor[] pd;
- try {
- PropertyDescriptor[] rawPd =
Introspector.getBeanInfo(javaType).getPropertyDescriptors();
- pd = BeanPropertyDescriptor.processPropertyDescriptors(rawPd,javaType);
- } catch (Exception e) {
- // this should never happen
- throw new RuntimeException(e.getMessage());
- }
- return pd;
- }
+ /**
+ * Create a BeanPropertyDescriptor array for the indicated class.
+ */
+ public static BeanPropertyDescriptor[] getPd(Class javaType) {
+ BeanPropertyDescriptor[] pd;
+ try {
+ PropertyDescriptor[] rawPd =
+ Introspector.getBeanInfo(javaType).getPropertyDescriptors();
+ pd = BeanPropertyDescriptor.processPropertyDescriptors(rawPd, javaType);
+ } catch (Exception e) {
+ // this should never happen
+ throw new RuntimeException(e.getMessage());
+ }
+ return pd;
+ }
}
1.2 +17 -8
contrib/jboss.net/src/main/org/jboss/net/axis/server/EntityBeanDeserializerFactory.java
Index: EntityBeanDeserializerFactory.java
===================================================================
RCS file:
/cvsroot/jboss/contrib/jboss.net/src/main/org/jboss/net/axis/server/EntityBeanDeserializerFactory.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- EntityBeanDeserializerFactory.java 2 Apr 2002 13:48:39 -0000 1.1
+++ EntityBeanDeserializerFactory.java 9 Apr 2002 09:59:41 -0000 1.2
@@ -5,33 +5,42 @@
* See terms of license at gnu.org.
*/
-// $Id: EntityBeanDeserializerFactory.java,v 1.1 2002/04/02 13:48:39 cgjung Exp $
+// $Id: EntityBeanDeserializerFactory.java,v 1.2 2002/04/09 09:59:41 cgjung Exp $
package org.jboss.net.axis.server;
-import org.apache.axis.encoding.ser.BaseDeserializerFactory;
-import javax.xml.rpc.namespace.QName;
+import org.jboss.net.axis.ParameterizableDeserializerFactory;
+import javax.xml.rpc.namespace.QName;
+import java.util.Hashtable;
/**
* Factory for server-side Entity Bean Deserialization.
* <br>
* <h3>Change History</h3>
* <ul>
+ * <li> jung, 06.04.2002: Added parameter table for additional
+ * deserializer options. </li>
* </ul>
* @created 21.03.2002
* @author <a href="mailto:[EMAIL PROTECTED]">Christoph G. Jung</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
-public class EntityBeanDeserializerFactory extends BaseDeserializerFactory {
-
+public class EntityBeanDeserializerFactory extends
ParameterizableDeserializerFactory {
+
//
// Constructors
//
+ /** the usual constructor used by axis */
public EntityBeanDeserializerFactory(Class javaType, QName xmlType) {
- super(EntityBeanDeserializer.class,false,xmlType,javaType);
+ this(javaType,xmlType,new Hashtable(0));
+ }
+
+ /** the extended constructor that is parameterized */
+ public EntityBeanDeserializerFactory(Class javaType, QName xmlType, Hashtable
options) {
+ super(EntityBeanDeserializer.class,false,javaType,xmlType,options);
}
-
+
}
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development