For those that care, Tom and Glen and I had a chat and I've been mostly
convinced. Stuff generated from non-SOAP bindings (stub, skeleton) should
never be generated. But those bindings might refer to a portType. The
interface for that portType SHOULD be generated if --all is turned on. Tom
(and Glen?) still disagrees with me there, but he's letting me get away
with this for the moment. Anyone else have arguments for/against?
Russell Butek
[EMAIL PROTECTED]
Russell Butek/Austin/IBM@IBMUS on 02/06/2002 03:30:23 PM
Please respond to [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
cc:
Subject: RE: cvs commit: xml-axis/java/test/wsdl/filegen AllOptionTestCase
.java FileGen.wsdl FileGenTestCase.java
I think I disagree. If they really really want to generate everything, let
them have everything.
As to whether it compiles, the code generated from filegen.wsdl does (after
a minor fix). If there's a chance we're generating code that WON'T
compile, then I might willingly back off from my disagreement. We should
NEVER generate non-compileable code. But before I recanted my disagreement
I would ask why it doesn't compile.
Russell Butek
[EMAIL PROTECTED]
Tom Jordahl <[EMAIL PROTECTED]> on 02/06/2002 03:21:42 PM
Please respond to [EMAIL PROTECTED]
To: "'[EMAIL PROTECTED]'" <[EMAIL PROTECTED]>
cc:
Subject: RE: cvs commit: xml-axis/java/test/wsdl/filegen AllOptionTestCase
.java FileGen.wsdl FileGenTestCase.java
- if (binding.isUndefined() ||
- bEntry.getBindingType() !=
BindingEntry.TYPE_SOAP) {
+ if (binding.isUndefined()) {
continue;
Russell,
I don't think you should ever emit any code for non-Soap bindings.
They wont work (will they even compile?), why emit them?
I think this is a different thing than emitting all types.
--
Tom Jordahl
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
Sent: Wednesday, February 06, 2002 4:09 PM
To: [EMAIL PROTECTED]
Subject: cvs commit: xml-axis/java/test/wsdl/filegen
AllOptionTestCase.java FileGen.wsdl FileGenTestCase.java
butek 02/02/06 13:08:55
Modified: java/src/org/apache/axis/utils resources.properties
java/src/org/apache/axis/wsdl WSDL2Java.java
java/src/org/apache/axis/wsdl/toJava Emitter.java
JavaWriterFactory.java PortTypeEntry.java
java/test/wsdl Wsdl2javaAntTask.java Wsdl2javaTestSuite.xml
java/test/wsdl/filegen FileGen.wsdl FileGenTestCase.java
Added: java/test/wsdl/filegen AllOptionTestCase.java
Log:
I added --all to WSDL2Java. I thought it would be quick and easy. Silly
me. This
option exposed some bugs I had to fix. I also added a quick test.
Revision Changes Path
1.50 +1 -0
xml-axis/java/src/org/apache/axis/utils/resources.properties
Index: resources.properties
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/utils/resources.properties,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -r1.49 -r1.50
--- resources.properties 6 Feb 2002 15:17:17 -0000 1.49
+++ resources.properties 6 Feb 2002 21:08:54 -0000 1.50
@@ -416,6 +416,7 @@
# NOTE: in the only1Header00, do not translate "Header"
only1Header00=Only one Header element allowed!
+optionAll00=generate code for all elements, even unreferenced ones
optionHelp00=print this message and exit
# NOTE: in optionImport00, do not translate "WSDL"
1.6 +20 -0
xml-axis/java/src/org/apache/axis/wsdl/WSDL2Java.java
Index: WSDL2Java.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/WSDL2Java.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- WSDL2Java.java 12 Jan 2002 16:31:37 -0000 1.5
+++ WSDL2Java.java 6 Feb 2002 21:08:54 -0000 1.6
@@ -93,6 +93,7 @@
protected static final int NOIMPORTS_OPT = 'n';
protected static final int PACKAGE_OPT = 'p';
protected static final int DEBUG_OPT = 'D';
+ protected static final int ALL_OPT = 'a';
// Scope constants
public static final byte NO_EXPLICIT_SCOPE = 0x00;
@@ -153,6 +154,10 @@
CLOptionDescriptor.ARGUMENT_DISALLOWED,
NOIMPORTS_OPT,
JavaUtils.getMessage("optionImport00")),
+ new CLOptionDescriptor("all",
+ CLOptionDescriptor.ARGUMENT_DISALLOWED,
+ ALL_OPT,
+ JavaUtils.getMessage("optionAll00")),
new CLOptionDescriptor("Debug",
CLOptionDescriptor.ARGUMENT_DISALLOWED,
DEBUG_OPT,
@@ -228,6 +233,17 @@
} // generateImports
/**
+ * By default, code is generated only for referenced elements.
+ * Call generateAll(true) and WSDL2Java will generate code for all
+ * elements in the scope regardless of whether they are
+ * referenced. Scope means: by default, all WSDL files; if
+ * generateImports(false), then only the immediate WSDL file.
+ */
+ public void generateAll(boolean all) {
+ emitter.generateAll(all);
+ } // generateAll
+
+ /**
* Turn on/off debug messages.
* @param boolean value
*/
@@ -461,6 +477,10 @@
case NOIMPORTS_OPT:
wsdl2java.generateImports(false);
+ break;
+
+ case ALL_OPT:
+ wsdl2java.generateAll(true);
break;
case DEBUG_OPT:
1.15 +13 -2
xml-axis/java/src/org/apache/axis/wsdl/toJava/Emitter.java
Index: Emitter.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/Emitter.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- Emitter.java 1 Feb 2002 22:08:26 -0000 1.14
+++ Emitter.java 6 Feb 2002 21:08:54 -0000 1.15
@@ -109,6 +109,7 @@
protected boolean bEmitTestCase = false;
protected boolean bVerbose = false;
protected boolean bGenerateImports = true;
+ protected boolean bGenerateAll = false;
protected String outputDir = null;
protected String packageName = null;
protected byte scope = NO_EXPLICIT_SCOPE;
@@ -208,8 +209,7 @@
// that didn't contain a binding, merely a service
that referred
// to a non-existent binding. Don't bother writing
it.
// If this isn't a SOAP binding, don't bother
writing it, either.
- if (binding.isUndefined() ||
- bEntry.getBindingType() !=
BindingEntry.TYPE_SOAP) {
+ if (binding.isUndefined()) {
continue;
}
writer = writerFactory.getWriter(binding,
symbolTable);
@@ -304,6 +304,17 @@
public void generateImports(boolean generateImports) {
this.bGenerateImports = generateImports;
} // generateImports
+
+ /**
+ * By default, code is generated only for referenced elements.
+ * Call generateAll(true) and WSDL2Java will generate code for all
+ * elements in the scope regardless of whether they are
+ * referenced. Scope means: by default, all WSDL files; if
+ * generateImports(false), then only the immediate WSDL file.
+ */
+ public void generateAll(boolean all) {
+ bGenerateAll = all;
+ } // generateAll
/**
* Turn on/off debug messages.
1.11 +27 -4
xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaWriterFactory.java
Index: JavaWriterFactory.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaWriterFactory.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- JavaWriterFactory.java 2 Feb 2002 15:43:51 -0000 1.10
+++ JavaWriterFactory.java 6 Feb 2002 21:08:54 -0000 1.11
@@ -95,7 +95,12 @@
this.symbolTable = symbolTable;
javifyNames(symbolTable);
resolveNameClashes(symbolTable);
- ignoreNonSOAPBindingPortTypes(symbolTable);
+ if (emitter.bGenerateAll) {
+ setAllReferencesToTrue();
+ }
+ else {
+ ignoreNonSOAPBindings(symbolTable);
+ }
constructSignatures(symbolTable);
determineIfHoldersNeeded(symbolTable);
} // writerPass
@@ -319,9 +324,25 @@
}
/**
- * If a binding's type is not TYPE_SOAP, then we don't use that
binding's portType.
+ * The --all flag is set on the command line (or generateAll(true)
is called on WSDL2Java).
+ * Set all symbols as referenced.
*/
- private void ignoreNonSOAPBindingPortTypes(SymbolTable symbolTable)
{
+ private void setAllReferencesToTrue() {
+ Iterator it = symbolTable.getHashMap().values().iterator();
+ while (it.hasNext()) {
+ Vector v = (Vector) it.next();
+ for (int i = 0; i < v.size(); ++i) {
+ SymTabEntry entry = (SymTabEntry) v.elementAt(i);
+ entry.setIsReferenced(true);
+ }
+ }
+ } // setAllReferencesToTrue
+
+ /**
+ * If a binding's type is not TYPE_SOAP, then we don't use that
binding
+ * or that binding's portType.
+ */
+ private void ignoreNonSOAPBindings(SymbolTable symbolTable) {
// Look at all uses of the portTypes. If none of the portType's
bindings are of type
// TYPE_SOAP, then turn off that portType's isReferenced flag.
@@ -352,6 +373,8 @@
}
}
else {
+ bEntry.setIsReferenced(false);
+
// If a binding is not of type TYPE_SOAP, then
mark its portType as
// unused ONLY if it hasn't already been marked
as used.
if (!usedPortTypes.contains(ptEntry)) {
@@ -368,7 +391,7 @@
PortTypeEntry ptEntry = (PortTypeEntry)
unusedPortTypes.get(i);
ptEntry.setIsReferenced(false);
}
- } // ignoreNonSOAPBindingPortTypes
+ } // ignoreNonSOAPBindings
private void constructSignatures(SymbolTable symbolTable) {
Iterator it = symbolTable.getHashMap().values().iterator();
1.3 +0 -2
xml-axis/java/src/org/apache/axis/wsdl/toJava/PortTypeEntry.java
Index: PortTypeEntry.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/PortTypeEntry.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- PortTypeEntry.java 24 Jan 2002 23:12:59 -0000 1.2
+++ PortTypeEntry.java 6 Feb 2002 21:08:54 -0000 1.3
@@ -83,6 +83,4 @@
public PortType getPortType() {
return portType;
} // getPortType
-
-
} // class PortTypeEntry
1.16 +8 -0 xml-axis/java/test/wsdl/Wsdl2javaAntTask.java
Index: Wsdl2javaAntTask.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/wsdl/Wsdl2javaAntTask.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- Wsdl2javaAntTask.java 27 Jan 2002 02:43:35 -0000 1.15
+++ Wsdl2javaAntTask.java 6 Feb 2002 21:08:54 -0000 1.16
@@ -77,6 +77,7 @@
private boolean skeleton = true ;
private boolean testCase = false;
private boolean noImports = false;
+ private boolean all = false;
private HashMap namespaceMap = new HashMap();
private String output = "." ;
private String deployScope = "";
@@ -94,6 +95,7 @@
log("\toutput:" + output, Project.MSG_VERBOSE);
log("\tdeployScope:" + deployScope, Project.MSG_VERBOSE);
log("\tURL:" + url, Project.MSG_VERBOSE);
+ log("\tall:" + all, Project.MSG_VERBOSE);
// Instantiate the emitter
WSDL2Java emitter = new WSDL2Java();
@@ -118,6 +120,7 @@
}
emitter.generateTestCase(testCase);
emitter.generateImports(!noImports);
+ emitter.generateAll(all);
emitter.setOutputDir(output);
emitter.generateSkeleton(skeleton);
emitter.verbose(verbose);
@@ -182,6 +185,11 @@
// The setter for the "url" attribute
public void setURL(String parameter) {
this.url = parameter;
+ }
+
+ // The setter for the "all" attribute
+ public void setAll(String parameter) {
+ this.all = Project.toBoolean(parameter);
}
/** the command arguments */
1.68 +8 -0 xml-axis/java/test/wsdl/Wsdl2javaTestSuite.xml
Index: Wsdl2javaTestSuite.xml
===================================================================
RCS file: /home/cvs/xml-axis/java/test/wsdl/Wsdl2javaTestSuite.xml,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -r1.67 -r1.68
--- Wsdl2javaTestSuite.xml 5 Feb 2002 19:36:31 -0000 1.67
+++ Wsdl2javaTestSuite.xml 6 Feb 2002 21:08:54 -0000 1.68
@@ -427,6 +427,14 @@
<mapping namespace="http://test.com/reference" package
="test.wsdl.filegen"/>
</wsdl2java>
+ <!-- Same test as above but this time the -a flag is turned on -->
+ <wsdl2java url="test/wsdl/filegen/FileGen.wsdl"
+ output="build/work"
+ skeleton="no"
+ all="yes">
+ <mapping namespace="http://test.com/reference" package
="test.wsdl.filegenAll"/>
+ </wsdl2java>
+
<!-- Check to make sure we map XML names that are illegal Java
correctly -->
<wsdl2java url="test/wsdl/names/JavaNames.wsdl"
output="build/work"
1.3 +1 -1 xml-axis/java/test/wsdl/filegen/FileGen.wsdl
Index: FileGen.wsdl
===================================================================
RCS file: /home/cvs/xml-axis/java/test/wsdl/filegen/FileGen.wsdl,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FileGen.wsdl 13 Dec 2001 17:33:19 -0000 1.2
+++ FileGen.wsdl 6 Feb 2002 21:08:54 -0000 1.3
@@ -99,7 +99,7 @@
<!-- Non-soap binding, no code should be emitted for it -->
<binding name="ReferenceHttpGet" type="serviceNS:PortTypeNotSoap">
<http:binding verb="GET" />
- <operation name="myop">
+ <operation name="otherop">
<http:operation location="/GetReference" />
<input>
<http:urlEncoded />
1.4 +1 -0 xml-axis/java/test/wsdl/filegen/FileGenTestCase.java
Index: FileGenTestCase.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/test/wsdl/filegen/FileGenTestCase.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FileGenTestCase.java 5 Feb 2002 16:22:40 -0000 1.3
+++ FileGenTestCase.java 6 Feb 2002 21:08:54 -0000 1.4
@@ -80,6 +80,7 @@
*/
protected Set shouldExist() {
HashSet set = new HashSet();
+ set.add("AllOptionTestCase.java");
set.add("FileGenTestCase.java");
set.add("OpFault.java");
set.add("PortTypeSoap.java");
1.1
xml-axis/java/test/wsdl/filegen/AllOptionTestCase.java
Index: AllOptionTestCase.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Axis" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
/**
* This tests the file generation of only the items that are referenced
in WSDL
*
*/
package test.wsdl.filegen;
import java.io.File;
import java.util.HashSet;
import java.util.Set;
public class AllOptionTestCase extends FileGenTestCase {
public AllOptionTestCase(String name) {
super(name);
}
/**
* List of files which should be generated.
*/
protected Set shouldExist() {
HashSet set = new HashSet();
set.add("Address.java");
set.add("InvalidTickerFaultMessage.java");
set.add("OpFault.java");
set.add("PortTypeNotSoap.java");
set.add("PortTypeSoap.java");
set.add("ReferenceHttpGetStub.java");
set.add("ReferenceService.java");
set.add("ReferenceServiceLocator.java");
set.add("ReferenceSoapBindingStub.java");
set.add("StateType.java");
return set;
} // shouldExist
/**
* The directory containing the files that should exist.
*/
protected String rootDir() {
return "build" + File.separator + "work" + File.separator +
"test" + File.separator + "wsdl" + File.separator +
"filegenAll";
} // rootDir
} // class AllOptionTestCase