You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2007/04/20 20:54:18 UTC
svn commit: r530885 - in /incubator/cxf/trunk: ./
rt/core/src/main/java/org/apache/cxf/wsdl11/
tools/common/src/main/java/org/apache/cxf/tools/common/
tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/
tools/javato/src/main/java/org/apache/cxf/...
Author: dkulp
Date: Fri Apr 20 11:54:17 2007
New Revision: 530885
URL: http://svn.apache.org/viewvc?view=rev&rev=530885
Log:
Add -d flag to j2w to specify where to output the wsdl/xsd files
Add -createxsdimports flag (name subject to change right now) to j2w to specify that the schemas should be outputted to separate files and imported into the wsdl.
Modified:
incubator/cxf/trunk/pom.xml
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/ServiceWSDLBuilder.java
incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/AbstractGenerator.java
incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/jaxws/WSDLGenerator.java
incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/jaxws/WSDLOutputResolver.java
incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WSDL11Generator.java
incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/java2wsdl.xml
incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessor.java
incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessorTest.java
Modified: incubator/cxf/trunk/pom.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/pom.xml?view=diff&rev=530885&r1=530884&r2=530885
==============================================================================
--- incubator/cxf/trunk/pom.xml (original)
+++ incubator/cxf/trunk/pom.xml Fri Apr 20 11:54:17 2007
@@ -404,7 +404,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
- <version>2.1</version>
+ <version>2.2-beta-1</version>
</plugin>
<plugin>
Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/ServiceWSDLBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/ServiceWSDLBuilder.java?view=diff&rev=530885&r1=530884&r2=530885
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/ServiceWSDLBuilder.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/ServiceWSDLBuilder.java Fri Apr 20 11:54:17 2007
@@ -46,10 +46,16 @@
import javax.wsdl.extensions.ElementExtensible;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.factory.WSDLFactory;
+import javax.xml.namespace.QName;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
import com.ibm.wsdl.extensions.schema.SchemaImpl;
import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.helpers.XMLUtils;
import org.apache.cxf.service.model.AbstractMessageContainer;
import org.apache.cxf.service.model.AbstractPropertiesHolder;
import org.apache.cxf.service.model.BindingFaultInfo;
@@ -70,6 +76,9 @@
private Map<String, String> ns2prefix;
private Definition definition;
private List<ServiceInfo> services;
+ private boolean useSchemaImports;
+ private String baseFileName;
+ private int xsdCount;
public ServiceWSDLBuilder(List<ServiceInfo> services) {
this.services = services;
@@ -78,8 +87,18 @@
public ServiceWSDLBuilder(ServiceInfo ... services) {
this(Arrays.asList(services));
}
-
+ public void setUseSchemaImports(boolean b) {
+ useSchemaImports = b;
+ }
+ public void setBaseFileName(String s) {
+ baseFileName = s;
+ }
+
public Definition build() throws WSDLException {
+ useSchemaImports = false;
+ return build(null);
+ }
+ public Definition build(Map<String, SchemaInfo> imports) throws WSDLException {
try {
definition = services.get(0).getProperty(WSDLServiceBuilder.WSDL_DEFINITION, Definition.class);
} catch (ClassCastException e) {
@@ -98,7 +117,7 @@
definition.setTargetNamespace(si.getTargetNamespace());
addExtensibiltyElements(definition, getWSDL11Extensors(si));
if (si.getSchemas() != null && si.getSchemas().size() > 0) {
- buildTypes(si.getSchemas());
+ buildTypes(si.getSchemas(), imports);
}
for (ServiceInfo service : services) {
buildPortType(service.getInterface());
@@ -123,16 +142,47 @@
}
}
- protected void buildTypes(Collection<SchemaInfo> schemas) {
+ protected void buildTypes(Collection<SchemaInfo> schemas, Map<String, SchemaInfo> imports) {
Types types = definition.createTypes();
+
+ Document doc = null;
+ try {
+ doc = XMLUtils.newDocument();
+ } catch (ParserConfigurationException e) {
+ //should not happen
+ }
+ Element nd = XMLUtils.createElementNS(doc, new QName("http://www.w3.org/2001/XMLSchema",
+ "schema"));
+ nd.setAttribute("xmlns", "http://www.w3.org/2001/XMLSchema");
+ doc.appendChild(nd);
+
for (SchemaInfo schemaInfo : schemas) {
+ if (!useSchemaImports) {
+ SchemaImpl schemaImpl = new SchemaImpl();
+ schemaImpl.setRequired(true);
+ schemaImpl.setElementType(WSDLConstants.SCHEMA_QNAME);
+ schemaImpl.setElement(schemaInfo.getElement());
+ types.addExtensibilityElement(schemaImpl);
+ } else {
+ //imports
+ String name = baseFileName + "_schema" + (++xsdCount) + ".xsd";
+ Element imp = XMLUtils.createElementNS(doc,
+ new QName("http://www.w3.org/2001/XMLSchema",
+ "import"));
+ imp.setAttribute("schemaLocation", name);
+ imp.setAttribute("namespace", schemaInfo.getNamespaceURI());
+ nd.appendChild(imp);
+
+ imports.put(name, schemaInfo);
+ }
+ }
+ if (useSchemaImports) {
SchemaImpl schemaImpl = new SchemaImpl();
schemaImpl.setRequired(true);
schemaImpl.setElementType(WSDLConstants.SCHEMA_QNAME);
- schemaImpl.setElement(schemaInfo.getElement());
+ schemaImpl.setElement(nd);
types.addExtensibilityElement(schemaImpl);
}
-
definition.setTypes(types);
}
Modified: incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java?view=diff&rev=530885&r1=530884&r2=530885
==============================================================================
--- incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java (original)
+++ incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java Fri Apr 20 11:54:17 2007
@@ -56,6 +56,7 @@
public static final String CFG_DEFAULT_EX = "defaultex";
public static final String CFG_VALIDATE_WSDL = "validate";
+ public static final String CFG_CREATE_XSD_IMPORTS = "createxsdimports";
public static final String CFG_FRONTEND = "frontend";
Modified: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/AbstractGenerator.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/AbstractGenerator.java?view=diff&rev=530885&r1=530884&r2=530885
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/AbstractGenerator.java (original)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/AbstractGenerator.java Fri Apr 20 11:54:17 2007
@@ -24,6 +24,7 @@
public abstract class AbstractGenerator<T> {
private ServiceInfo service;
+ private boolean allowImports;
public void setServiceModel(ServiceInfo s) {
this.service = s;
@@ -31,6 +32,13 @@
public ServiceInfo getServiceModel() {
return this.service;
+ }
+
+ public void setAllowImports(boolean b) {
+ allowImports = b;
+ }
+ public boolean allowImports() {
+ return allowImports;
}
public abstract T generate(File file);
Modified: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/jaxws/WSDLGenerator.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/jaxws/WSDLGenerator.java?view=diff&rev=530885&r1=530884&r2=530885
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/jaxws/WSDLGenerator.java (original)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/jaxws/WSDLGenerator.java Fri Apr 20 11:54:17 2007
@@ -19,6 +19,8 @@
package org.apache.cxf.tools.java2wsdl.generator.jaxws;
+import java.io.File;
+
import javax.wsdl.Definition;
import javax.wsdl.factory.WSDLFactory;
import javax.wsdl.xml.WSDLWriter;
@@ -72,9 +74,23 @@
}
private void preGenerate() {
- Object obj = env.get(ToolConstants.CFG_OUTPUTFILE);
- wsdlFile = obj == null ? "./" + wmodel.getServiceName() + ".wsdl" : (String)obj;
- obj = env.get(ToolConstants.CFG_TNS);
+ String wsdl = (String)env.get(ToolConstants.CFG_OUTPUTFILE);
+ String dir = (String)env.get(ToolConstants.CFG_OUTPUTDIR);
+ if (dir == null) {
+ dir = "./";
+ }
+ File dirFile = new File(dir);
+ if (wsdl == null) {
+ wsdlFile = new File(dirFile, wmodel.getServiceName() + ".wsdl").toString();
+ } else {
+ File f = new File(wsdl);
+ if (!f.isAbsolute()) {
+ f = new File(dirFile, wsdl);
+ }
+ wsdlFile = f.toString();
+ }
+
+ Object obj = env.get(ToolConstants.CFG_TNS);
String targetNameSpace;
targetNameSpace = obj == null ? wmodel.getTargetNameSpace() : (String)obj;
wmodel.setTargetNameSpace(targetNameSpace);
Modified: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/jaxws/WSDLOutputResolver.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/jaxws/WSDLOutputResolver.java?view=diff&rev=530885&r1=530884&r2=530885
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/jaxws/WSDLOutputResolver.java (original)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/jaxws/WSDLOutputResolver.java Fri Apr 20 11:54:17 2007
@@ -47,18 +47,32 @@
}
private File getFile(String filename) {
- Object obj = env.get(ToolConstants.CFG_OUTPUTFILE);
- String wsdlFile = obj == null ? "./" : (String)obj;
+ String wsdlFile = (String)env.get(ToolConstants.CFG_OUTPUTFILE);
+ String dir = (String)env.get(ToolConstants.CFG_OUTPUTDIR);
+ if (dir == null) {
+ dir = "./";
+ }
+ File dirFile = new File(dir);
File file = null;
+
if (wsdlFile != null) {
- file = new File(wsdlFile);
- if (file.isDirectory()) {
- file = new File(file, filename);
+ dirFile = new File(wsdlFile);
+ if (dirFile.isAbsolute()) {
+ if (!dirFile.isDirectory()) {
+ file = dirFile;
+ dirFile = dirFile.getParentFile();
+ }
} else {
- file = new File(file.getParent(), filename);
+ file = new File(dir, wsdlFile);
+ dirFile = file.getParentFile();
}
- } else {
- file = new File(".", filename);
+ }
+ if (!dirFile.exists()) {
+ dirFile.mkdirs();
+ }
+
+ if (file == null) {
+ file = new File(dirFile, filename);
}
return file;
}
Modified: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WSDL11Generator.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WSDL11Generator.java?view=diff&rev=530885&r1=530884&r2=530885
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WSDL11Generator.java (original)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WSDL11Generator.java Fri Apr 20 11:54:17 2007
@@ -20,11 +20,15 @@
package org.apache.cxf.tools.java2wsdl.generator.wsdl11;
import java.io.*;
+import java.util.HashMap;
+import java.util.Map;
+
import javax.wsdl.Definition;
import javax.wsdl.WSDLException;
import javax.wsdl.factory.WSDLFactory;
import javax.wsdl.xml.WSDLWriter;
+import org.apache.cxf.service.model.SchemaInfo;
import org.apache.cxf.tools.common.ToolException;
import org.apache.cxf.tools.java2wsdl.generator.AbstractGenerator;
import org.apache.cxf.wsdl11.ServiceWSDLBuilder;
@@ -37,12 +41,31 @@
try {
OutputStream os = new BufferedOutputStream(new FileOutputStream(file));
WSDLWriter wsdlWriter = WSDLFactory.newInstance().newWSDLWriter();
- def = new ServiceWSDLBuilder(getServiceModel()).build();
+ ServiceWSDLBuilder builder = new ServiceWSDLBuilder(getServiceModel());
+ builder.setUseSchemaImports(this.allowImports());
+
+ String name = file.getName();
+ if (name.endsWith(".wsdl")) {
+ name = name.substring(0, name.lastIndexOf(".wsdl"));
+ }
+ builder.setBaseFileName(name);
+ Map<String, SchemaInfo> imports = new HashMap<String, SchemaInfo>();
+ def = builder.build(imports);
wsdlWriter.writeWSDL(def, os);
+ os.close();
+
+ for (Map.Entry<String, SchemaInfo> imp : imports.entrySet()) {
+ File impfile = new File(file.getParentFile(), imp.getKey());
+ os = new BufferedOutputStream(new FileOutputStream(impfile));
+ imp.getValue().getSchema().write(os);
+ os.close();
+ }
} catch (WSDLException wex) {
wex.printStackTrace();
} catch (FileNotFoundException fnfe) {
throw new ToolException("Output file " + file + " not found", fnfe);
+ } catch (IOException e) {
+ e.printStackTrace();
}
return def;
}
Modified: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/java2wsdl.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/java2wsdl.xml?view=diff&rev=530885&r1=530884&r2=530885
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/java2wsdl.xml (original)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/java2wsdl.xml Fri Apr 20 11:54:17 2007
@@ -46,6 +46,14 @@
</associatedArgument>
</option>
+ <option id="outputdir" maxOccurs="1">
+ <annotation>The directory in which the output files are placed</annotation>
+ <switch>d</switch>
+ <associatedArgument placement="afterSpace">
+ <annotation>output-directory</annotation>
+ </associatedArgument>
+ </option>
+
<option id="classpath" maxOccurs="1">
<annotation>
Specify the SEI and types class search path of directories
@@ -83,6 +91,14 @@
<annotation>service-name</annotation>
</associatedArgument>
</option>
+
+ <option id="createxsdimports" maxOccurs="1">
+ <annotation>
+ Output schemas to separate files and use imports to load them instead of
+ inlining them into the wsdl.
+ </annotation>
+ <switch>createxsdimports</switch>
+ </option>
</optionGroup>
Modified: incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessor.java?view=diff&rev=530885&r1=530884&r2=530885
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessor.java (original)
+++ incubator/cxf/trunk/tools/javato/src/main/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessor.java Fri Apr 20 11:54:17 2007
@@ -64,12 +64,13 @@
ServiceInfo service = builder.build();
File output = getOutputFile(builder.getOutputFile(),
- new File(service.getName().getLocalPart() + ".wsdl"));
+ service.getName().getLocalPart() + ".wsdl");
WSDLGeneratorFactory factory = WSDLGeneratorFactory.getInstance();
factory.setWSDLVersion(getWSDLVersion());
AbstractGenerator generator = factory.newGenerator();
+ generator.setAllowImports(context.containsKey(ToolConstants.CFG_CREATE_XSD_IMPORTS));
generator.setServiceModel(service);
generator.generate(output);
}
@@ -103,11 +104,21 @@
return true;
}
- protected File getOutputFile(File nameFromClz, File defaultOutputFile) {
- File result = defaultOutputFile;
+ protected File getOutputFile(File nameFromClz, String defaultOutputFile) {
String output = (String) context.get(ToolConstants.CFG_OUTPUTFILE);
+ String dir = (String)context.get(ToolConstants.CFG_OUTPUTDIR);
+ if (dir == null) {
+ dir = "./";
+ }
+
+ File result;
if (output != null) {
result = new File(output);
+ if (!result.isAbsolute()) {
+ result = new File(new File(dir), output);
+ }
+ } else {
+ result = new File(new File(dir), defaultOutputFile);
}
if (nameFromClz != null) {
result = nameFromClz;
Modified: incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessorTest.java?view=diff&rev=530885&r1=530884&r2=530885
==============================================================================
--- incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessorTest.java (original)
+++ incubator/cxf/trunk/tools/javato/src/test/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessorTest.java Fri Apr 20 11:54:17 2007
@@ -59,7 +59,7 @@
processor.process();
File wsdlFile = new File(output, "doc_wrapped_bare.wsdl");
- assertTrue("Fail to generate wsdl file", wsdlFile.exists());
+ assertTrue("Fail to generate wsdl file: " + wsdlFile.toString(), wsdlFile.exists());
String tns = "http://simple.fortest.tools.cxf.apache.org/";
Definition def = wsdlHelper.getDefinition(wsdlFile);