Author: mmerz
Date: Wed Apr 27 11:40:21 2005
New Revision: 165025
URL: http://svn.apache.org/viewcvs?rev=165025&view=rev
Log:
Fixed issues with RPC/encoding.
Contribuor: Daryoush Mehrtash
Modified:
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/WSDL2AnnotatedJavaTest.java
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/XmlBeanWSDLProcessorTest.java
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/AxisHook.java
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/AxisTypeLookup.java
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/SystemTypeLookupService.java
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/registration/AxisTypeRegistrar.java
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/databinding/BindingLookupService.java
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/model/wsdl/XmlBeanWSDLProcessor.java
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/registration/TypeRegistrar.java
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/WSDLParser.java
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Wsdl2AJava.java
Modified:
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/WSDL2AnnotatedJavaTest.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/WSDL2AnnotatedJavaTest.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
---
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/WSDL2AnnotatedJavaTest.java
(original)
+++
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/WSDL2AnnotatedJavaTest.java
Wed Apr 27 11:40:21 2005
@@ -43,6 +43,7 @@
import org.apache.axis.description.OperationDesc;
import org.apache.axis.description.ParameterDesc;
import org.apache.axis.description.ServiceDesc;
+import org.apache.beehive.wsm.axis.databinding.SystemTypeLookupService;
import org.apache.beehive.wsm.model.BeehiveWsMethodMetadata;
import org.apache.beehive.wsm.model.BeehiveWsParameterMetadata;
import org.apache.beehive.wsm.model.BeehiveWsTypeMetadata;
@@ -50,7 +51,6 @@
import org.apache.beehive.wsm.model.jsr181.Jsr181ParameterMetadataImpl;
//import org.apache.beehive.wsm.jsr181.model.jsr181.Jsr181TypeMetadataImpl;
import org.apache.beehive.wsm.model.wsdl.XmlBeanWSDLProcessor;
-import org.apache.beehive.wsm.wsdl.WSDLProcessor;
import org.apache.beehive.wsm.wsdl.Wsdl2AJava;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
@@ -79,9 +79,10 @@
StringWriter result = new StringWriter();
//FileInputStream src = new FileInputStream("temp.wsdl");
- StringBufferInputStream src = new StringBufferInputStream(theWSDL);
- WSDLProcessor wsdlProc = new XmlBeanWSDLProcessor();
- BeehiveWsTypeMetadata om = wsdlProc.createObjectModel(src);
+
+ XmlBeanWSDLProcessor wsdlProc = new XmlBeanWSDLProcessor(new
StringBufferInputStream(theWSDL));
+
+ BeehiveWsTypeMetadata om = wsdlProc.getObjectModel(new
SystemTypeLookupService());
Collection<? extends BeehiveWsMethodMetadata> methods
=om.getMethods();
System.out.println("Size of my mehtod list: " +
om.getMethods().size());
Modified:
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/XmlBeanWSDLProcessorTest.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/XmlBeanWSDLProcessorTest.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
---
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/XmlBeanWSDLProcessorTest.java
(original)
+++
incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/wsdl/XmlBeanWSDLProcessorTest.java
Wed Apr 27 11:40:21 2005
@@ -36,6 +36,7 @@
import org.apache.axis.description.OperationDesc;
import org.apache.axis.description.ParameterDesc;
import org.apache.axis.description.ServiceDesc;
+import org.apache.beehive.wsm.axis.databinding.SystemTypeLookupService;
import org.apache.beehive.wsm.model.BeehiveWsMethodMetadata;
import org.apache.beehive.wsm.model.BeehiveWsParameterMetadata;
import org.apache.beehive.wsm.model.BeehiveWsTypeMetadata;
@@ -62,8 +63,9 @@
Class clazz = Class.forName(CLASSNAME);
serverModel = Jsr181ObjectModelStore.load(clazz);
- XmlBeanWSDLProcessor xbwp = new XmlBeanWSDLProcessor();
- clientModel = xbwp.createObjectModel(new FileInputStream(f));
+ XmlBeanWSDLProcessor xbwp = new XmlBeanWSDLProcessor(new
FileInputStream(f));
+
+ clientModel = xbwp.getObjectModel(new SystemTypeLookupService());
}
public void tearDown() {
Modified:
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/AxisHook.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/AxisHook.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
---
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/AxisHook.java
(original)
+++
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/AxisHook.java
Wed Apr 27 11:40:21 2005
@@ -287,7 +287,7 @@
// + type.getCanonicalName() + " qname is: " + q);
// }
- BindingLookupService lookupService = new
SystemTypeLookupService(tm);
+ BindingLookupService lookupService = new
SystemTypeLookupService(); // move this to the constructor
QName q = lookupService.class2qname(type, defaultNameSpace);
Modified:
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/AxisTypeLookup.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/AxisTypeLookup.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
---
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/AxisTypeLookup.java
(original)
+++
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/AxisTypeLookup.java
Wed Apr 27 11:40:21 2005
@@ -22,53 +22,110 @@
import javax.xml.namespace.QName;
-
-import org.apache.axis.encoding.TypeMapping;
+import org.apache.axis.description.TypeDesc;
+import org.apache.axis.utils.ClassUtils;
import org.apache.axis.wsdl.fromJava.Namespaces;
import org.apache.axis.wsdl.fromJava.Types;
+import org.apache.axis.wsdl.toJava.Utils;
import org.apache.beehive.wsm.axis.registration.AxisTypeMappingMetaData;
import org.apache.beehive.wsm.databinding.BindingLookupService;
-
-
+import org.apache.log4j.Logger;
public class AxisTypeLookup implements BindingLookupService {
- TypeMapping tm;
-
-
+ static Logger logger = Logger.getLogger(AxisTypeLookup.class);
+
/**
* @param tm
*/
- public AxisTypeLookup(TypeMapping tm) {
+ public AxisTypeLookup() {
super();
- this.tm = tm;
}
-
- /* (non-Javadoc)
+
+ /*
+ * (non-Javadoc)
+ *
* @see TypeLookUpServices#getClassQName(java.lang.Class)
*/
public QName class2qname(Class cls) {
- String namespace = Namespaces.makeNamespace(cls.getName());
- if (namespace == null || namespace
- .endsWith("DefaultNamespace")) {
- namespace = "http://no.namespace.specified";
- }
- return class2qname(cls, namespace);
+ if (cls.isArray())
+ cls = cls.getComponentType();
+ TypeDesc td = TypeDesc.getTypeDescForClass(cls); // a class can
+ if (null != td) {
+ return td.getXmlType();
+ } else {
+ String namespace =
Namespaces.makeNamespace(cls.getName());
+ if (namespace == null ||
namespace.endsWith("DefaultNamespace")) {
+ namespace = "http://no.namespace.specified";
+ }
+ return class2qname(cls, namespace);
+ }
+
+ }
+
+ /**
+ * @param cls
+ * @param namespace
+ * @return
+ */
+ public QName class2qname(Class cls, String namespace) {
+ if (AxisTypeMappingMetaData.isBuiltInType(cls))
+ return AxisTypeMappingMetaData.getBuiltInTypeQname(cls);
+ return new QName(namespace, Types.getLocalNameFromFullName(cls
+ .getName()));
+ }
+
+ public Class qname2class(QName qType) {
+
+ if (qType == null) {
+ return null;
+ }
+
+ String packageName = getPackageNameFromQName(qType);
+ String className;
+ if (packageName != null && packageName.length() > 0) {
+ className = packageName + "."
+ +
Utils.xmlNameToJavaClass(qType.getLocalPart());
+ } else {
+ className =
Utils.xmlNameToJavaClass(qType.getLocalPart());
+ }
+
+ Class javaType = null;
+
+ try {
+ javaType = ClassUtils.forName(className);
+
+ } catch (ClassNotFoundException e) {
+ System.out.println("Failed to find the class: " +
className
+ + " No Axis generated classes was found
for qname: "
+ + qType);
+ }
+
+ if (null != javaType)
+ System.out.println("Found an Axis generated type for
qname: "
+ + qType + " class: " +
javaType.getCanonicalName());
+
+ return javaType;
+ }
+ private String getPackageNameFromQName(QName qType) {
+
+ // TODO: Later keep a cache of previous conversions, and return
the
+ // result
+ // from cache if there is any.
+ String packageName =
Utils.makePackageName(qType.getNamespaceURI());
+ packageName = normalizePackageName(packageName, '.');
+ return packageName;
}
- /**
- * @param cls
- * @param namespace
- * @return
- */
- public QName class2qname(Class cls, String namespace) {
- if(AxisTypeMappingMetaData.isBuiltInType(cls)) return
AxisTypeMappingMetaData.getBuiltInTypeQname(cls);
- return new QName(namespace,
- Types.getLocalNameFromFullName(cls.getName()));
- }
-
- public Class qname2class(QName qType) {
- return tm.getClassForQName(qType);
- }
+ private static final char[] pkgSeparators = { '.', ':' };
+
+ private static String normalizePackageName(String pkg, char separator) {
+
+ for (int i = 0; i < pkgSeparators.length; i++) {
+ pkg = pkg.replace(pkgSeparators[i], separator);
+ }
+
+ return pkg;
+ }
}
Modified:
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/SystemTypeLookupService.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/SystemTypeLookupService.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
---
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/SystemTypeLookupService.java
(original)
+++
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/databinding/SystemTypeLookupService.java
Wed Apr 27 11:40:21 2005
@@ -29,52 +29,63 @@
import org.apache.beehive.wsm.databinding.xmlbeans.XmlBeanTypeLookup;
-
public class SystemTypeLookupService implements BindingLookupService {
- List<BindingLookupService> lookupServiceList = new
ArrayList<BindingLookupService>();
+ List<BindingLookupService> lookupServiceList = new
ArrayList<BindingLookupService>();
+
/**
*
*/
- public SystemTypeLookupService(org.apache.axis.encoding.TypeMapping tm)
{
- lookupServiceList.add(new XmlBeanTypeLookup());
- lookupServiceList.add(new AxisTypeLookup(tm));
+ public SystemTypeLookupService() {
+ lookupServiceList.add(new XmlBeanTypeLookup());
+ lookupServiceList.add(new AxisTypeLookup());
}
- /* (non-Javadoc)
+
+ /*
+ * (non-Javadoc)
+ *
* @see TypeLookUpServices#getClassQName(java.lang.Class)
*/
public QName class2qname(Class cls) {
QName qname = null;
-
-
- for(BindingLookupService lookUpService : lookupServiceList) {
- if( null != (qname = lookUpService.class2qname(cls)))
break;
+
+ for (BindingLookupService lookUpService : lookupServiceList) {
+ if (null != (qname = lookUpService.class2qname(cls)))
+ break;
}
return qname;
}
-
-
- /* (non-Javadoc)
- * @see TypeLookUpServices#getClassQName(java.lang.Class)
- */
- public QName class2qname(Class cls, String namespace) {
- QName qname = null;
-
-
- for(BindingLookupService lookUpService : lookupServiceList) {
- if( null != (qname = lookUpService.class2qname(cls, namespace)))
break;
- }
- return qname;
- }
- /* (non-Javadoc)
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see TypeLookUpServices#getClassQName(java.lang.Class)
+ */
+ public QName class2qname(Class cls, String namespace) {
+ QName qname = null;
+
+ for (BindingLookupService lookUpService : lookupServiceList) {
+ if (null != (qname = lookUpService.class2qname(cls,
namespace)))
+ break;
+ }
+ return qname;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
* @see TypeLookUpServices#Qname2Class(javax.xml.namespace.QName)
*/
public Class qname2class(QName qname) {
Class cls = null;
- for(BindingLookupService lookUpService : lookupServiceList) {
- if( null != (cls = lookUpService.qname2class(qname)))
break;
+ for (BindingLookupService lookUpService : lookupServiceList) {
+ if (null != (cls = lookUpService.qname2class(qname)))
+ break;
}
- return cls; }
+ if (null == cls)
+ cls = Object.class;
+ return cls;
+ }
}
Modified:
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/registration/AxisTypeRegistrar.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/registration/AxisTypeRegistrar.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
---
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/registration/AxisTypeRegistrar.java
(original)
+++
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/registration/AxisTypeRegistrar.java
Wed Apr 27 11:40:21 2005
@@ -28,6 +28,7 @@
import java.util.HashMap;
import java.util.Map;
+import javax.jws.soap.SOAPBinding;
import javax.xml.namespace.QName;
import org.apache.axis.Constants;
@@ -44,6 +45,8 @@
import org.apache.axis.encoding.ser.BeanSerializerFactory;
import org.apache.axis.types.HexBinary;
import org.apache.axis.utils.BeanPropertyDescriptor;
+import org.apache.beehive.wsm.axis.ant.AxisTypeGeneratorTask;
+import org.apache.beehive.wsm.axis.databinding.AxisTypeLookup;
import org.apache.beehive.wsm.axis.util.encoding.XmlBeanDeserializerFactory;
import org.apache.beehive.wsm.axis.util.encoding.XmlBeanSerializerFactory;
import org.apache.beehive.wsm.databinding.BindingLookupService;
@@ -74,7 +77,8 @@
* @param cls
* @param q
*/
- protected void registerClassAsWithDefaultSearialization(Class cls, QName
q) {
+ protected void registerClassAsWithDefaultSearialization(Class cls, QName
q, SOAPBinding.Style style,
+ SOAPBinding.Use use) {
try {
logger.debug("Assigned Default Serialization to class: " +
cls.getCanonicalName()
+ " qname:" + q);
@@ -84,7 +88,9 @@
// descriptors
TypeDesc superTd = null;
BeanPropertyDescriptor[] superPd = null;
+ boolean shoudRegisterFields = false;
if (null == td) {
+ shoudRegisterFields = true;
td = new TypeDesc(cls);
Class supa = cls.getSuperclass();
if ((supa != null) && (supa != java.lang.Object.class)
@@ -92,7 +98,7 @@
&& (supa != java.lang.Throwable.class)
&& (supa != java.rmi.RemoteException.class)
&& (supa != org.apache.axis.AxisFault.class)) {
- registerType(supa);
+ registerType(supa, style, use);
superTd = TypeDesc.getTypeDescForClass(supa);
if (superTd != null) {
superPd = superTd.getPropertyDescriptors();
@@ -100,9 +106,7 @@
}
td.setXmlType(q);
TypeDesc.registerTypeDescForClass(cls, td);
- } else {
- td = null;
- }
+ }
mTypeMapping.register(cls, q, new BeanSerializerFactory(cls, q),
/*
* NOTE [EMAIL PROTECTED] 2004-Oct-11 -- should check that the type
@@ -117,9 +121,9 @@
if (!(subType.isPrimitive()
|| subType.getName().startsWith("java.") || subType
.getName().startsWith("javax."))) {
- registerType(subType);
+ registerType(subType, style, use);
}
- if (td != null) {
+ if (shoudRegisterFields) {
String ns = q.getNamespaceURI();
if (superTd != null && superPd != null) {
for (int j = 0; j < superPd.length; j++) {
@@ -201,9 +205,12 @@
* @param cls
* @param q
*/
- protected void registerClassAsArray(Class cls, QName q) {
+ protected void registerClassAsSoapEncodedArray(Class cls, QName q) {
logger.debug("Assigned Array Serialization to class: " +
cls.getCanonicalName()
- + " qname:" + q); mTypeMapping.register(cls, q, new
ArraySerializerFactory(cls, q),
+ + " qname:" + q + " Array element qname: " +
lookupService.class2qname(cls.getComponentType()));
+
+
+ mTypeMapping.register(cls, q, new
ArraySerializerFactory(lookupService.class2qname(cls.getComponentType())),
new ArrayDeserializerFactory());
}
Modified:
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/databinding/BindingLookupService.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/databinding/BindingLookupService.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
---
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/databinding/BindingLookupService.java
(original)
+++
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/databinding/BindingLookupService.java
Wed Apr 27 11:40:21 2005
@@ -21,6 +21,7 @@
import javax.xml.namespace.QName;
+
/*
* There are varieties of XML-Java binding (XMLBeans, Axis, Castor, etc)
* implementations, each with its own nuances.
Modified:
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/model/wsdl/XmlBeanWSDLProcessor.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/model/wsdl/XmlBeanWSDLProcessor.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
---
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/model/wsdl/XmlBeanWSDLProcessor.java
(original)
+++
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/model/wsdl/XmlBeanWSDLProcessor.java
Wed Apr 27 11:40:21 2005
@@ -22,9 +22,11 @@
import java.io.InputStream;
import java.io.IOException;
import java.lang.reflect.Array;
+import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -33,6 +35,7 @@
import javax.jws.soap.SOAPBinding;
import javax.xml.namespace.QName;
+import org.apache.beehive.wsm.databinding.BindingLookupService;
import org.apache.beehive.wsm.util.TypeMappingUtil;
import org.apache.beehive.wsm.util.XmlBeanTypeMappingUtil;
import org.apache.beehive.wsm.wsdl.WSDLProcessor;
@@ -46,6 +49,9 @@
import org.apache.beehive.wsm.model.jsr181.Jsr181TypeMetadataImpl;
import org.apache.beehive.wsm.model.jsr181.SOAPBindingInfo;
import org.apache.xmlbeans.SchemaType;
+import org.apache.xmlbeans.SchemaTypeLoader;
+import org.apache.xmlbeans.XmlBeans;
+import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import org.xmlsoap.schemas.wsdl.DefinitionsDocument;
@@ -68,6 +74,7 @@
import org.apache.xmlbeans.impl.xb.xsdschema.Element;
import org.apache.xmlbeans.impl.xb.xsdschema.Group;
import org.apache.xmlbeans.impl.xb.xsdschema.ComplexType;
+import org.apache.xmlbeans.impl.xb.xsdschema.SchemaDocument;
import org.apache.xmlbeans.impl.xb.xsdschema.SchemaDocument.Schema;
/*******************************************************************************
@@ -76,28 +83,17 @@
*
* @author Jonathan Colwell
*/
-public class XmlBeanWSDLProcessor implements WSDLProcessor {
+public class XmlBeanWSDLProcessor {
- private TypeMappingUtil mTmu;
+ private BindingLookupService lookupService;
+ DefinitionsDocument defDoc;
- public BeehiveWsTypeMetadata createObjectModel(InputStream wsdlStream)
- throws Exception {
-
- DefinitionsDocument defDoc = parseWSDL(wsdlStream);
- return toWebServiceMetadata(defDoc);
- }
- public void setTypeMappingUtil(TypeMappingUtil tmu) {
- mTmu = tmu;
- }
-
- public TypeMappingUtil getTypeMappingUtil() {
- if (mTmu == null) {
- mTmu = new XmlBeanTypeMappingUtil();
- }
- return mTmu;
- }
+ public QName getServiceName() {
+ TService[] services = defDoc.getDefinitions().getServiceArray();
+ return new QName(services[0].getName());
+ }
public static final String TRANSPORT =
"http://schemas.xmlsoap.org/soap/http";
@@ -107,8 +103,10 @@
public static final String WSDLSOAPNS =
"http://schemas.xmlsoap.org/wsdl/soap/";
- public BeehiveWsTypeMetadata toWebServiceMetadata(DefinitionsDocument defDoc)
+ public BeehiveWsTypeMetadata getObjectModel(BindingLookupService
lookupService)
throws Exception {
+ this.lookupService = lookupService;
+
BeehiveWsTypeMetadata wsm = new Jsr181TypeMetadataImpl();
Map<String, BeehiveWsMethodMetadata> methodMap = new HashMap<String,
BeehiveWsMethodMetadata>();
TDefinitions defs = defDoc.getDefinitions();
@@ -331,7 +329,7 @@
// we know we are document, and thus literal. and most
// likely using xml beans, but can use axis too.
QName element = messagePart.getElement();
- Class javaType = getTypeMappingUtil().q2Class(element);
+ Class javaType = findClassForQname(element);
// in case of xmlbeans(or other registered types) we don't
// need
// to dig any further
@@ -425,7 +423,7 @@
wpm.setWpName(messagePart.getName());
QName type = messagePart.getType();
wpm.setXmlType(type);
- wpm.setJavaType(getTypeMappingUtil().q2Class(type));
+ wpm.setJavaType(findClassForQname(type));
/*
* System.out.println(wpm.getWpName() + " of type " +
* wpm.getJavaType());
@@ -437,6 +435,12 @@
}
+
+private Class findClassForQname(QName element) {
+ //return new XmlBeanTypeMappingUtil().q2Class(element);
+ return lookupService.qname2class(element);
+}
+
// To detect the wrapped walk the message parts, if there is a part that has
name="parameters"
// or if there is a part that its element name is the same as the operation
name, return true.
// NOTE: for MIME multiparts, or when there are headers the tBind should be
checked to determine
@@ -445,6 +449,7 @@
// TODO: the logic here may not work with MIME types, verify later.
private boolean isWrapped( String operationName, TPart[] messagePart,
TBinding tBind,boolean isOutputParameters) {
for( TPart message : messagePart) {
+ if( !message.isSetElement()) return false; // RPC-Encoded
if( true == unwrapMessagePart(operationName,
isOutputParameters, message)) return true;
}
return false;
@@ -501,7 +506,7 @@
} else
throw new RuntimeException("invalid element: " + el);
- Class javaType = getTypeMappingUtil().q2Class(xmlType);
+ Class javaType = findClassForQname(xmlType);
if (isArray) {
// create an array of the type, then get its type.
Object realType = Array.newInstance(javaType, 1);
@@ -605,10 +610,10 @@
- public BeehiveWsTypeMetadata loadWebServiceMetadataFromWSDL(String
wsdlLocation)
- throws Exception {
- return toWebServiceMetadata(parseWSDL(wsdlLocation));
- }
+// public BeehiveWsTypeMetadata loadWebServiceMetadataFromWSDL(String
wsdlLocation)
+// throws Exception {
+// return toWebServiceMetadata(parseWSDL(wsdlLocation));
+// }
public static DefinitionsDocument parseWSDL(String wsdlLocation)
throws IOException, MalformedURLException, XmlException {
@@ -723,4 +728,14 @@
}
return castKids;
}
+
+ public XmlBeanWSDLProcessor( InputStream wsdlStream) throws
MalformedURLException, IOException, XmlException {
+ super();
+ this.defDoc = parseWSDL(wsdlStream);
+
+ }
+
+ private XmlBeanWSDLProcessor() {
+ // no default constrcutor!
+ }
}
Modified:
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/registration/TypeRegistrar.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/registration/TypeRegistrar.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
---
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/registration/TypeRegistrar.java
(original)
+++
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/registration/TypeRegistrar.java
Wed Apr 27 11:40:21 2005
@@ -32,233 +32,251 @@
import org.apache.log4j.*;
+import javax.jws.soap.SOAPBinding;
import javax.xml.namespace.QName;
import javax.xml.rpc.encoding.TypeMapping;
import javax.xml.rpc.holders.Holder;
-
import org.apache.beehive.wsm.databinding.BindingLookupService;
import org.apache.beehive.wsm.databinding.GenericHolder;
public abstract class TypeRegistrar {
- static Logger logger = Logger.getLogger(TypeRegistrar.class);
+ static Logger logger = Logger.getLogger(TypeRegistrar.class);
- protected TypeMapping mTypeMapping;
+ protected TypeMapping mTypeMapping;
- protected BindingLookupService lookupService;
+ protected BindingLookupService lookupService;
-
- /**
- * @param typeMapping
- * @param lookupService
- */
- public TypeRegistrar(TypeMapping typeMapping,
- BindingLookupService lookupService) {
- super();
- mTypeMapping = typeMapping;
- this.lookupService = lookupService;
- }
-
-
- /**
- * @param cls
- * @return QName
- */
- protected abstract QName getRegisteredQName(Class cls);
-
- /**
- * @param cls
- * @param q
- */
- abstract protected void registerClassAsWithDefaultSearialization(Class cls,
- QName q);
-
- /**
- * @param cls
- * @param q
- */
- abstract protected void registerClassAsXMLBeans(Class cls, QName q);
-
- /**
- * @param cls
- * @param q
- * @throws ClassNotFoundException
- * @throws NoSuchMethodException
- * @throws InstantiationException
- * @throws IllegalAccessException
- * @throws InvocationTargetException
- */
- abstract protected void registerClassAsDataHandler(Class cls, QName q)
- throws ClassNotFoundException, NoSuchMethodException,
- InstantiationException, IllegalAccessException,
- InvocationTargetException;
-
- /**
- * @param cls
- * @param q
- */
- abstract protected void registerClassAsArray(Class cls, QName q);
-
- /**
- * @param cls
- * @param q
- * @return boolean
- */
- abstract protected boolean classIsRegistered(Class cls, QName q);
-
- /**
- * @return QName
- */
- abstract public QName getVoidType();
-
- abstract protected boolean isBuiltInType(Class cls);
- abstract protected QName getBuiltInTypeQname(Class cls);
-
-
- public QName registerType(Class cls) {
- return registerType(cls, lookupService.class2qname(cls));
- }
-
- public QName registerType(Class cls, QName q) {
- try {
- logger.debug("Register class: " + cls.getCanonicalName()
- + " qName: " + q);
+ /**
+ * @param typeMapping
+ * @param lookupService
+ */
+ public TypeRegistrar(TypeMapping typeMapping,
+ BindingLookupService lookupService) {
+ super();
+ mTypeMapping = typeMapping;
+ this.lookupService = lookupService;
+ }
+
+ /**
+ * @param cls
+ * @return QName
+ */
+ protected abstract QName getRegisteredQName(Class cls);
+
+ /**
+ * @param cls
+ * @param q
+ */
+ abstract protected void registerClassAsWithDefaultSearialization(Class
cls,
+ QName q, SOAPBinding.Style style,
+ SOAPBinding.Use use);
+
+ /**
+ * @param cls
+ * @param q
+ */
+ abstract protected void registerClassAsXMLBeans(Class cls, QName q);
+
+ /**
+ * @param cls
+ * @param q
+ * @throws ClassNotFoundException
+ * @throws NoSuchMethodException
+ * @throws InstantiationException
+ * @throws IllegalAccessException
+ * @throws InvocationTargetException
+ */
+ abstract protected void registerClassAsDataHandler(Class cls, QName q)
+ throws ClassNotFoundException, NoSuchMethodException,
+ InstantiationException, IllegalAccessException,
+ InvocationTargetException;
+
+ /**
+ * @param cls
+ * @param q
+ */
+ abstract protected void registerClassAsSoapEncodedArray(Class cls,
QName q);
+
+ /**
+ * @param cls
+ * @param q
+ * @return boolean
+ */
+ abstract protected boolean classIsRegistered(Class cls, QName q);
+
+ /**
+ * @return QName
+ */
+ abstract public QName getVoidType();
+
+ abstract protected boolean isBuiltInType(Class cls);
+
+ abstract protected QName getBuiltInTypeQname(Class cls);
+
+ public QName registerType(Class cls, SOAPBinding.Style style,
+ SOAPBinding.Use use) {
+ QName q;
+ if (SOAPBinding.Use.ENCODED == use && cls.isArray()) {
+ q = lookupService.class2qname(cls.getComponentType());
+ }
+ else {
+ q = lookupService.class2qname(cls);
+ }
+ return registerType(cls, q, style, use);
+ }
+
+ public QName registerType(Class cls, QName q, SOAPBinding.Style style,
+ SOAPBinding.Use use) {
+ try {
+ logger.debug("Register class: " + cls.getCanonicalName()
+ + " qName: " + q);
if (Void.TYPE.equals(cls))
- return null;
-
- if (isBuiltInType(cls))
- return getBuiltInTypeQname(cls);
- if (q == null)
- throw new RuntimeException(
- "Invalid registeration requestion qname is null");
-
-
- if (cls.isArray()) {
-// if (!classIsRegistered(cls, q)) {
-// registerClassAsArray(cls, q);
-// }
- q = registerType(cls.getComponentType(), q);
- // TODO: fix the expected type thing for arrays.
- // if (expectedType != null) {
- // q = expectedType;
- // }
- } else if (!classIsRegistered(cls, q)) {
- if (org.apache.xmlbeans.XmlObject.class.isAssignableFrom(cls))
{
- registerClassAsXMLBeans(cls, q);
- }
- /*
- * NOTE [EMAIL PROTECTED] 2004-Oct-11 -- these datahandler
using
- * classes are generally already registered but just in case...
- */
- else if (isActivationEnabled()
- && (java.awt.Image.class.isAssignableFrom(cls)
- || getMultipartClass().isAssignableFrom(cls)
|| getDataHandlerClass()
- .isAssignableFrom(cls))) {
- try {
- registerClassAsDataHandler(cls, q);
- } catch (Exception e) {
- /*
- * FIXME [EMAIL PROTECTED] 2004-Oct-08 -- log this
- * properly
- */
- e.printStackTrace();
- }
- } else if (!Remote.class.isAssignableFrom(cls)
- /*
- * NOTE [EMAIL PROTECTED] 2004-Oct-11 -- java.rmi.Remote is
- * prohibited by the jax-rpc spec.
- */
-
- /*
- * NOTE [EMAIL PROTECTED] 2004-Oct-11 -- restricting against
File
- * since, it doesn't make sense to serialize as a bean. That
and
- * it causes an infinite loop as it keeps returning itself from
- * the getAbsoluteFile and getCanonicalFile calls
- */
- && !File.class.isAssignableFrom(cls)) {
- registerClassAsWithDefaultSearialization(cls, q);
- } else {
- throw new RuntimeException("failed to register "
- + cls.getName()
- + " as a valid web service datatype,"
- + " consider using a custom type mapping");
- }
- }
- // }
- // }
- logger.info("Registered class: " + cls.getCanonicalName()
- + " qName: " + q);
- return q;
- } catch (RuntimeException e) {
- logger.error("Failed to register class: " + cls.getCanonicalName()
- + " type: " + q.getNamespaceURI() + ":" +
q.getLocalPart());
-
- e.printStackTrace();
- throw e;
- }
- } // public Class q2Class(QName qType) { //
-
-
- private boolean isActivationEnabled() {
- return null != getDataHandlerClass() && null != getMultipartClass();
- }
-
- private Class getDataHandlerClass() {
- try {
- return getClass().getClassLoader().loadClass(
- "javax.activation.DataHandler");
- } catch (Exception e) {
- }
- return null;
- }
-
- private Class getMultipartClass() {
- try {
- return getClass().getClassLoader().loadClass(
- "javax.mail.internet.MimeMultipart");
- } catch (Exception e) {
- }
- return null;
- }
-
-
- /**
- * @param t
- * @throws Exception
- */
- static public Class getHoldersValueClass(Type t) {
- Class res = null;
-
- if (t instanceof ParameterizedType) {
- ParameterizedType pt = (ParameterizedType)t;
- Type raw = pt.getRawType();
- if( GenericHolder.class.isAssignableFrom((Class)raw)) {
- Type[] typeArgs = pt.getActualTypeArguments();
- if(typeArgs[0] instanceof GenericArrayType) {
- Class arrayElementType = (Class)
((GenericArrayType)typeArgs[0]).getGenericComponentType();
+ return null;
+
+ if (isBuiltInType(cls))
+ return getBuiltInTypeQname(cls);
+ if (q == null)
+ throw new RuntimeException(
+ "Invalid registeration
requestion qname is null");
+
+ if (cls.isArray()) {
+ if (SOAPBinding.Use.ENCODED == use) {
+
+ // The Qname modification was needed to
run the GoogleThe qname of the array must be different from the qname of the
element.
+ // I don't think the qname really
matters, as the array qname wont be in the message
+ // The qname of the array is available
in the WSDL, but at this point we don't
+ // have the information, I have added
"Array" at the end of the qname, it can
+ // be anything else and the code seems
to work (from the client side).
+ // if this needs to be the real name of
the array, somehow WSDL information
+ // must be made available to this
method.
+ QName arrayQname = new
QName(q.getNamespaceURI(), q.getLocalPart()+"Array");
+
+ if (!classIsRegistered(cls, arrayQname))
+
registerClassAsSoapEncodedArray(cls, arrayQname);
+ }
+ // incase of literal, or encoded register the
class also
+ q = registerType(cls.getComponentType(), q,
style, use);
+
+ } else if (!classIsRegistered(cls, q)) {
+ if
(org.apache.xmlbeans.XmlObject.class.isAssignableFrom(cls)) {
+ registerClassAsXMLBeans(cls, q);
+ }
+ /*
+ * NOTE [EMAIL PROTECTED] 2004-Oct-11 -- these
datahandler using
+ * classes are generally already registered but
just in case...
+ */
+ else if (isActivationEnabled()
+ &&
(java.awt.Image.class.isAssignableFrom(cls)
+ ||
getMultipartClass().isAssignableFrom(cls) || getDataHandlerClass()
+
.isAssignableFrom(cls))) {
+ try {
+ registerClassAsDataHandler(cls,
q);
+ } catch (Exception e) {
+ /*
+ * FIXME [EMAIL PROTECTED]
2004-Oct-08 -- log this
+ * properly
+ */
+ e.printStackTrace();
+ }
+ } else if (!Remote.class.isAssignableFrom(cls)
+ /*
+ * NOTE [EMAIL PROTECTED] 2004-Oct-11 --
java.rmi.Remote is
+ * prohibited by the jax-rpc spec.
+ */
+
+ /*
+ * NOTE [EMAIL PROTECTED] 2004-Oct-11 --
restricting against File
+ * since, it doesn't make sense to serialize as
a bean. That and
+ * it causes an infinite loop as it keeps
returning itself from
+ * the getAbsoluteFile and getCanonicalFile
calls
+ */
+ && !File.class.isAssignableFrom(cls)) {
+
registerClassAsWithDefaultSearialization(cls, q, style, use);
+ } else {
+ throw new RuntimeException("failed to
register "
+ + cls.getName()
+ + " as a valid web
service datatype,"
+ + " consider using a
custom type mapping");
+ }
+ }
+ // }
+ // }
+ logger.info("Registered class: " +
cls.getCanonicalName()
+ + " qName: " + q);
+ return q;
+ } catch (RuntimeException e) {
+ logger.error("Failed to register class: " +
cls.getCanonicalName()
+ + " type: " + q.getNamespaceURI() + ":"
+ q.getLocalPart());
+
+ e.printStackTrace();
+ throw e;
+ }
+ } // public Class q2Class(QName qType) { //
+
+ private boolean isActivationEnabled() {
+ return null != getDataHandlerClass() && null !=
getMultipartClass();
+ }
+
+ private Class getDataHandlerClass() {
+ try {
+ return getClass().getClassLoader().loadClass(
+ "javax.activation.DataHandler");
+ } catch (Exception e) {
+ }
+ return null;
+ }
+
+ private Class getMultipartClass() {
+ try {
+ return getClass().getClassLoader().loadClass(
+ "javax.mail.internet.MimeMultipart");
+ } catch (Exception e) {
+ }
+ return null;
+ }
+
+ /**
+ * @param t
+ * @throws Exception
+ */
+ static public Class getHoldersValueClass(Type t) {
+ Class res = null;
+
+ if (t instanceof ParameterizedType) {
+ ParameterizedType pt = (ParameterizedType) t;
+ Type raw = pt.getRawType();
+ if (GenericHolder.class.isAssignableFrom((Class) raw)) {
+ Type[] typeArgs = pt.getActualTypeArguments();
+ if (typeArgs[0] instanceof GenericArrayType) {
+ Class arrayElementType = (Class)
((GenericArrayType) typeArgs[0])
+
.getGenericComponentType();
res =
Array.newInstance(arrayElementType, 0).getClass();
- } else {
+ } else {
res = (Class) typeArgs[0];
}
- }else {
- throw new RuntimeException("Invalid parameterized type for
holder: " + t);
- }
-
- } else if (t instanceof Class) {
- if(Holder.class.isAssignableFrom((Class)t)) {
- // if type is not a holder type, there is no point to dig any
deeper
- Field[] publicFields = ((Class)t).getFields();
- for (int i = 0; i < publicFields.length; i++) {
- if (0 == "value".compareTo(publicFields[i].getName())) {
- res = publicFields[i].getType();
- break;
- }
- }
- } else {
- throw new RuntimeException("Invalid class. Type: " + t + " is
not a holder.");
- }
- }
- // other wise just return the type
- return res;
- }
+ } else {
+ throw new RuntimeException(
+ "Invalid parameterized type for
holder: " + t);
+ }
+
+ } else if (t instanceof Class) {
+ if (Holder.class.isAssignableFrom((Class) t)) {
+ // if type is not a holder type, there is no
point to dig any
+ // deeper
+ Field[] publicFields = ((Class) t).getFields();
+ for (int i = 0; i < publicFields.length; i++) {
+ if (0 ==
"value".compareTo(publicFields[i].getName())) {
+ res = publicFields[i].getType();
+ break;
+ }
+ }
+ } else {
+ throw new RuntimeException("Invalid class.
Type: " + t
+ + " is not a holder.");
+ }
+ }
+ // other wise just return the type
+ return res;
+ }
}
Modified:
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/WSDLParser.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/WSDLParser.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
---
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/WSDLParser.java
(original)
+++
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/WSDLParser.java
Wed Apr 27 11:40:21 2005
@@ -48,6 +48,7 @@
DefinitionsDocument defDoc;
TTypes tt;
Schema schema;
+ TService[] services;
/**
* @param stream
@@ -63,6 +64,8 @@
defDoc = DefinitionsDocument.Factory.parse(stream);
tt = defDoc.getDefinitions().getTypesArray(0);
schema = new Schema(tt);
+ services = defDoc.getDefinitions().getServiceArray();
+
}
/**
* @return Returns the schema.
@@ -73,7 +76,6 @@
public String getSoapAddressLocation() throws IllegalAccessException {
String location = null;
- TService[] services = defDoc.getDefinitions().getServiceArray();
if (services.length > 0) {
TPort port = services[0].getPortArray(0);
if(null != port) {
@@ -89,5 +91,8 @@
}
return location;
}
+
+
+
}
Modified:
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Wsdl2AJava.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Wsdl2AJava.java?rev=165025&r1=165024&r2=165025&view=diff
==============================================================================
---
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Wsdl2AJava.java
(original)
+++
incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/wsdl/Wsdl2AJava.java
Wed Apr 27 11:40:21 2005
@@ -26,6 +26,7 @@
import java.io.Writer;
import java.util.Properties;
+
import org.apache.beehive.wsm.model.BeehiveWsTypeMetadata;
import org.apache.beehive.wsm.model.wsdl.XmlBeanWSDLProcessor;
import org.apache.velocity.Template;
@@ -98,8 +99,16 @@
String baseSrcDir) throws Exception {
InputStream wsdl = new FileInputStream(wsdlFileName);
- WSDLProcessor processor = new XmlBeanWSDLProcessor();
- BeehiveWsTypeMetadata om = processor.createObjectModel(wsdl);
+ XmlBeanWSDLProcessor processor = new XmlBeanWSDLProcessor(wsdl);
+
+
+ BeehiveWsTypeMetadata om = null;
+
+ //TODO: Move this class to the axis package and uncomment the
following two lines.
+ //SystemTypeLookupService lookupService = new
SystemTypeLookupService();
+ //processor.getObjectModel(lookupService);
+
+
String className = om.getWsName();
String packageName = "web"; // Later see if the target name
service is
// better option
@@ -127,8 +136,10 @@
public void generateAnnotatedJavaFromWSDL(InputStream wsdl, Writer w)
throws Exception {
- WSDLProcessor processor = new XmlBeanWSDLProcessor();
- BeehiveWsTypeMetadata om = processor.createObjectModel(wsdl);
+ XmlBeanWSDLProcessor processor = new XmlBeanWSDLProcessor(wsdl);
+ BeehiveWsTypeMetadata om = null;
+// TODO THIS NEED TO BE FIXED. THE PROBLEM IS THAT THE LOOK UP NEED
+// AXISLOOK UP AND THIS PACKAGE INS IN NON_AXIS! om =
processor.getObjectModel();
generateAnnotatedJavaFromOM(om, w);
}