You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2004/08/18 13:33:58 UTC
cvs commit: ws-axis/java/test/encoding TestDeser2001.java
dims 2004/08/18 04:33:57
Modified: java/src/org/apache/axis/wsdl/symbolTable Utils.java
java/src/org/apache/axis/wsdl/toJava
JavaGeneratorFactory.java JavaHolderWriter.java
JavaStubWriter.java JavaTestCaseWriter.java
Utils.java
java/test/encoding TestDeser2001.java
Log:
Fix for AXIS-1191 - Incorrect mapping of local elements with minOccurs="0" maxOccurs="1"
from Andrei Iltchenko <an...@nl.compuware.com>
Notes:
- I fixed a TZ failure that was happening on my machine here in India...
Revision Changes Path
1.40 +0 -37 ws-axis/java/src/org/apache/axis/wsdl/symbolTable/Utils.java
Index: Utils.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/symbolTable/Utils.java,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- Utils.java 30 Mar 2004 11:36:02 -0000 1.39
+++ Utils.java 18 Aug 2004 11:33:56 -0000 1.40
@@ -79,43 +79,6 @@
}
/**
- * getNillableQName returns the QName to use if the nillable=true
- * attribute is used.
- * For example, in JAX-RPC:
- * The QName "xsd:int" maps to a java int.
- * However if an element with a type="xsd:int" also has the
- * "nillable=true" attribute, the type should be an Integer (not an int).
- * So in these circumstances, this routine is called with xsd:int to
- * get a suitable qname (soapenc:int) which maps to Integer.
- *
- * @param qName QName
- * @return
- */
- public static QName getNillableQName(QName qName) {
-
- QName rc = qName;
-
- if (Constants.isSchemaXSD(rc.getNamespaceURI())) {
- String localName = rc.getLocalPart();
-
- if (localName.equals("int") || localName.equals("long")
- || localName.equals("short") || localName.equals("float")
- || localName.equals("double")
- || localName.equals("boolean")
- || localName.equals("byte")) {
- rc = findQName(Constants.URI_DEFAULT_SOAP_ENC,
- qName.getLocalPart());
- } else if (localName.equals("base64Binary")) {
- rc = findQName(Constants.URI_DEFAULT_SOAP_ENC, "base64");
- } else if (localName.equals("hexBinary")) {
- rc = findQName(Constants.URI_DEFAULT_SCHEMA_XSD, "hexBinary");
- }
- }
-
- return rc;
- }
-
- /**
* Given a node, return the value of the given attribute.
* If the attribute does not exist, searching continues through ancestor nodes until found.
* This method is useful for finding attributes that pertain to a group of contained
1.54 +2 -6 ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaGeneratorFactory.java
Index: JavaGeneratorFactory.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaGeneratorFactory.java,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -r1.53 -r1.54
--- JavaGeneratorFactory.java 4 Aug 2004 02:54:29 -0000 1.53
+++ JavaGeneratorFactory.java 18 Aug 2004 11:33:57 -0000 1.54
@@ -1305,13 +1305,9 @@
String javifiedName = Utils.xmlNameToJava(p.getName());
if (p.getMode() == Parameter.IN) {
- signature = signature + Utils.getParameterTypeName(p) + " "
- + javifiedName;
+ signature += Utils.getParameterTypeName(p) + " " + javifiedName;
} else {
- signature =
- signature
- + Utils.holder(p.getMIMEInfo(), p.getType(), emitter) + " "
- + javifiedName;
+ signature += Utils.holder(p, emitter) + " " + javifiedName;
}
}
1.18 +1 -1 ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaHolderWriter.java
Index: JavaHolderWriter.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaHolderWriter.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- JavaHolderWriter.java 25 Feb 2004 14:02:52 -0000 1.17
+++ JavaHolderWriter.java 18 Aug 2004 11:33:57 -0000 1.18
@@ -36,7 +36,7 @@
*/
protected JavaHolderWriter(Emitter emitter, TypeEntry type) {
- super(emitter, Utils.holder(null, type, emitter), "holder");
+ super(emitter, Utils.holder(type, emitter), "holder");
this.type = type;
} // ctor
1.135 +3 -22 ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java
Index: JavaStubWriter.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java,v
retrieving revision 1.134
retrieving revision 1.135
diff -u -r1.134 -r1.135
--- JavaStubWriter.java 11 Aug 2004 16:58:36 -0000 1.134
+++ JavaStubWriter.java 18 Aug 2004 11:33:57 -0000 1.135
@@ -581,22 +581,12 @@
QName paramType = Utils.getXSIType(p);
// Set the javaType to the name of the type
- String javaType = null;
-
- if (p.getMIMEInfo() != null) {
- MimeInfo mimeInfo = p.getMIMEInfo();
-
- javaType = JavaUtils.mimeToJava(mimeInfo.getType())
- + mimeInfo.getDimensions() + ".class, ";
- } else {
- javaType = p.getType().getName();
-
+ String javaType = Utils.getParameterTypeName(p);
if (javaType != null) {
javaType += ".class, ";
} else {
javaType = "null, ";
}
- }
// Get the text representing newing a QName for the name and type
String paramNameText = Utils.getNewQNameWithLastLocalPart(p.getQName());
@@ -620,21 +610,12 @@
QName returnType = Utils.getXSIType(parameters.returnParam);
// Get the javaType
- String javaType = null;
-
- if (parameters.returnParam.getMIMEInfo() != null) {
- MimeInfo mimeInfo = parameters.returnParam.getMIMEInfo();
-
- javaType = JavaUtils.mimeToJava(mimeInfo.getType())
- + mimeInfo.getDimensions();
- } else {
- javaType = parameters.returnParam.getType().getName();
- }
+ String javaType = Utils.getParameterTypeName(parameters.returnParam);
if (javaType == null) {
javaType = "";
} else {
- javaType = javaType + ".class";
+ javaType += ".class";
}
pw.println(" oper.setReturnType("
1.61 +1 -5 ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaTestCaseWriter.java
Index: JavaTestCaseWriter.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaTestCaseWriter.java,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -r1.60 -r1.61
--- JavaTestCaseWriter.java 11 Aug 2004 16:58:36 -0000 1.60
+++ JavaTestCaseWriter.java 18 Aug 2004 11:33:57 -0000 1.61
@@ -238,11 +238,7 @@
// if we have an out or in/out, we are passing in a holder
if (param.getMode() != Parameter.IN) {
- pw.print(
- "new "
- + Utils.holder(
- param.getMIMEInfo(), param.getType(), emitter) + "(");
-
+ pw.print("new " + Utils.holder(param, emitter) + "(");
suffix = ")";
}
1.88 +30 -23 ws-axis/java/src/org/apache/axis/wsdl/toJava/Utils.java
Index: Utils.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/toJava/Utils.java,v
retrieving revision 1.87
retrieving revision 1.88
diff -u -r1.87 -r1.88
--- Utils.java 3 May 2004 20:04:10 -0000 1.87
+++ Utils.java 18 Aug 2004 11:33:57 -0000 1.88
@@ -21,18 +21,7 @@
import org.apache.axis.enum.Use;
import org.apache.axis.utils.JavaUtils;
import org.apache.axis.utils.Messages;
-import org.apache.axis.wsdl.symbolTable.BaseType;
-import org.apache.axis.wsdl.symbolTable.BindingEntry;
-import org.apache.axis.wsdl.symbolTable.CollectionTE;
-import org.apache.axis.wsdl.symbolTable.CollectionType;
-import org.apache.axis.wsdl.symbolTable.Element;
-import org.apache.axis.wsdl.symbolTable.MessageEntry;
-import org.apache.axis.wsdl.symbolTable.MimeInfo;
-import org.apache.axis.wsdl.symbolTable.Parameter;
-import org.apache.axis.wsdl.symbolTable.Parameters;
-import org.apache.axis.wsdl.symbolTable.SchemaUtils;
-import org.apache.axis.wsdl.symbolTable.SymbolTable;
-import org.apache.axis.wsdl.symbolTable.TypeEntry;
+import org.apache.axis.wsdl.symbolTable.*;
import org.apache.commons.logging.Log;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -72,22 +61,29 @@
protected static Log log = LogFactory.getLog(Utils.class.getName());
/**
+ * @see #holder(Parameter, Emitter)
+ */
+ public static String holder(TypeEntry type, Emitter emitter) {
+ Parameter arg = new Parameter();
+ // For other fields the default values will do.
+ arg.setType(type);
+ return holder(arg, emitter);
+ }
+ /**
* Given a type, return the Java mapping of that type's holder.
*
- * @param mimeInfo
- * @param type
- * @param emitter
- * @return
+ * @param p parameter whose holder class name we want to obtain.
+ * @param emitter the only {@link Emitter} object embodying the running
+ * instance of WSDL2Java.
+ * @return the name of the holder class for <tt>p</tt>.
*/
- public static String holder(MimeInfo mimeInfo, TypeEntry type,
- Emitter emitter) {
-
- String mimeType = (mimeInfo == null)
+ public static String holder(Parameter p, Emitter emitter) {
+ String mimeType = (p.getMIMEInfo() == null)
? null
- : mimeInfo.getType();
- String mimeDimensions = (mimeInfo == null)
+ : p.getMIMEInfo().getType();
+ String mimeDimensions = (mimeType == null)
? ""
- : mimeInfo.getDimensions();
+ : p.getMIMEInfo().getDimensions();
// Add the holders that JAX-RPC forgot about - the MIME type holders.
if (mimeType != null) {
@@ -111,7 +107,18 @@
}
}
+ TypeEntry type = p.getType();
String typeValue = type.getName();
+ // For base types that are nillable and are mapped to primitives,
+ // need to switch to the corresponding wrapper types.
+ if (p.isOmittable()
+ && (type instanceof BaseType
+ || type instanceof DefinedElement
+ && type.getRefType() instanceof BaseType)) {
+ String wrapperTypeValue = (String) TYPES.get(typeValue);
+ typeValue = wrapperTypeValue == null ? typeValue
+ : wrapperTypeValue;
+ }
// byte[] has a reserved holders
if (typeValue.equals("byte[]")) {
1.31 +1 -1 ws-axis/java/test/encoding/TestDeser2001.java
Index: TestDeser2001.java
===================================================================
RCS file: /home/cvs/ws-axis/java/test/encoding/TestDeser2001.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- TestDeser2001.java 29 Jul 2004 22:26:22 -0000 1.30
+++ TestDeser2001.java 18 Aug 2004 11:33:57 -0000 1.31
@@ -221,7 +221,7 @@
String offsetString = msecOffset > 0 ? "+" : "-";
offsetString += hourOffset >= 10 ? "" + hourOffset : "0" + hourOffset;
offsetString += ":";
- int minOffset = Math.abs(msecOffset % MILLISECONDS_IN_HOUR);
+ int minOffset = Math.abs(msecOffset % MILLISECONDS_IN_HOUR) / MILLISECONDS_IN_MINUTE;
if (minOffset == 0) {
offsetString += "00";
}