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