You are viewing a plain text version of this content. The canonical link for it is here.
Posted to muse-commits@ws.apache.org by ae...@apache.org on 2007/01/25 02:18:18 UTC

svn commit: r499635 [1/2] - in /webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools: generator/synthesizer/ generator/util/ inspector/

Author: aeberbac
Date: Wed Jan 24 17:18:17 2007
New Revision: 499635

URL: http://svn.apache.org/viewvc?view=rev&rev=499635
Log:
MUSE-118 and MUSE-166: these two implementations were mixed in together since I rewrote the proxy stuff.

Added:
    webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/AbstractSynthesizer.java
    webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyClassSynthesizer.java
    webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyInterfaceSynthesizer.java
Modified:
    webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ClassInfo.java
    webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxySynthesizer.java
    webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerSynthesizer.java
    webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/util/ConfigurationData.java
    webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/inspector/JavaMethod.java
    webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/inspector/JavaProperty.java
    webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/inspector/ResourceInspector.java

Added: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/AbstractSynthesizer.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/AbstractSynthesizer.java?view=auto&rev=499635
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/AbstractSynthesizer.java (added)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/AbstractSynthesizer.java Wed Jan 24 17:18:17 2007
@@ -0,0 +1,285 @@
+/*=============================================================================*
+ *  Copyright 2007 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *=============================================================================*/
+
+package org.apache.muse.tools.generator.synthesizer;
+
+import java.io.File;
+import java.util.Date;
+import java.util.HashMap;
+
+import javax.xml.namespace.QName;
+
+import org.apache.muse.tools.inspector.JavaMethod;
+import org.apache.muse.tools.inspector.JavaProperty;
+import org.apache.muse.util.ReflectUtils;
+
+public abstract class AbstractSynthesizer implements Synthesizer {
+	static final String INDENT = "    ";
+
+	static final String REQUEST_SUFFIX = "Request";
+
+	static final String IMPL_SUFFIX = "Impl";
+
+	static final String INTERFACE_PREFIX = "I";
+	
+	private int _prefixCounter = 0;
+
+	private HashMap _prefixes = new HashMap();
+
+	protected String makeFileName(ClassInfo classInfo, boolean isInterface) {
+		String name = classInfo.getPackageName() + ".";
+		if (isInterface) {
+			name += getInterfaceName(classInfo.getClassShortName());
+		} else {
+			name += classInfo.getClassShortName();
+		}
+		return name.replaceAll("\\.", "\\" + File.separator) + ".java";
+	}
+	
+
+	protected String createFileName(String interfaceName) {
+		return interfaceName.replaceAll("\\.", "\\" + File.separator) + ".java";
+	}
+
+
+	protected String getInterfaceName(String classShortName) {
+		int indexOfImpl = classShortName.indexOf(IMPL_SUFFIX);
+		if (indexOfImpl > 0) {
+			classShortName = classShortName.substring(0, indexOfImpl);
+		}
+		return INTERFACE_PREFIX + classShortName;
+	}
+
+	protected String getMethodName(JavaMethod method) {
+		String name = method.getJavaName();
+		if (name.endsWith(REQUEST_SUFFIX)) {
+			name = name.substring(0, name.indexOf(REQUEST_SUFFIX));
+		}
+		return name;
+	}
+
+	protected String needsImport(Class className) {
+		if (className.isPrimitive()) {
+			return null;
+		}
+		if (className.isArray()) {
+			className = ReflectUtils.getClassFromArrayClass(className);
+		}
+		if (className.getName().startsWith("java.lang.")) {
+			return null;
+		}
+		return className.getName();
+	}
+
+	protected String convertType(Class returnType, ClassInfo classInfo) {
+		boolean isArray = returnType.isArray();
+
+		returnType = isArray ? ReflectUtils.getClassFromArrayClass(returnType)
+				: returnType;
+
+		// Use fully-qualified name if conflict exists
+		if (classInfo.hasConflict(returnType)) {
+			return returnType.getName();
+		}
+		return ReflectUtils.getShortName(returnType) + (isArray ? "[]" : "");
+	}
+
+	protected String getPropertyName(JavaProperty property, boolean forSetter) {
+		String name = property.getName().getLocalPart();
+		if (!forSetter) {
+			return name;
+		}
+		name = name.substring(0, 1).toUpperCase() + name.substring(1);
+		return name;
+	}
+
+	protected String getParamName(QName paramName, int position) {
+		String name;
+
+		if (paramName == null) {
+			name = "param" + position;
+		} else {
+			name = paramName.getLocalPart();
+		}
+
+		return name;
+	}
+
+	protected void statement(String statement, StringBuffer code) {
+		code.append(statement);
+	}
+
+	protected void generateHeaderComment(String className, StringBuffer code) {
+		String shortName = ReflectUtils.getShortName(className);
+		String fileName = shortName + ".java";
+
+		comment(code);
+		newLine(code);
+
+		comment(fileName, code);
+		newLine(code);
+
+		comment(new Date().toString(), code);
+		newLine(code);
+
+		comment("Generated by the Apache Muse Code Generation Tool", code);
+		newLine(code);
+
+		comment(code);
+		newLine(code);
+	}
+	
+	protected void generatePackage(String className, StringBuffer code) {
+		String packageName = ReflectUtils.getPackageName(className);
+
+		if (packageName != null) {
+			statement("package " + packageName + ";", code);
+			newLine(2, code);
+		}
+
+	}
+
+	protected void comment(StringBuffer code) {
+		comment("", code);
+	}
+
+	protected void comment(String comment, StringBuffer code) {
+		code.append("// " + comment);
+	}
+
+	protected void newLine(StringBuffer code) {
+		newLine(1, code);
+	}
+
+	protected void newLine(int n, StringBuffer code) {
+		for (int i = 0; i < n; i++) {
+			code.append("\n");
+		}
+	}
+
+	protected void generateCloseBlock(StringBuffer code) {
+		code.append("}");
+	}
+
+	protected void generateOpenBlock(StringBuffer code) {
+		code.append("{");
+	}
+
+	protected void indent(StringBuffer code) {
+		indent(1, code);
+	}
+
+	protected void indent(int indent, StringBuffer code) {
+		for (int i = 0; i < indent; i++) {
+			code.append(INDENT);
+		}
+	}
+
+	protected String getObjectName(String name, Class type) {
+		if (!type.isPrimitive())
+			return name;
+
+		else if (type == boolean.class)
+			return "new Boolean(" + name + ')';
+
+		else if (type == double.class)
+			return "new Double(" + name + ')';
+
+		else if (type == float.class)
+			return "new Float(" + name + ')';
+
+		else if (type == int.class)
+			return "new Integer(" + name + ')';
+
+		else if (type == long.class)
+			return "new Long(" + name + ')';
+
+		return "new Short(" + name + ')';
+	}
+
+	protected String getPrimitiveClassName(Class type) {
+		if (type == boolean.class)
+			return "Boolean";
+
+		else if (type == float.class || type == double.class)
+			return "Float";
+
+		return "Integer";
+	}
+
+	protected String getPrimitiveConvertMethodName(String type) {
+		if (type.endsWith("Boolean"))
+			return "booleanValue";
+
+		else if (type.endsWith("Float") || type.endsWith("Double"))
+			return "floatValue";
+
+		return "intValue";
+	}
+
+	protected String getArrayValue(Class type) {
+		if (!type.isPrimitive())
+			return "value";
+
+		if (type == boolean.class)
+			return "Boolean.toString(value)";
+
+		else if (type == float.class || type == double.class)
+			return "Double.toString(value)";
+
+		return "Long.toString(value)";
+	}
+
+	protected String getNullValue(Class type) {
+		if (!type.isPrimitive())
+			return "null";
+
+		if (type == boolean.class)
+			return "false";
+
+		return "0";
+	}
+	
+	protected void generateQName(QName qname, StringBuffer code) {
+		generateQName(qname.getNamespaceURI(), qname.getLocalPart(), code);
+	}
+
+	protected void generateQName(String uri, String name, StringBuffer code) {
+		code.append("new QName(\"");
+
+		if (uri != null && uri.length() > 0) {
+			code.append(uri);
+			code.append("\", \"");
+		}
+
+		code.append(name);
+		code.append("\", \"");
+
+		code.append(getPrefix(uri));
+		code.append("\")");
+	}
+
+	protected String getPrefix(String uri) {
+		String prefix = (String) _prefixes.get(uri);
+
+		if (prefix == null) {
+			prefix = "pfx" + _prefixCounter++;
+			_prefixes.put(uri, prefix);
+		}
+
+		return prefix;
+	}
+}

Modified: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ClassInfo.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ClassInfo.java?view=diff&rev=499635&r1=499634&r2=499635
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ClassInfo.java (original)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ClassInfo.java Wed Jan 24 17:18:17 2007
@@ -51,14 +51,21 @@
 
 	private String _classFullName;
 	
-	public ClassInfo(Capability capability) {	
-		
+	public ClassInfo(Capability capability) {			
 		_capability = capability;
 		
+		updateClassNameDetails();
+		
+		findImports();
+	}
+	
+	public ClassInfo() {}
+
+	private void updateClassNameDetails() {
 		String implementingClass = _capability.getImplementingClass();
 		
 		if(implementingClass == null) {
-			_packageName = getPackageName(capability.getURI());
+			_packageName = getPackageName(_capability.getURI());
 			_classShortName = JAVA_CLASS_NAME;
 			_classFullName = _packageName + "." + _classShortName;
 			_capability.setImplementingClass(_classFullName);
@@ -67,6 +74,10 @@
 			_classShortName = ReflectUtils.getShortName(_classFullName);
 			_packageName = ReflectUtils.getPackageName(_classFullName);
 		}
+	}
+
+	public void setCapability(Capability capability) {
+		_capability = capability;
 		
 		findImports();
 	}

Added: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyClassSynthesizer.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyClassSynthesizer.java?view=auto&rev=499635
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyClassSynthesizer.java (added)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyClassSynthesizer.java Wed Jan 24 17:18:17 2007
@@ -0,0 +1,649 @@
+/*=============================================================================*
+ *  Copyright 2007 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *=============================================================================*/
+
+package org.apache.muse.tools.generator.synthesizer;
+
+import java.lang.reflect.Constructor;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.apache.muse.core.proxy.ProxyHandler;
+import org.apache.muse.core.proxy.ReflectionProxyHandler;
+import org.apache.muse.tools.generator.util.Capability;
+import org.apache.muse.tools.generator.util.ConfigurationData;
+import org.apache.muse.tools.generator.util.ConfigurationDataDescriptor;
+import org.apache.muse.tools.inspector.JavaMethod;
+import org.apache.muse.tools.inspector.JavaProperty;
+import org.apache.muse.tools.inspector.ResourceInspector;
+import org.apache.muse.util.ReflectUtils;
+import org.apache.muse.util.xml.XsdUtils;
+import org.w3c.dom.Document;
+
+public class ProxyClassSynthesizer extends ProxyInterfaceSynthesizer {
+	static ConfigurationDataDescriptor[] REQUIRED_PARAMETERS = 
+		new ConfigurationDataDescriptor[] {
+			ConfigurationData.CAPABILITIES_MAP_LIST_CONFIGURATION,
+			ConfigurationData.GENERATE_CUSTOM_HEADERS_CONFIGURATION,
+			ConfigurationData.WSDL_DOCUMENT_LIST_CONFIGURATION
+		};
+	
+	StringBuffer _operationsCode;
+	StringBuffer _operationNamesCode;
+	StringBuffer _returnTypesCode;
+	StringBuffer _actionsCode;
+	
+	StringBuffer _requestNamesCode;
+	StringBuffer _responseNamesCode;
+	StringBuffer _requestParamNamesCode;
+	
+	StringBuffer _propertiesOperationsCode;
+	StringBuffer _propertiesCode;
+	private String _interfaceName;
+
+	private boolean _hasMethods;
+	
+	protected String generateClassName(Document wsdlDocument) {
+		_interfaceName = super.generateClassName(wsdlDocument);
+		return _interfaceName + "Proxy";
+	}
+
+	protected void initializeCode(String className) {
+		_importSet = new HashSet();
+		addImport(_baseClientClass);
+		
+        _className = className;
+		_headerCode = beginHeaderCode(_className);
+        _operationsCode = beginOperationsCode();
+        
+        _operationNamesCode = beginOperationNamesCode();
+        _returnTypesCode = beginReturnTypesCode();
+        _actionsCode = beginActionsCode();
+        
+        _requestNamesCode = beginRequestNamesCode();
+        _responseNamesCode = beginResponseNamesCode();
+        _requestParamNamesCode = beginRequestParamNamesCode();
+	}
+	
+	private StringBuffer beginRequestParamNamesCode() {
+		StringBuffer code = new StringBuffer();
+		
+		indent(code);
+		code.append("private static final QName[][] _REQUEST_PARAM_NAMES = {");
+		newLine(code);
+		_importSet.add(QName.class);
+		return code;
+	}
+
+	private StringBuffer beginResponseNamesCode() {
+		StringBuffer code = new StringBuffer();
+		
+		indent(code);
+		code.append("private static final QName[] _RESPONSE_NAMES = {");
+		newLine(code);
+		indent(2,code);
+		_importSet.add(QName.class);
+		return code;
+	}
+
+	private StringBuffer beginRequestNamesCode() {
+		StringBuffer code = new StringBuffer();
+		
+		indent(code);
+		code.append("private static final QName[] _REQUEST_NAMES = {");
+		newLine(code);
+		indent(2,code);
+		_importSet.add(QName.class);
+		return code;
+	}
+
+	private StringBuffer beginActionsCode() {
+		StringBuffer code = new StringBuffer();
+		
+		indent(code);
+		code.append("private static final String[] _ACTIONS = {");
+		newLine(code);
+		indent(2,code);
+		return code;
+	}
+
+	private StringBuffer beginReturnTypesCode() {
+		StringBuffer code = new StringBuffer();
+		
+		indent(code);
+		code.append("private static final Class[] _RETURN_TYPES = {");
+		newLine(code);
+		indent(2,code);
+		return code;
+	}
+
+	private StringBuffer beginOperationsCode() {
+		return new StringBuffer();
+	}
+
+	private StringBuffer beginOperationNamesCode() {
+		StringBuffer code = new StringBuffer();
+		
+		indent(code);
+		code.append("private static final String[] _METHOD_NAMES = {");
+		newLine(code);
+		indent(2,code);
+		return code;
+	}
+	
+	protected void updateCode(Capability capability) {
+		ClassInfo classInfo = new ClassInfo();
+		classInfo.setCapability(capability);
+
+		updateMethods(classInfo, _operationsCode);
+		updateImports(classInfo);
+	}
+	
+	protected void generateMethodQualifier(StringBuffer code) {
+		code.append("public ");
+	}
+	
+	protected void generateMethodBody(JavaMethod method, ClassInfo classInfo, StringBuffer code) {
+		_hasMethods = true;
+		
+		newLine(code);
+		indent(code);
+		generateOpenBlock(code);
+		newLine(code);
+
+		generateParamConversion(method, code);
+		generateHandler(method, classInfo, code);
+		generateInvoke(method, code);
+
+		indent(code);
+		generateCloseBlock(code);
+		
+		updateMethodNames(method);
+		updateReturnTypes(method);
+		updateActions(method);
+		
+		updateRequestNames(method);
+		updateResponseNames(method);
+		updateRequestParamNamesCode(method);
+	}
+	
+	private void generateParamConversion(JavaMethod operation, StringBuffer code) {
+		QName[] paramNames = operation.getParameterTypeNames();
+		Class[] paramTypes = operation.getParameterTypes();
+
+		indent(2, code);
+		code.append("Object[] params = new Object[");
+		code.append(paramTypes.length);
+		code.append("];");
+		newLine(code);
+
+		if (paramTypes.length > 0)
+			newLine(code);
+
+		for (int n = 0; n < paramTypes.length; ++n) {
+			indent(2, code);
+			code.append("params[");
+			code.append(n);
+			code.append("] = ");
+
+			String name = ResourceInspector.getLowerCamelName(paramNames[n]
+					.getLocalPart());
+			code.append(getObjectName(name, paramTypes[n]));
+			code.append(";");
+			newLine(code);
+		}
+
+		newLine(code);
+	}
+
+	private void generateHandler(JavaMethod method, ClassInfo classInfo, StringBuffer code) {
+		indent(2, code);
+		code.append("ProxyHandler handler = getHandler(\"");
+		code.append(method.getJavaName());
+		code.append("\");");
+		newLine(code);
+		
+		classInfo.addImport(ProxyHandler.class);
+	}
+	
+	private void generateInvoke(JavaMethod method, StringBuffer code) {
+		indent(2, code);
+
+		Class returnType = method.getReturnType();
+
+		if (returnType == void.class) {
+			code.append(getInvokeString() + ";");
+		}
+		else if (!returnType.isPrimitive()) {
+			code.append("return (");
+			code.append(ReflectUtils.getShortName(returnType));
+			code.append(")" + getInvokeString() + ";");
+			
+		} else {
+			String className = getPrimitiveClassName(returnType);
+			String convertMethodName = getPrimitiveConvertMethodName(className);
+
+			code.append(className);
+			code.append(" result = (");
+			code.append(className);
+			code.append(")" + getInvokeString() + ";");
+			newLine(code);
+
+			indent(2, code);
+			code.append("return result.");
+			code.append(convertMethodName);
+			code.append("();");
+		}
+		
+		newLine(code);
+	}
+	
+	private String getInvokeString() {
+		if(_generateCustomHeaders) {
+			return "invoke(handler, params, customHeaders)";
+		}
+
+		return "invoke(handler, params)";
+	}
+
+	private void updateRequestParamNamesCode(JavaMethod method) {
+		QName[] names = method.getParameterTypeNames();
+		
+		indent(2, _requestParamNamesCode);
+		generateOpenBlock(_requestParamNamesCode);
+		newLine(_requestParamNamesCode);
+		
+		for(int i=0; i < names.length; i++) {
+			indent(3, _requestParamNamesCode);
+			generateQName(names[i], _requestParamNamesCode);
+			_requestParamNamesCode.append(",");
+			newLine(_requestParamNamesCode);
+		}
+		
+		int length = _requestParamNamesCode.length();
+		_requestParamNamesCode.delete(length - 2, length);
+		
+		newLine(_requestParamNamesCode);
+		indent(2, _requestParamNamesCode);
+		generateCloseBlock(_requestParamNamesCode);
+		_requestParamNamesCode.append(",");
+		newLine(_requestParamNamesCode);
+	}
+
+	private void updateResponseNames(JavaMethod method) {
+		QName returnName = method.getName();
+		if (returnName != null && !returnName.equals(XsdUtils.ANY_TYPE_QNAME))
+			generateQName(returnName, _responseNamesCode);
+        
+        else
+        	_responseNamesCode.append("null");
+		
+		_responseNamesCode.append(", ");
+	}
+
+	private void updateRequestNames(JavaMethod method) {
+		QName returnName = method.getName();
+		if (returnName != null && !returnName.equals(XsdUtils.ANY_TYPE_QNAME))
+			generateQName(returnName, _requestNamesCode);
+        
+        else
+        	_requestNamesCode.append("null");
+		
+		_requestNamesCode.append(", ");
+	}
+	
+	private void updateMethodNames(JavaMethod method) {
+		_operationNamesCode.append('"');
+		_operationNamesCode.append(method.getJavaName());
+		_operationNamesCode.append('"');
+		_operationNamesCode.append(", ");
+	}
+	
+	private void updateReturnTypes(JavaMethod method) {
+		Class type = method.getReturnType();
+		
+		if(type.isArray()) {
+			type = ReflectUtils.getClassFromArrayClass(type);
+		}
+		
+		_returnTypesCode.append(ReflectUtils.getShortName(type));
+		_returnTypesCode.append(".class");
+		_returnTypesCode.append(", ");
+	}
+	
+	private void updateActions(JavaMethod method) {
+		_actionsCode.append('"');
+		_actionsCode.append(method.getActionURI());
+		_actionsCode.append('"');
+		_actionsCode.append(", ");
+	}
+
+	protected void generatePropertyDeleteBody(JavaProperty property, ClassInfo classInfo, int propertyIndex, StringBuffer code) {
+		newLine(code);
+		indent(code);
+		generateOpenBlock(code);
+		newLine(code);
+
+		indent(2, code);
+		code.append("deleteResourceProperty(PROPERTIES[");
+		code.append(propertyIndex);
+		code.append("]);\n");
+
+		indent(code);
+		generateCloseBlock(code);
+	}
+
+	protected void generatePropertyGetBody(JavaProperty property, ClassInfo classInfo, int propertyIndex, StringBuffer code) {
+		Class type = property.getJavaType();
+		
+		newLine(code);
+		indent(code);
+		generateOpenBlock(code);
+		newLine(code);
+
+		if (type.isArray()) {
+			indent(2, code);
+			code.append("return (");
+			code.append(ReflectUtils.getShortName(type));
+			code.append(")getPropertyAsObject(");
+			code.append("PROPERTIES[");
+			code.append(propertyIndex);
+			code.append("], ");
+
+			type = ReflectUtils.getClassFromArrayClass(type);
+			code.append(ReflectUtils.getShortName(type));
+			code.append(".class);");
+			newLine(code);
+		}
+
+		else {
+			indent(2, code);
+
+			Class array = ReflectUtils.getArrayClassFromClass(type);
+			code.append(ReflectUtils.getShortName(array));
+
+			code.append(" results = (");
+			code.append(ReflectUtils.getShortName(array));
+			code.append(")getPropertyAsObject(");
+			code.append("PROPERTIES[");
+			code.append(propertyIndex);
+			code.append("], ");
+			code.append(ReflectUtils.getShortName(type));
+			code.append(".class);");
+			newLine(code);
+			indent(2, code);
+			code.append("return results.length == 0 ? ");
+			code.append(getNullValue(type));
+			code.append(" : results[0];");
+			newLine(code);
+		}
+
+		indent(code);
+		generateCloseBlock(code);
+	}
+
+	protected void generatePropertySetBody(JavaProperty property, ClassInfo classInfo, int propertyIndex, String setType, StringBuffer code) {
+		Class type = property.getJavaType();
+		if(type.isArray()) {
+			type = ReflectUtils.getClassFromArrayClass(type);
+		}
+		
+		newLine(code);
+		indent(code);
+		generateOpenBlock(code);
+		newLine(code);
+		indent(2, code);
+
+		code.append(setType);
+		code.append("ResourceProperty(PROPERTIES[");
+		code.append(propertyIndex);
+		code.append("], ");
+
+		if (type.isArray())
+			code.append("value");
+
+		else {
+			code.append("new Object[]{ ");
+			code.append(getArrayValue(type));
+			code.append(" }");
+		}
+
+		code.append(");");
+		newLine(code);
+
+		indent(code);
+		generateCloseBlock(code);		
+	}
+	
+	public String generateCombinedCode() {			
+		endDeclarationCode(_operationNamesCode);
+		endDeclarationCode(_returnTypesCode);
+		endDeclarationCode(_actionsCode);
+		
+		endDeclarationCode(_requestNamesCode);
+		endDeclarationCode(_responseNamesCode);
+		endDeclarationCode(_requestParamNamesCode);
+		
+		StringBuffer footerCode = generateFooterCode();
+		
+		endHeaderCode();
+		
+		StringBuffer code = new StringBuffer();
+		
+		code.append(_headerCode);
+
+		if(_hasMethods) {
+			code.append(_operationsCode);        
+        	code.append(_operationNamesCode);
+        	code.append(_returnTypesCode);
+        	code.append(_actionsCode);
+        	
+        	code.append(_requestNamesCode);
+        	code.append(_responseNamesCode);
+        	code.append(_requestParamNamesCode);
+		}
+        
+		code.append(footerCode);
+		
+		return code.toString();
+	}
+	
+	protected void generateClassDef(String remoteClassName, StringBuffer code) {
+		code.append("public class ");
+		code.append(ReflectUtils.getShortName(_className));
+		newLine(code);
+		indent(code);
+		code.append("extends ");
+		code.append(ReflectUtils.getShortName(_baseClientClass));		
+		code.append(' ');
+		code.append("implements ");
+		code.append(ReflectUtils.getShortName(_interfaceName));
+		newLine(code);
+		generateOpenBlock(code);
+	}
+	
+	private StringBuffer generateFooterCode() {
+		StringBuffer code = new StringBuffer();
+		
+		generateProxyConstructors(code);
+				
+		newLine(code);
+		generateGetHandler(code);
+		
+		newLine(code);
+		generateStatic(code);
+		
+		newLine(code);
+		generateCloseBlock(code);
+		newLine(code);
+
+		return code;
+	}
+	
+	private void generateProxyConstructors(StringBuffer code) {		
+		String className = ReflectUtils.getShortName(_className);
+
+		Constructor[] ctors = _baseClientClass.getConstructors();
+
+		for (int n = 0; n < ctors.length; ++n) {
+			newLine(code);
+			indent(code);
+			code.append("public ");
+			code.append(className);
+
+			Class[] params = ctors[n].getParameterTypes();
+			generateParamList(null, ctors[n].getParameterTypes(), code);
+			addImports(ctors[n].getParameterTypes());
+
+			indent(code);
+			generateOpenBlock(code);
+			newLine(code);
+			
+			indent(2,code);
+			code.append("super(");
+
+			for (int i = 0; i < params.length; ++i) {
+				code.append(PARAM_NAME + i);
+
+				if (i != params.length - 1)
+					code.append(", ");
+			}
+
+			code.append(");");
+			newLine(code);
+			
+			indent(code);
+			generateCloseBlock(code);
+			newLine(code);
+		}
+	}
+	
+	private void addImports(Class[] classes) {
+		for(int i=0; i < classes.length; i++) {
+			addImport(classes[i]);
+		}
+	}
+
+	private void generateGetHandler(StringBuffer code) {
+		newLine(code);
+		indent(code);
+		code.append("protected ProxyHandler getHandler(String methodName)");
+		newLine(code);
+
+		indent(code);
+		generateOpenBlock(code);
+		newLine(code);
+
+		indent(2, code);
+		statement("return (ProxyHandler)_HANDLERS_BY_NAME.get(methodName);",
+				code);
+		newLine(code);
+
+		indent(code);
+		generateCloseBlock(code);
+	}
+	
+	private void generateStatic(StringBuffer code) {
+		
+		newLine(code);
+		indent(code);
+		statement(
+				"private static final Map _HANDLERS_BY_NAME = new HashMap();",
+				code);
+		
+		addImport(Map.class);
+		addImport(HashMap.class);
+		
+		newLine(2, code);
+		indent(code);
+		code.append("static");
+		
+		newLine(code);
+		indent(code);
+		generateOpenBlock(code);
+		newLine(code);
+
+		indent(2,code);
+		code.append("for (int n = 0; n < _METHOD_NAMES.length; ++n)");
+		
+		newLine(code);
+		indent(2,code);
+		generateOpenBlock(code);
+		
+		newLine(code);
+		indent(3,code);
+		code.append("ProxyHandler handler = new ReflectionProxyHandler();");
+		addImport(ReflectionProxyHandler.class);
+		
+		newLine(code);
+		indent(3,code);
+		code.append("handler.setAction(_ACTIONS[n]);");
+		
+		newLine(code);
+		indent(3,code);
+		code.append("handler.setRequestName(_REQUEST_NAMES[n]);");
+		
+		newLine(code);
+		indent(3,code);
+		code.append("handler.setRequestParameterNames(_REQUEST_PARAM_NAMES[n]);");
+		
+		newLine(code);
+		indent(3,code);
+		code.append("handler.setResponseName(_RESPONSE_NAMES[n]);");
+		
+		newLine(code);
+		indent(3,code);
+		code.append("handler.setReturnType(_RETURN_TYPES[n]);");
+
+		newLine(2,code);
+		indent(3,code);
+		code
+				.append("_HANDLERS_BY_NAME.put(_METHOD_NAMES[n], handler);");
+		
+		newLine(code);
+		indent(2,code);
+		generateCloseBlock(code);
+		newLine(code);
+		
+		indent(code);
+		generateCloseBlock(code);
+	}		
+	
+	private void addImport(Class className) {
+		_importSet.add(className);
+	}
+
+	public void updateImports(ClassInfo classInfo) {
+		_importSet.addAll(classInfo.getImports());
+	}
+	
+	private void endDeclarationCode(StringBuffer code) {
+    	int length = code.length();
+    	code.delete(length - 2, length);
+        
+    	newLine(code);
+    	indent(code);
+    	generateCloseBlock(code);
+    	code.append(";");
+    	newLine(code);   
+	}	
+
+	public ConfigurationDataDescriptor[] getConfigurationDataDescriptions() {
+		return REQUIRED_PARAMETERS;
+	}
+}
\ No newline at end of file

Added: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyInterfaceSynthesizer.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyInterfaceSynthesizer.java?view=auto&rev=499635
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyInterfaceSynthesizer.java (added)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxyInterfaceSynthesizer.java Wed Jan 24 17:18:17 2007
@@ -0,0 +1,465 @@
+/*=============================================================================*
+ *  Copyright 2007 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *=============================================================================*/
+
+package org.apache.muse.tools.generator.synthesizer;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.namespace.QName;
+
+import org.apache.muse.tools.generator.util.Capability;
+import org.apache.muse.tools.generator.util.ConfigurationData;
+import org.apache.muse.tools.generator.util.ConfigurationDataDescriptor;
+import org.apache.muse.tools.inspector.JavaMethod;
+import org.apache.muse.tools.inspector.JavaProperty;
+import org.apache.muse.tools.inspector.ResourceInspector;
+import org.apache.muse.util.ReflectUtils;
+import org.apache.muse.util.xml.XmlUtils;
+import org.apache.muse.ws.addressing.soap.SoapFault;
+import org.apache.muse.ws.notification.WsnConstants;
+import org.apache.muse.ws.notification.remote.NotificationConsumerClient;
+import org.apache.muse.ws.notification.remote.NotificationProducerClient;
+import org.apache.muse.ws.resource.remote.WsResourceClient;
+import org.apache.muse.ws.wsdl.WsdlUtils;
+import org.w3c.dom.Document;
+
+public class ProxyInterfaceSynthesizer extends AbstractSynthesizer {
+
+	private static final String TARGET_NS_ATTR = "targetNamespace";
+
+	protected static final String PARAM_NAME = "param";
+	
+	static ConfigurationDataDescriptor[] REQUIRED_PARAMETERS = 
+		new ConfigurationDataDescriptor[] {
+			ConfigurationData.CAPABILITIES_MAP_LIST_CONFIGURATION,
+			ConfigurationData.GENERATE_CUSTOM_HEADERS_CONFIGURATION,
+			ConfigurationData.WSDL_DOCUMENT_LIST_CONFIGURATION
+		};
+	
+	
+	protected StringBuffer _headerCode;
+
+	private StringBuffer _operationsCode;
+
+	private StringBuffer _propertiesCode;
+	
+	String _className;
+
+	protected Set _importSet;
+
+	private boolean _hasProperties;
+
+	protected boolean _generateCustomHeaders;
+
+	private Map[] _capabilityMaps;
+
+	private Document[] _wsdlDocuments;
+	
+	protected Class _baseClientClass;
+
+	private Map[] _filesMaps;
+
+	public ConfigurationData synthesize(ConfigurationData data)
+			throws Exception {
+		ConfigurationData.checkConfiguration(this, data);
+		loadParameters(data);
+
+		for (int i = 0; i < _capabilityMaps.length; i++) {			
+			if (_filesMaps[i] == null) {
+				_filesMaps[i] = new HashMap();
+			}
+			generateCode(_wsdlDocuments[i], _capabilityMaps[i], _filesMaps[i]);
+		}
+
+		return data;
+	}
+
+	protected void loadParameters(ConfigurationData data) {
+		_generateCustomHeaders = ((Boolean)data.getParameter(ConfigurationData.GENERATE_CUSTOM_HEADERS)).booleanValue();
+		_capabilityMaps = (Map[])data.getParameter(ConfigurationData.CAPABILITIES_MAP_LIST);
+		_wsdlDocuments = (Document[])data.getParameter(ConfigurationData.WSDL_DOCUMENT_LIST);		        
+		_filesMaps = (Map[])data.getParameter(ConfigurationData.FILES_MAP_LIST);
+		
+		if(_filesMaps == null) {
+			_filesMaps = new HashMap[_capabilityMaps.length];			
+			data.addParameter(ConfigurationData.FILES_MAP_LIST, _filesMaps);
+		}               
+	}
+	
+	protected void generateCode(Document wsdl, Map capabilityMap, Map files) {
+		String className = generateClassName(wsdl);
+
+		_baseClientClass = getBaseClientClass(capabilityMap);
+		
+		for (Iterator i = capabilityMap.values().iterator(); i.hasNext();) {	
+			initializeCode(className);
+			updateCode((Capability) i.next());
+		}
+
+		files.put(createFileName(className), generateCombinedCode());
+	}
+	
+	private Class getBaseClientClass(Map capabilityMap) {
+		if(capabilityMap.containsKey(WsnConstants.PRODUCER_URI)) {
+			return NotificationProducerClient.class;
+		} else if(capabilityMap.containsKey(WsnConstants.CONSUMER_URI)) {
+			return NotificationConsumerClient.class;
+		} else {
+			return WsResourceClient.class;
+		}
+	}
+
+	protected String generateClassName(Document wsdlDocument) {
+		String packageName = ClassInfo.getPackageName(wsdlDocument
+				.getDocumentElement().getAttribute(TARGET_NS_ATTR));
+		return packageName
+				+ "."
+				+ WsdlUtils.getServiceName(XmlUtils
+						.getDocumentRoot(wsdlDocument));
+	}
+	
+	protected void initializeCode(String className) {
+		_className = className;
+		_headerCode = beginHeaderCode(_className);
+		_operationsCode = beginOperationsCode();
+		_propertiesCode = beginPropertiesCode();
+		_importSet = new HashSet();
+		_hasProperties = false;
+	}
+
+	protected StringBuffer beginHeaderCode(String className) {
+		StringBuffer code = new StringBuffer();
+		
+		generateHeaderComment(className, code);
+		generatePackage(className, code);
+
+		return code;
+	}
+
+	private StringBuffer beginOperationsCode() {
+		return new StringBuffer();
+	}
+	
+	private StringBuffer beginPropertiesCode() {
+		StringBuffer code = new StringBuffer();
+
+		indent(code);
+		code.append("QName[] PROPERTIES = {");
+
+		return code;
+	}
+
+	protected void updateCode(Capability capability) {
+		ClassInfo classInfo = new ClassInfo();
+
+		classInfo.setCapability(capability);
+
+		updateMethods(classInfo, _operationsCode);
+
+		if (!capability.getProperties().isEmpty()) {
+			_hasProperties = true;
+			updateProperties(classInfo, _propertiesCode);
+		}
+
+		updateImports(classInfo);
+	}
+	
+	protected void updateMethods(ClassInfo classInfo, StringBuffer code) {
+		Iterator i = classInfo.getCapability().getOperations().iterator();
+
+		while (i.hasNext()) {
+			JavaMethod method = (JavaMethod) i.next();
+			generateMethod(method, classInfo, code);
+		}
+
+		i = classInfo.getCapability().getProperties().iterator();
+		int index = 0;
+
+		while (i.hasNext()) {
+			JavaProperty property = (JavaProperty) i.next();
+
+			generatePropertyGet(property, classInfo, index, code);
+			if (property.isAppendable())
+				generatePropertyInsert(property, classInfo, index, code);
+
+			if (property.isMutable()) {
+				generatePropertyUpdate(property, classInfo, index, code);
+				generatePropertyDelete(property, classInfo, index, code);
+			}
+
+			++index;
+		}
+	}
+
+	private void generateMethod(JavaMethod method, ClassInfo classInfo,
+			StringBuffer code) {
+		newLine(2, code);
+		indent(code);
+
+		generateMethodQualifier(code);
+
+		Class returnType = method.getReturnType();
+		code.append(ReflectUtils.getShortName(returnType));
+
+		code.append(' ');
+		code.append(method.getJavaName());
+
+		QName[] paramNames = method.getParameterTypeNames();
+		Class[] paramTypes = method.getParameterTypes();
+		generateParamList(paramNames, paramTypes, code);
+
+		newLine(code);
+		indent(2, code);
+		code.append("throws SoapFault");
+		classInfo.addImport(SoapFault.class);
+
+		generateMethodBody(method, classInfo, code);
+		
+		newLine(code);
+	}
+	
+	protected void generateMethodQualifier(StringBuffer code) {
+		//Do nothing 
+	}
+	
+	protected void generateParamList(QName[] paramNames, Class[] paramTypes,
+			StringBuffer code) {
+		code.append('(');
+
+		for (int n = 0; n < paramTypes.length; ++n) {
+			code.append(ReflectUtils.getShortName(paramTypes[n]));
+			code.append(' ');
+
+			if (paramNames != null)
+				code.append(ResourceInspector.getLowerCamelName(paramNames[n]
+						.getLocalPart()));
+
+			else
+				code.append(PARAM_NAME + n);
+
+			if (n != paramTypes.length - 1)
+				code.append(", ");
+		}
+
+		if (_generateCustomHeaders) {
+			if (paramTypes.length > 0) {
+				code.append(", ");
+			}
+
+			code.append("Element[] customHeaders");
+		}
+
+		code.append(")");
+	}
+	
+	protected void generateMethodBody(JavaMethod method, ClassInfo classInfo, StringBuffer code) {
+		code.append(';');
+	}
+	
+	private void generatePropertyGet(JavaProperty property,
+			ClassInfo classInfo, int propertyIndex, StringBuffer code) {
+		newLine(code);
+		indent(code);
+
+		generateMethodQualifier(code);
+			
+		Class type = property.getJavaType();
+		code.append(convertType(type, classInfo));
+
+		code.append(' ');
+		code.append("get" + property.getName().getLocalPart());
+		code.append("()");
+		newLine(code);
+		indent(2, code);
+		code.append("throws SoapFault");
+		classInfo.addImport(SoapFault.class);
+
+		generatePropertyGetBody(property, classInfo, propertyIndex, code);
+		
+		newLine(code);
+	}
+	
+	protected void generatePropertyGetBody(JavaProperty property, ClassInfo classInfo, int propertyIndex, StringBuffer code) {
+		code.append(';');
+	}
+	
+	private void generatePropertyUpdate(JavaProperty property,
+			ClassInfo classInfo, int propertyIndex, StringBuffer code) {
+		generatePropertySet(property, classInfo, propertyIndex, "update", code);
+	}
+
+	private void generatePropertyInsert(JavaProperty property,
+			ClassInfo classInfo, int propertyIndex, StringBuffer code) {
+		generatePropertySet(property, classInfo, propertyIndex, "insert", code);
+	}
+	
+	private void generatePropertySet(JavaProperty property,
+			ClassInfo classInfo, int propertyIndex, String setType, StringBuffer code) {
+		newLine(code);
+		indent(code);
+
+		generateMethodQualifier(code);
+
+		Class type = property.getJavaType();
+		if(type.isArray()) {
+			type = ReflectUtils.getClassFromArrayClass(type);
+		}
+
+		code.append("void ");
+		code.append(setType);
+		code.append(property.getName().getLocalPart());
+		code.append('(');
+		code.append(ReflectUtils.getShortName(type));
+		code.append(" value)");
+		newLine(code);
+		indent(2, code);
+		code.append("throws SoapFault");
+		classInfo.addImport(SoapFault.class);
+
+		generatePropertySetBody(property, classInfo, propertyIndex, setType, code);
+
+		newLine(code);
+	}
+	
+	protected void generatePropertySetBody(JavaProperty property, ClassInfo classInfo, int propertyIndex, String setType, StringBuffer code) {
+		code.append(';');
+	}
+	
+	private void generatePropertyDelete(JavaProperty property,
+			ClassInfo classInfo, int propertyIndex, StringBuffer code) {
+
+		newLine(code);
+		indent(code);
+
+		generateMethodQualifier(code);
+
+		code.append("void delete" + property.getName().getLocalPart());
+		code.append("()");
+		newLine(code);
+		indent(2, code);
+		code.append("throws SoapFault");
+		classInfo.addImport(SoapFault.class);
+
+		generatePropertyDeleteBody(property, classInfo, propertyIndex, code);
+
+		newLine(code);
+	}
+	
+	protected void generatePropertyDeleteBody(JavaProperty property, ClassInfo classInfo, int propertyIndex, StringBuffer code) {
+		code.append(';');
+	}
+	
+	private void updateProperties(ClassInfo classInfo, StringBuffer code) {
+		Iterator i = classInfo.getCapability().getProperties().iterator();
+
+		if (i.hasNext()) {
+			classInfo.addImport(QName.class);
+		}
+
+		while (i.hasNext()) {
+			generatePropertyConstant((JavaProperty) i.next(), code);
+		}
+	}
+	
+	private void generatePropertyConstant(JavaProperty property,
+			StringBuffer code) {
+		newLine(code);
+		indent(2, code);
+		generateQName(property.getName(), code);
+		code.append(",");
+	}
+
+	protected void updateImports(ClassInfo classInfo) {
+		_importSet.addAll(classInfo.getImports());
+	}
+
+	protected String generateCombinedCode() {
+		endHeaderCode();
+		endOperationsCode();
+		endPropertiesCode();
+
+		StringBuffer code = new StringBuffer();
+
+		code.append(_headerCode);
+		code.append(_operationsCode);
+
+		if (_hasProperties) {
+			code.append(_propertiesCode);
+		}
+
+		return code.append(generateFooterCode()).toString();
+	}
+
+	protected void endHeaderCode() {
+		generateRemoteImports(_importSet, _headerCode);
+		generateClassDef(_className, _headerCode);
+	}
+	
+	private void generateRemoteImports(Set importSet, StringBuffer code) {
+		Iterator i = importSet.iterator();
+
+		while (i.hasNext()) {
+			String className = needsImport((Class) i.next());
+			if (className != null) {
+				statement("import " + className + ";", code);
+				newLine(code);
+			}
+		}
+
+		newLine(code);
+	}
+	
+	protected void generateClassDef(String remoteClassName, StringBuffer code) {
+		code.append("public interface ");
+		code.append(ReflectUtils.getShortName(remoteClassName));
+
+		newLine(code);
+		generateOpenBlock(code);
+	}
+	
+	private void endOperationsCode() {
+		newLine(_operationsCode);
+	}
+	
+	private void endPropertiesCode() {
+		int length = _propertiesCode.length();
+		_propertiesCode.delete(length - 1, length);
+
+		newLine(_propertiesCode);
+		indent(_propertiesCode);
+		generateCloseBlock(_propertiesCode);
+		_propertiesCode.append(";");
+		newLine(_propertiesCode);
+	}
+
+	private StringBuffer generateFooterCode() {
+		StringBuffer code = new StringBuffer();
+
+		newLine(code);
+		generateCloseBlock(code);
+		newLine(code);
+
+		return code;
+	}
+
+	public ConfigurationDataDescriptor[] getConfigurationDataDescriptions() {
+		return REQUIRED_PARAMETERS;
+	}
+}
\ No newline at end of file

Modified: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxySynthesizer.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxySynthesizer.java?view=diff&rev=499635&r1=499634&r2=499635
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxySynthesizer.java (original)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ProxySynthesizer.java Wed Jan 24 17:18:17 2007
@@ -16,29 +16,8 @@
 
 package org.apache.muse.tools.generator.synthesizer;
 
-import java.io.File;
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.namespace.QName;
-
 import org.apache.muse.tools.generator.util.ConfigurationData;
 import org.apache.muse.tools.generator.util.ConfigurationDataDescriptor;
-import org.apache.muse.tools.generator.util.LocalEnvironment;
-import org.apache.muse.tools.inspector.ResourceInspector;
-import org.apache.muse.util.ReflectUtils;
-import org.apache.muse.util.xml.XmlUtils;
-import org.apache.muse.util.xml.XsdUtils;
-import org.apache.muse.ws.resource.metadata.WsrmdConstants;
-import org.apache.muse.ws.wsdl.WsdlUtils;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
 
 /**
  *
@@ -59,1073 +38,16 @@
 			ConfigurationData.GENERATE_CUSTOM_HEADERS_CONFIGURATION
 		};
 
-	private static final String TARGET_NS_ATTR = "targetNamespace";
-        
-    private LocalEnvironment _environment = new LocalEnvironment(false);
-
-	private int _prefixCounter = 0;
-
-	private HashMap _prefixes = new HashMap();
-
-	private boolean _generateCustomHeaders;
-        
-    private String createProxyClass(ResourceInspector inspector, 
-                                    String interfaceName, 
-                                    String proxyName)
-    {   
-        StringBuffer writer = new StringBuffer(10000);
-        
-        generateProxyHeader(writer, inspector, interfaceName, proxyName);
-        generateMethods(writer, inspector, false);        
-        generateProxyConstructors(writer, inspector, proxyName);
-        generateProxyFooter(writer, inspector);        
-        
-        return writer.toString();
-    }
-    
-    private String createProxyName(String interfaceName)
-    {
-        return interfaceName + "Proxy";
-    }
-
-    private String createRemoteInterface(ResourceInspector inspector, String interfaceName)
-    {
-        
-        StringBuffer writer = new StringBuffer(10000);
-        
-        generateRemoteHeader(writer, inspector, interfaceName);
-        generateMethods(writer, inspector, true);        
-        generateRemoteFooter(writer, inspector);
-        
-        return writer.toString();
-    }
-    
-    /**
-     * 
-     * Top-level code generation method - this kicks off the interface 
-     * and class creation tasks.
-     * 
-     * @param interfaceName
-     *        The desired interface name for the new proxy.
-     * 
-     * @param inspector 
-     *        The ResourceInspector that has analyzed the WSDL.
-     * 
-     * @return A Map of file names (String) to Java code (String).
-     * 
-     */
-    private Map generate(String interfaceName, ResourceInspector inspector)
-    {
-        String interfaceJava = createRemoteInterface(inspector, interfaceName);
-        
-        String proxyName = createProxyName(interfaceName);
-        String proxyJava = createProxyClass(inspector, interfaceName, proxyName);
-        
-        Map results = new HashMap();
-        
-        results.put(createFileName(interfaceName), interfaceJava);
-        results.put(createFileName(proxyName), proxyJava);
-        
-        return results;
-    }
-        
-    private void generateActions(StringBuffer writer, 
-                                 ResourceInspector inspector)
-    {
-        writer.append("\tprivate static final String[] _ACTIONS = {\n");
-        
-        Iterator i = inspector.getOperations().iterator();
-        boolean hasUserDefinedOperation = false;
-        
-        while (i.hasNext())
-        {
-            String name = (String)i.next();
-            
-            if (inspector.isBasicResourceOperation(name))
-                continue;
-            
-            hasUserDefinedOperation = true;
-            
-            writer.append("\t\t\"");            
-            writer.append(inspector.getAction(name));
-            writer.append("\",");
-            writer.append('\n');
-        }
-        
-        if (hasUserDefinedOperation)
-        {
-            int length = writer.length();
-            writer.delete(length - 2, length);
-        }
-        
-        writer.append("\n\t};\n\n");
-    }
-    
-    private void generateClassDef(StringBuffer writer, 
-                                  String proxyClassName, 
-                                  String extendsType, 
-                                  String interfaceType)
-    {
-        writer.append("public class ");
-        writer.append(ReflectUtils.getShortName(proxyClassName));
-        writer.append('\n');
-        writer.append("\textends ");
-        writer.append(ReflectUtils.getShortName(extendsType));
-        writer.append(' ');
-        writer.append("implements ");
-        writer.append(ReflectUtils.getShortName(interfaceType));
-        writer.append("\n{");
-    }
-    
-    private void generateComment(StringBuffer writer, String className)
-    {
-        String shortName = ReflectUtils.getShortName(className);  
-        String fileName = shortName + ".java";
-        
-        writer.append("//\n");
-        writer.append("// " + fileName + '\n');
-        writer.append("// " + new Date() + '\n');
-        writer.append("// Generated by the Apache Muse Client Generation Tool, v2.0\n");
-        writer.append("//\n\n");
-    }
-    
-    private void generateFields(StringBuffer writer, 
-                                ResourceInspector inspector)
-    {
-        writer.append("\n\tprivate static final Map _HANDLERS_BY_NAME = new HashMap();\n\n");
-                
-        //
-        // this would be better if java had function pointers. I can't be 
-        // bothered to write a class for each of these
-        //
-        generateMethodNames(writer, inspector);
-        generateReturnTypes(writer, inspector);
-        generateActions(writer, inspector);
-        generateRequestNames(writer, inspector);
-        generateResponseNames(writer, inspector);
-        generateRequestParams(writer, inspector);
-    }
-    
-    private void generateGetHandler(StringBuffer writer)
-    {
-        writer.append("\n\tprotected ProxyHandler getHandler(String methodName)\n");
-        writer.append("\t{\n");
-        writer.append("\t\treturn (ProxyHandler)_HANDLERS_BY_NAME.get(methodName);\n");
-        writer.append("\t}\n");
-    }
-    
-    private void generateHandler(StringBuffer writer, String methodName)
-    {
-        writer.append("\t\tProxyHandler handler = getHandler(\"");
-        writer.append(methodName);
-        writer.append("\");\n");
-    }
-    
-    private void generateInterfaceDef(StringBuffer writer, 
-                                      String remoteClassName, 
-                                      List extendsTypes)
-    {
-        writer.append("public interface ");
-        writer.append(ReflectUtils.getShortName(remoteClassName));
-                
-        if(extendsTypes.size() > 0) {
-        	writer.append(" extends ");
-	        Iterator i = extendsTypes.iterator();
-	        
-	        while (i.hasNext())
-	        {
-	            Class type = (Class)i.next();
-	            writer.append(ReflectUtils.getShortName(type));
-	            
-	            if (i.hasNext())
-	                writer.append(", ");
-	        }
-        }
-        
-        writer.append("\n{");
-    }   
-    
-    private void generateInvoke(StringBuffer writer, 
-                                ResourceInspector inspector, 
-                                String methodName)
-    {
-        writer.append("\t\t");
-        
-        Class returnType = inspector.getReturnType(methodName);
-        
-        if (returnType == void.class)
-            writer.append("invoke(handler, params);\n");
-        
-        else if (!returnType.isPrimitive())
-        {
-            writer.append("return (");
-            writer.append(ReflectUtils.getShortName(returnType));
-            writer.append(")invoke(handler, params);\n");
-        }
-        
-        else
-        {
-            String className = getPrimitiveClassName(returnType);
-            String convertMethodName = getPrimitiveConvertMethodName(className);
-            
-            writer.append(className);
-            writer.append(" result = (");
-            writer.append(className);
-            writer.append(")invoke(handler, params);\n");
-            writer.append("\t\treturn result.");
-            writer.append(convertMethodName);
-            writer.append("();\n");
-        }
-    }
-    
-    private void generateMethod(StringBuffer writer, 
-                                ResourceInspector inspector, 
-                                String methodName, 
-                                boolean justSignature)
-    {
-
-        writer.append("\n\t");
-        
-        if (!justSignature)
-            writer.append("public ");
-        
-        Class returnType = inspector.getReturnType(methodName);
-        writer.append(ReflectUtils.getShortName(returnType));
-        
-        writer.append(' ');
-        writer.append(methodName);
-        
-        String[] paramNames = inspector.getParameterNames(methodName);
-        Class[] paramTypes = inspector.getParameterTypes(methodName);
-        generateParamList(writer, paramNames, paramTypes);
-        
-        writer.append("\t\tthrows SoapFault");
-        
-        if (justSignature)
-            writer.append(';');
-        
-        else
-        {
-            writer.append("\n\t{\n");
-            
-            generateParamConversion(writer, inspector, methodName);
-            generateHandler(writer, methodName);
-            generateInvoke(writer, inspector, methodName);
-        
-            writer.append("\t}");
-        }
-        
-        writer.append('\n');
-    }
-    
-    private void generateMethodNames(StringBuffer writer, 
-                                     ResourceInspector inspector)
-    {
-        writer.append("\tprivate static final String[] _METHOD_NAMES = {\n");
-        writer.append("\t\t");
-        
-        Iterator i = inspector.getOperations().iterator();
-        boolean hasUserDefinedOperation = false;
-        
-        while (i.hasNext())
-        {
-            String name = (String)i.next();
-            
-            if (inspector.isBasicResourceOperation(name))
-                continue;
-            
-            hasUserDefinedOperation = true;
-            writer.append('\"');
-            writer.append(name);
-            writer.append('\"');
-            writer.append(", ");            
-        }
-        
-        if (hasUserDefinedOperation)
-        {
-            int length = writer.length();
-            writer.delete(length - 2, length);
-        }
-        
-        writer.append("\n\t};\n\n");
-    }
-    
-    private void generateMethods(StringBuffer writer, 
-                                 ResourceInspector inspector, 
-                                 boolean justSignature)
-    {
-        Iterator i = inspector.getOperations().iterator();
-        
-        while (i.hasNext())
-        {
-            String name = (String)i.next();
-               
-            if (!inspector.isBasicResourceOperation(name))
-                generateMethod(writer, inspector, name, justSignature);
-        }
-
-        
-        if(inspector.getProperties() == null) {
-        	return;
-        }
-        
-        i = inspector.getProperties().iterator();
-        int index = 0;
-        
-        while (i.hasNext())
-        {
-            QName property = (QName)i.next();
-            generatePropertyGet(writer, inspector, property, index, justSignature);
-            
-            if (inspector.isPropertyAppendable(property))
-                generatePropertyInsert(writer, inspector, property, index, justSignature);
-            
-            if (inspector.isPropertyMutable(property))
-            {
-                generatePropertyUpdate(writer, inspector, property, index, justSignature);
-                generatePropertyDelete(writer, inspector, property, index, justSignature);
-            }
-                
-            ++index;
-        }
-    }
-    
-    private void generatePackage(StringBuffer writer, String className)
-    {
-        String packageName = ReflectUtils.getPackageName(className);
-        
-        if (packageName != null)
-            writer.append("package " + packageName + ";\n\n");
-    }
-    
-    private void generateParamConversion(StringBuffer writer, 
-                                         ResourceInspector inspector, 
-                                         String operation)
-    {
-        String[] paramNames = inspector.getParameterNames(operation);
-        Class[] paramTypes = inspector.getParameterTypes(operation);
-        
-        writer.append("\t\tObject[] params = new Object[");
-        writer.append(paramTypes.length);
-        writer.append("];\n");
-        
-        if (paramTypes.length > 0)
-            writer.append('\n');
-        
-        for (int n = 0; n < paramTypes.length; ++n)
-        {
-            writer.append("\t\tparams[");
-            writer.append(n);
-            writer.append("] = ");
-            
-            String name = ResourceInspector.getMethodName(paramNames[n]);
-            writer.append(getObjectName(name, paramTypes[n]));
-            writer.append(";\n");
-        }
-        
-        writer.append('\n');
-    }
-    
-    private void generateParamList(StringBuffer writer, 
-                                   String[] names, 
-                                   Class[] types)
-    {
-        writer.append('(');
-        
-        for (int n = 0; n < types.length; ++n)
-        {
-            writer.append(ReflectUtils.getShortName(types[n]));            
-            writer.append(' ');
-            
-            if (names != null)
-                writer.append(ResourceInspector.getMethodName(names[n]));
-            
-            else
-                writer.append("arg" + n);
-            
-            if (n != types.length - 1)
-                writer.append(", ");
-        }
-        
-        if(_generateCustomHeaders) {
-        	if(types.length > 0) {
-        		writer.append(", ");
-        	}
-        	
-        	writer.append("Element[] customHeaders");
-        }
-        
-        writer.append(")\n");
-    }
-    
-    private void generateProperties(StringBuffer writer, 
-                                    ResourceInspector inspector)
-    {
-    	Collection properties = inspector.getProperties();
-        
-        writer.append("\n\tQName[] PROPERTIES = {\n");
-
-        Iterator i = properties.iterator();
-        
-        while (i.hasNext())
-        {
-            writer.append("\t\t");
-            generateQName(writer, (QName)i.next());            
-            writer.append(',');            
-            writer.append('\n');
-        }
-        
-        int length = writer.length();
-        writer.delete(length - 2, length);
-        
-        writer.append("\n\t};\n");
-    }
-    
-    private void generatePropertyDelete(StringBuffer writer, 
-                                        ResourceInspector inspector, 
-                                        QName propertyName, 
-                                        int propertyIndex, 
-                                        boolean justSignature)
-    {
-
-        writer.append("\n\t");
-        
-        if (!justSignature)
-            writer.append("public ");
-        
-        Class type = inspector.getPropertyType(propertyName);
-        
-        if (type.isArray())
-            type = ReflectUtils.getClassFromArrayClass(type);
-        
-        writer.append("void delete" + propertyName.getLocalPart());
-        writer.append("()\n");
-        writer.append("\t\tthrows SoapFault");
-        
-        if (justSignature)
-            writer.append(';');
-        
-        else
-        {
-            writer.append("\n\t{\n");
-            
-            writer.append("\t\tdeleteResourceProperty(PROPERTIES[");
-            writer.append(propertyIndex);
-            writer.append("]);\n");
-            
-            writer.append("\t}");
-        }
-        
-        writer.append('\n');
-    }
-    
-    private void generatePropertyGet(StringBuffer writer, 
-                                     ResourceInspector inspector, 
-                                     QName propertyName, 
-                                     int propertyIndex, 
-                                     boolean justSignature)
-    {
-
-        writer.append("\n\t");
-        
-        if (!justSignature)
-            writer.append("public ");
-        
-        Class type = inspector.getPropertyType(propertyName);
-        writer.append(ReflectUtils.getShortName(type));
-        
-        writer.append(' ');
-        writer.append("get" + propertyName.getLocalPart());
-        writer.append("()\n");        
-        writer.append("\t\tthrows SoapFault");
-        
-        if (justSignature)
-            writer.append(';');
-        
-        else
-        {
-            writer.append("\n\t{\n");
-            
-            if (type.isArray())
-            {
-                writer.append("\t\treturn (");
-                writer.append(ReflectUtils.getShortName(type));
-                writer.append(")getPropertyAsObject(");
-                writer.append("PROPERTIES[");
-                writer.append(propertyIndex);
-                writer.append("], ");
-                
-                type = ReflectUtils.getClassFromArrayClass(type);
-                writer.append(ReflectUtils.getShortName(type));
-                writer.append(".class);\n");
-            }
-            
-            else
-            {
-                writer.append("\t\t");
-                
-                Class array = ReflectUtils.getArrayClassFromClass(type);
-                writer.append(ReflectUtils.getShortName(array));
-                
-                writer.append(" results = (");
-                writer.append(ReflectUtils.getShortName(array));
-                writer.append(")getPropertyAsObject(");
-                writer.append("PROPERTIES[");
-                writer.append(propertyIndex);
-                writer.append("], ");
-                writer.append(ReflectUtils.getShortName(type));
-                writer.append(".class);\n");
-                writer.append("\t\treturn results.length == 0 ? ");
-                writer.append(getNullValue(type));
-                writer.append(" : results[0];\n");
-            }
-                    
-            writer.append("\t}");
-        }
-        
-        writer.append('\n');
-    }
-    
-    private void generatePropertyInsert(StringBuffer writer, 
-                                        ResourceInspector inspector, 
-                                        QName propertyName, 
-                                        int propertyIndex, 
-                                        boolean justSignature)
-    {
-        generatePropertySet(writer, inspector, propertyName, propertyIndex, justSignature, "insert");
-    }
-    
-    private void generatePropertySet(StringBuffer writer, 
-                                     ResourceInspector inspector, 
-                                     QName propertyName, 
-                                     int propertyIndex, 
-                                     boolean justSignature, 
-                                     String setType)
-    {
-        writer.append("\n\t");
-        
-        if (!justSignature)
-            writer.append("public ");
-        
-        Class type = inspector.getPropertyType(propertyName);
-        
-        writer.append("void ");
-        writer.append(setType);
-        writer.append(propertyName.getLocalPart());
-        writer.append('(');
-        writer.append(ReflectUtils.getShortName(type));
-        writer.append(" value)\n");
-        writer.append("\t\tthrows SoapFault");
-        
-        if (justSignature)
-            writer.append(';');
-        
-        else
-        {
-            writer.append("\n\t{\n\t\t");
-            writer.append(setType);
-            writer.append("ResourceProperty(PROPERTIES[");
-            writer.append(propertyIndex);
-            writer.append("], ");
-            
-            if (type.isArray())
-                writer.append("value");
-            
-            else
-            {
-                writer.append("new Object[]{ ");
-                writer.append(getArrayValue(type));
-                writer.append(" }");
-            }
-            
-            writer.append(");\n");
-            
-            writer.append("\t}");
-        }
-        
-        writer.append('\n');
-    }
-    
-    private void generatePropertyUpdate(StringBuffer writer, 
-                                        ResourceInspector inspector, 
-                                        QName propertyName, 
-                                        int propertyIndex, 
-                                        boolean justSignature)
-    {
-        generatePropertySet(writer, inspector, propertyName, propertyIndex, justSignature, "update");
-    }
-    
-    private void generateProxyConstructors(StringBuffer writer, 
-                                           ResourceInspector inspector, 
-                                           String proxyClassName)
-    {
-        int dot = proxyClassName.lastIndexOf('.');
-        String className = proxyClassName.substring(dot + 1);
-        
-        Class baseType = inspector.getBaseProxyClass();
-        Constructor[] ctors = baseType.getConstructors();
-        
-        for (int n = 0; n < ctors.length; ++n)
-        {
-            writer.append("\n\tpublic ");
-            writer.append(className);
-            
-            Class[] params = ctors[n].getParameterTypes();
-            generateParamList(writer, null, ctors[n].getParameterTypes());
-            
-            writer.append("\t{\n");
-            writer.append("\t\tsuper(");
-            
-            for (int i = 0; i < params.length; ++i)
-            {
-                writer.append("arg" + i);
-                
-                if (i != params.length - 1)
-                    writer.append(", ");
-            }
-            
-            writer.append(");\n");
-            writer.append("\t}\n");
-        }
-    }
-    
-    private void generateProxyFooter(StringBuffer writer, 
-                                     ResourceInspector inspector)
-    {
-        generateFields(writer, inspector);
-        generateGetHandler(writer);
-        generateStatic(writer);
-        writer.append("}\n");
-    }
-    
-    private void generateProxyHeader(StringBuffer writer, 
-                                     ResourceInspector inspector, 
-                                     String interfaceName, 
-                                     String proxyName)
-    {
-        Class extendsType = inspector.getBaseProxyClass();
-        String extendsName = extendsType.getName();
-        
-        generateComment(writer, proxyName);
-        generatePackage(writer, proxyName);
-        generateProxyImports(writer, extendsName);
-        
-        generateClassDef(writer, proxyName, extendsName, interfaceName);
-    }
-    
-    private void generateProxyImports(StringBuffer writer, String extendsType)
-    {
-        writer.append("import java.lang.reflect.Array;\n");
-        writer.append("import org.apache.muse.ws.addressing.soap.SoapFault;\n");
-        writer.append("import java.util.Date;\n");
-        writer.append("import java.util.HashMap;\n");
-        writer.append("import java.net.URI;\n");
-        writer.append("import java.util.Map;\n\n");
-
-        writer.append("import javax.xml.namespace.QName;\n\n");
-
-        writer.append("import org.w3c.dom.Element;\n\n");
-        
-        writer.append("import org.apache.muse.core.Environment;\n");        
-        writer.append("import org.apache.muse.core.proxy.ProxyHandler;\n");
-        writer.append("import org.apache.muse.core.proxy.ReflectionProxyHandler;\n");
-        writer.append("import org.apache.muse.ws.addressing.EndpointReference;\n");
-        writer.append("import org.apache.muse.ws.addressing.soap.SoapClient;\n\n");
+	public ConfigurationData synthesize(ConfigurationData data) throws Exception {        
+        ProxyInterfaceSynthesizer proxyInterfaceSynthesizer = new ProxyInterfaceSynthesizer();
+        ProxyClassSynthesizer proxyClassSynthesizer = new ProxyClassSynthesizer();
         
-        writer.append("import " + extendsType + ";\n\n");
-    }
-    
-    private void generateQName(StringBuffer writer, QName qname)
-    {
-        generateQName(writer, qname.getNamespaceURI(), qname.getLocalPart());
-    }
-    
-    private void generateQName(StringBuffer writer, String uri, String name)
-    {
-        writer.append("new QName(\"");
+        data = proxyInterfaceSynthesizer.synthesize(data);
+        data = proxyClassSynthesizer.synthesize(data);
         
-        if (uri != null && uri.length() > 0)
-        {
-            writer.append(uri);
-            writer.append("\", \"");
-        }
-        
-        writer.append(name);
-        writer.append("\", \"");
-        
-        writer.append(getPrefix(uri));
-        writer.append("\")");
-    }
-    
-    private String getPrefix(String uri) {
-		String prefix = (String)_prefixes.get(uri);
-		
-		if(prefix == null) {
-			prefix = "pfx" + _prefixCounter++;
-			_prefixes.put(uri, prefix);
-		}
-
-		return prefix;
-	}
-
-	private void generateRemoteFooter(StringBuffer writer, 
-                                      ResourceInspector inspector)
-    {
-        if(inspector.getProperties() != null) {
-        	generateProperties(writer, inspector);
-        }
-                
-        writer.append("}\n");        
-    }
-    
-    private void generateRemoteHeader(StringBuffer writer, 
-                                      ResourceInspector inspector, 
-                                      String remoteClassName)
-    {
-        List extendsTypes = getRemoteExtends(inspector);
-        
-        generateComment(writer, remoteClassName);
-        generatePackage(writer, remoteClassName);
-        generateRemoteImports(writer, extendsTypes);
-        
-        generateInterfaceDef(writer, remoteClassName, extendsTypes);
-    }
-    
-    private void generateRemoteImports(StringBuffer writer, List extendsTypes)
-    {
-        writer.append("import java.util.Date;\n\n");
-        writer.append("import org.apache.muse.ws.addressing.soap.SoapFault;\n\n");
-        writer.append("import javax.xml.namespace.QName;\n\n");
-        writer.append("import java.net.URI;\n");
-        writer.append("import org.w3c.dom.Element;\n\n");
-        
-        writer.append("import org.apache.muse.ws.addressing.EndpointReference;\n");
-        
-		Iterator i = extendsTypes.iterator();
-
-		while (i.hasNext()) {
-			Class type = (Class) i.next();
-			writer.append("import " + type.getName() + ";\n");
-		}
-        
-        writer.append('\n');        
-    }
-    
-    private void generateRequestNames(StringBuffer writer, 
-                                      ResourceInspector inspector)
-    {
-        writer.append("\tprivate static final QName[] _REQUEST_NAMES = {\n");
-        
-        Iterator i = inspector.getOperations().iterator();
-        boolean hasUserDefinedOperation = false;
-        
-        while (i.hasNext())
-        {
-            String name = (String)i.next();
-            
-            if (inspector.isBasicResourceOperation(name))
-                continue;
-            
-            hasUserDefinedOperation = true;
-            writer.append("\t\t");
-            generateQName(writer, inspector.getRequestName(name));            
-            writer.append(",\n");
-        }
-        
-        if (hasUserDefinedOperation)
-        {
-            int length = writer.length();
-            writer.delete(length - 2, length);
-        }
-        
-        writer.append("\n\t};\n\n");
-    }
-    
-    private void generateRequestParams(StringBuffer writer, 
-                                       ResourceInspector inspector)
-    {
-        writer.append("\tprivate static final QName[][] _REQUEST_PARAM_NAMES = {\n");
-                
-        Iterator i = inspector.getOperations().iterator();
-        boolean hasUserDefinedOperation = false;
-        
-        while (i.hasNext())
-        {
-            String name = (String)i.next();
-            
-            if (inspector.isBasicResourceOperation(name))
-                continue;
-            
-            hasUserDefinedOperation = true;
-            
-            QName[] paramNames = inspector.getParameterQNames(name);
-
-            writer.append("\t\t{\n");
-            
-            for (int n = 0; n < paramNames.length; ++n)
-            {
-                writer.append("\t\t\t");
-                generateQName(writer, paramNames[n]);
-                
-                if (n != paramNames.length - 1)
-                    writer.append(',');
-                
-                writer.append('\n');
-            }
-            
-            writer.append("\t\t}");
-            writer.append(',');
-            writer.append('\n');
-        }
-        
-        if (hasUserDefinedOperation)
-        {
-            int length = writer.length();
-            writer.delete(length - 2, length);
-        }
-        
-        writer.append("\n\t};\n\n");
-    }
-    
-    private void generateResponseNames(StringBuffer writer, 
-                                       ResourceInspector inspector)
-    {
-        writer.append("\tprivate static final QName[] _RESPONSE_NAMES = {\n");
-        
-        Iterator i = inspector.getOperations().iterator();
-        boolean hasUserDefinedOperation = false;
-        
-        while (i.hasNext())
-        {
-            String name = (String)i.next();
-            
-            if (inspector.isBasicResourceOperation(name))
-                continue;
-            
-            hasUserDefinedOperation = true;
-            
-            writer.append("\t\t");
-            
-            QName returnName = inspector.getReturnName(name);
-            
-            if (returnName != null && !returnName.equals(XsdUtils.ANY_TYPE_QNAME))
-                generateQName(writer, returnName);
-            
-            else
-                writer.append("null");
-            
-            writer.append(',');            
-            writer.append('\n');
-        }
-        
-        if (hasUserDefinedOperation)
-        {
-            int length = writer.length();
-            writer.delete(length - 2, length);
-        }
-        
-        writer.append("\n\t};\n\n");
-    }
-    
-    private void generateReturnTypes(StringBuffer writer, 
-                                     ResourceInspector inspector)
-    {
-        writer.append("\tprivate static final Class[] _RETURN_TYPES = {\n");
-        writer.append("\t\t");
-        
-        Iterator i = inspector.getOperations().iterator();
-        boolean hasUserDefinedOperation = false;
-        
-        while (i.hasNext())
-        {
-            String name = (String)i.next();
-            
-            if (inspector.isBasicResourceOperation(name))
-                continue;
-            
-            hasUserDefinedOperation = true;
-            
-            Class returnType = inspector.getReturnType(name);
-            writer.append(ReflectUtils.getShortName(returnType));
-            writer.append(".class");
-            
-            writer.append(", ");
-        }
-        
-        if (hasUserDefinedOperation)
-        {
-            int length = writer.length();
-            writer.delete(length - 2, length);
-        }
-        
-        writer.append("\n\t};\n\n");
-    }
-    
-    private void generateStatic(StringBuffer writer)
-    {
-        writer.append("\n\tstatic\n");
-        writer.append("\t{\n");
-        
-        writer.append("\t\tfor (int n = 0; n < _METHOD_NAMES.length; ++n)\n");
-        writer.append("\t\t{\n");
-        
-        writer.append("\t\t\tProxyHandler handler = new ReflectionProxyHandler();\n");
-        writer.append("\t\t\thandler.setAction(_ACTIONS[n]);\n");
-        writer.append("\t\t\thandler.setRequestName(_REQUEST_NAMES[n]);\n");
-        writer.append("\t\t\thandler.setRequestParameterNames(_REQUEST_PARAM_NAMES[n]);\n");
-        writer.append("\t\t\thandler.setResponseName(_RESPONSE_NAMES[n]);\n");
-        writer.append("\t\t\thandler.setReturnType(_RETURN_TYPES[n]);\n\n");
-            
-        writer.append("\t\t\t_HANDLERS_BY_NAME.put(_METHOD_NAMES[n], handler);\n");
-        writer.append("\t\t}\n");
-        writer.append("\t}\n");
-    }
-    
-    private String getObjectName(String name, Class type)
-    {
-        if (!type.isPrimitive())
-            return name;
-        
-        else if (type == boolean.class)
-            return "new Boolean(" + name + ')';
-        
-        else if (type == double.class)
-            return "new Double(" + name + ')';
-        
-        else if (type == float.class)
-            return "new Float(" + name + ')';
-        
-        else if (type == int.class)
-            return "new Integer(" + name + ')';
-        
-        else if (type == long.class)
-            return "new Long(" + name + ')';
-        
-        return "new Short(" + name + ')';
-    }
-    
-    private String getPrimitiveClassName(Class type)
-    {
-        if (type == boolean.class)
-            return "Boolean";
-        
-        else if (type == float.class || type == double.class)
-            return "Float";
-        
-        return "Integer";
-    }
-    
-    private String getPrimitiveConvertMethodName(String type)
-    {
-        if (type.endsWith("Boolean"))
-            return "booleanValue";
-        
-        else if (type.endsWith("Float") || type.endsWith("Double"))
-            return "floatValue";
-        
-        return "intValue";
-    }
-    
-    private String getArrayValue(Class type)
-    {
-        if (!type.isPrimitive())
-            return "value";
-        
-        if (type == boolean.class)
-            return "Boolean.toString(value)";
-        
-        else if (type == float.class || type == double.class)
-            return "Double.toString(value)";
-        
-        return "Long.toString(value)";
-    }
-    
-    public Element getMetadata(String wsdlPath, 
-                               Element wsdl, 
-                               ResourceInspector inspector)
-    {
-        QName portType = inspector.getPortType();
-        Element portTypeMatch = WsdlUtils.getPortType(wsdl, portType);
-        String metadataLocation = XmlUtils.getAttribute(portTypeMatch, WsrmdConstants.DESCRIPTOR_LOCATION_ATTR_QNAME);
-        
-        if (metadataLocation == null || metadataLocation.length() == 0)
-            return null;
-        
-        String path = _environment.createRelativePath(wsdlPath, metadataLocation);
-        Document rmdDoc = _environment.getDocument(path);
-        return XmlUtils.getFirstElement(rmdDoc);
-    }
-    
-    private String getNullValue(Class type)
-    {
-        if (!type.isPrimitive())
-           return "null";
-        
-        if (type == boolean.class)
-            return "false";
-        
-        return "0";
-    }
-    
-    private List getRemoteExtends(ResourceInspector inspector)
-    {
-        List types = new ArrayList();
-        
-        //TODO was this needed?
-//        types.add(Resource.class);
-//        
-//        Class proxyClass = inspector.getBaseProxyClass();
-//        
-//        if (proxyClass.equals(NotificationProducerClient.class))
-//            types.add(NotificationProducerClient.class);
-//        
-//        if (proxyClass.equals(NotificationConsumerClient.class))
-//            types.add(NotificationConsumerClient.class);
-        
-        return types;
-    }
-	
-	public ConfigurationData synthesize(ConfigurationData data) throws Exception {
-        Document[] wsdlDocuments = (Document[]) data.getParameter(ConfigurationData.WSDL_DOCUMENT_LIST);
-        
-        _generateCustomHeaders = ((Boolean)data.getParameter(ConfigurationData.GENERATE_CUSTOM_HEADERS)).booleanValue();
-        
-        Map[] filesMaps = new HashMap[wsdlDocuments.length];	
-        
-        for(int i = 0; i < wsdlDocuments.length; i++) {        
-        	Element wsdlDef = XmlUtils.getFirstElement(wsdlDocuments[i]);
-        	WsdlUtils.removeSchemaReferences(wsdlDef);
-            
-            ResourceInspector inspector = new ResourceInspector();
-            inspector.run(wsdlDef, _environment);
-            
-            //TODO later
-//          Element rmd = getMetadata(wsdlPath, wsdlDef, inspector);
-          
-//          if (rmd != null)
-//              inspector.setMetadata(rmd);
-            
-            String interfaceName = createInterface(wsdlDocuments[i]);
-            
-            filesMaps[i] = generate(interfaceName, inspector);            
-        }
-        
-        ConfigurationData configuration = (ConfigurationData)data.clone();
-        configuration.addParameter(ConfigurationData.FILES_MAP_LIST, filesMaps);
-        
-        return configuration;
+        return data;
 	}
 	
-	private String createInterface(Document wsdlDocument) {
-		String packageName = 
-			ClassInfo.getPackageName(wsdlDocument.getDocumentElement().getAttribute(TARGET_NS_ATTR));
-		return packageName + "." + WsdlUtils.getServiceName(XmlUtils.getDocumentRoot(wsdlDocument));
-	}
-	
-	private String createFileName(String interfaceName) {
-		return interfaceName.replaceAll("\\.", "\\" + File.separator) + ".java";	
-	}
-
 	public ConfigurationDataDescriptor[] getConfigurationDataDescriptions() {
 		return REQUIRED_PARAMETERS;
 	}

Modified: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerSynthesizer.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerSynthesizer.java?view=diff&rev=499635&r1=499634&r2=499635
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerSynthesizer.java (original)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/synthesizer/ServerSynthesizer.java Wed Jan 24 17:18:17 2007
@@ -16,7 +16,6 @@
 
 package org.apache.muse.tools.generator.synthesizer;
 
-import java.io.File;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -51,16 +50,7 @@
  * 
  * @see org.apache.muse.tools.generator.synthesizer.Synthesizer
  */
-public class ServerSynthesizer implements Synthesizer {
-
-	private static final String INDENT = "    ";
-
-	private static final String REQUEST_SUFFIX = "Request";
-
-	private static final String IMPL_SUFFIX = "Impl";
-		
-	static final String INTERFACE_PREFIX = "I";
-	
+public class ServerSynthesizer extends AbstractSynthesizer {
 	
 	protected Map[] _filesMaps = null;
 
@@ -179,14 +169,6 @@
 		newLine(code);
 	}
 
-	private String getInterfaceName(String classShortName) {
-		int indexOfImpl = classShortName.indexOf(IMPL_SUFFIX);
-		if(indexOfImpl > 0) {
-			classShortName = classShortName.substring(0, indexOfImpl);
-		}
-		return INTERFACE_PREFIX + classShortName;
-	}
-
 	protected void generateClassDeclaration(ClassInfo classInfo, StringBuffer code) {
 		Capability capability = classInfo.getCapability();
 		code.append("public class " 
@@ -265,15 +247,6 @@
 		}
 	}
 
-	private String getPropertyName(JavaProperty property, boolean forSetter)  {		
-		String name = property.getName().getLocalPart();
-		if(!forSetter) {
-			return name;
-		}
-		name = name.substring(0,1).toUpperCase() + name.substring(1);
-		return name;
-	}
-
 	protected void generateOperations(ClassInfo classInfo, StringBuffer code, boolean generateBody) {
 		Capability capability = classInfo.getCapability();
 		
@@ -336,18 +309,6 @@
 		}
 	}
 
-	private String getParamName(QName paramName, int position) {
-		String name;
-		
-		if(paramName == null) {
-			name = "param" + position;
-		} else {
-			name = paramName.getLocalPart();
-		}
-		
-		return name;
-	}
-
 	private void generatePropertyOperations(ClassInfo classInfo, StringBuffer code, boolean generateBody) {
 		Capability capability = classInfo.getCapability();
 		
@@ -455,49 +416,14 @@
 		String className = needsImport(theClass);
 		if (className != null) {
 			code.append("import " + className + ";");
-			code.append("\n");
+			newLine(code);
 		}
 	}
 
-
 	protected void generatePackageHeader(ClassInfo classInfo, StringBuffer code) {
 		statement("package " + classInfo.getPackageName() + ";",code);
 		newLine(2, code);
 	}
-	
-	protected String getMethodName(JavaMethod method) {
-		String name = method.getName().getLocalPart();
-		name = name.substring(0,1).toLowerCase() + name.substring(1);
-		if(name.endsWith(REQUEST_SUFFIX)) {
-			name = name.substring(0, name.indexOf(REQUEST_SUFFIX));
-		}
-		return name;
-	}
-
-	protected String needsImport(Class className) {
-		if(className.isPrimitive()) {
-			return null;
-		}
-		if(className.isArray()) {
-			className = ReflectUtils.getClassFromArrayClass(className);
-		}		
-		if(className.getName().startsWith("java.lang.")) {
-			return null;
-		}
-		return className.getName();
- 	 }
-	
-	protected String convertType(Class returnType, ClassInfo classInfo) {
-		boolean isArray = returnType.isArray();
-
-		returnType = isArray?ReflectUtils.getClassFromArrayClass(returnType):returnType;
-		
-		//Use fully-qualified name if conflict exists
-		if(classInfo.hasConflict(returnType)) {			
-			return returnType.getName();	
-		}
-        return ReflectUtils.getShortName(returnType) + (isArray?"[]":"");		
-	}
 
 	protected Class getBaseClass(Capability capability) {
 		if(capability.getProperties().size() > 0) {
@@ -505,48 +431,6 @@
 		}
         return AbstractCapability.class;
 	}		
-	
-	protected String makeFileName(ClassInfo classInfo, boolean isInterface) {
-		String name = classInfo.getPackageName() + ".";
-		if(isInterface) {
-			name += getInterfaceName(classInfo.getClassShortName());
-		} else {
-			name += classInfo.getClassShortName();	
-		}		
-		return name.replaceAll("\\.", "\\" + File.separator) + ".java";
-	}
-
-	protected void statement(String statement, StringBuffer code) {
-		code.append(statement);
-	}
-
-	protected void newLine(StringBuffer code) {
-		newLine(1,code);
-	}
-	
-	protected void newLine(int n, StringBuffer code) {
-		for(int i=0; i < n; i++) {
-			code.append("\n");
-		}
-	}
-
-	protected void generateCloseBlock(StringBuffer code) {
-		code.append("}");
-	}
-
-	protected void generateOpenBlock(StringBuffer code) {
-		code.append("{");
-	}
-
-	protected void indent(StringBuffer code) {
-		indent(1,code);
-	}
-	
-	protected void indent(int indent, StringBuffer code) {
-		for(int i=0; i < indent; i++) {
-			code.append(INDENT);
-		}
-	}
 
 	public ConfigurationDataDescriptor[] getConfigurationDataDescriptions() {
 		return REQUIRED_PARAMETERS;

Modified: webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/util/ConfigurationData.java
URL: http://svn.apache.org/viewvc/webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/util/ConfigurationData.java?view=diff&rev=499635&r1=499634&r2=499635
==============================================================================
--- webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/util/ConfigurationData.java (original)
+++ webservices/muse/trunk/modules/muse-tools/src/org/apache/muse/tools/generator/util/ConfigurationData.java Wed Jan 24 17:18:17 2007
@@ -141,6 +141,11 @@
 		
 		ConfigurationDataDescriptor[] descriptors = 
 			configurable.getConfigurationDataDescriptions();
+		
+		if(descriptors == null) {
+			throw new IllegalArgumentException(_MESSAGES.get("NullConfiguration"));
+		}
+		
 		for(int i=0; i < descriptors.length; i++) {
 			ConfigurationDataDescriptor descriptor =
 				descriptors[i];



---------------------------------------------------------------------
To unsubscribe, e-mail: muse-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: muse-commits-help@ws.apache.org