tomj 02/02/27 09:32:17
Modified: java/src/org/apache/axis/wsdl/toJava JavaStubWriter.java
java/src/org/apache/axis/client Call.java
java/src/org/apache/axis/message BodyBuilder.java
Log:
More document/literal changes to make interop tests work.
Revision Changes Path
1.36 +15 -3
xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java
Index: JavaStubWriter.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- JavaStubWriter.java 27 Feb 2002 15:50:11 -0000 1.35
+++ JavaStubWriter.java 27 Feb 2002 17:32:17 -0000 1.36
@@ -402,9 +402,9 @@
return;
}
-// if (type instanceof Element) {
-// return;
-// }
+ if (type instanceof Element) {
+ return;
+ }
if ( firstSer ) {
pw.println(" Class cls;" );
@@ -467,7 +467,13 @@
for (int i = 0; i < parms.list.size(); ++i) {
Parameter p = (Parameter) parms.list.get(i);
+ // We need to use the Qname of the actual type, not the QName of the
element
QName qn = p.type.getQName();
+ if (p.type instanceof DefinedElement) {
+ Node node = symbolTable.getTypeEntry(p.type.getQName(),
true).getNode();
+ qn = Utils.getNodeTypeRefQName(node, "type");
+ }
+
String typeString = "new javax.xml.rpc.namespace.QName(\"" +
qn.getNamespaceURI() + "\", \"" +
qn.getLocalPart() + "\")";
@@ -491,7 +497,13 @@
}
// set output type
if (parms.returnType != null) {
+ // We need to use the Qname of the actual type, not the QName of the
element
QName qn = parms.returnType.getQName();
+ if (parms.returnType instanceof DefinedElement) {
+ Node node = symbolTable.getTypeEntry(parms.returnType.getQName(),
true).getNode();
+ qn = Utils.getNodeTypeRefQName(node, "type");
+ }
+
String outputType = "new javax.xml.rpc.namespace.QName(\"" +
qn.getNamespaceURI() + "\", \"" +
qn.getLocalPart() + "\")";
1.84 +51 -40 xml-axis/java/src/org/apache/axis/client/Call.java
Index: Call.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/client/Call.java,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -r1.83 -r1.84
--- Call.java 27 Feb 2002 15:50:11 -0000 1.83
+++ Call.java 27 Feb 2002 17:32:17 -0000 1.84
@@ -1515,48 +1515,59 @@
resMsg = msgContext.getResponseMessage();
resEnv = (SOAPEnvelope)resMsg.getSOAPEnvelope();
- try {
- body = (RPCElement)resEnv.getFirstBody();
- resArgs = body.getParams();
- } catch (Exception e) {
- log.error(JavaUtils.getMessage("exception00"), e);
- throw AxisFault.makeFault(e);
- }
-
- if (resArgs != null && resArgs.size() > 0) {
-
- // If there is no return, then we start at index 0 to create the
outParams Map.
- // If there IS a return, then we start with 1.
- int outParamStart = 0;
-
- // If we have resArgs and the returnType is specified, then the first
- // resArgs is the return. If we have resArgs and neither returnType
- // nor paramTypes are specified, then we assume that the caller is
- // following the non-JAX-RPC AXIS shortcut of not having to specify
- // the return, in which case we again assume the first resArgs is
- // the return.
- // NOTE 1: the non-JAX-RPC AXIS shortcut allows a potential error
- // to escape notice. If the caller IS NOT following the non-JAX-RPC
- // shortcut but instead intentionally leaves returnType and params
- // null (ie., a method that takes no parameters and returns nothing)
- // then, if we DO receive something it should be an error, but this
- // code passes it through. The ideal solution here is to require
- // this caller to set the returnType to void, but there's no void
- // type in XML.
- // NOTE 2: we should probably verify that the resArgs element
- // types match the expected returnType and paramTypes, but I'm not
- // sure how to do that since the resArgs value is a Java Object
- // and the returnType and paramTypes are QNames.
- if (returnType != null || paramTypes == null) {
- RPCParam param = (RPCParam)resArgs.get(0);
- result = param.getValue();
- outParamStart = 1;
+ SOAPBodyElement bodyEl = resEnv.getFirstBody();
+ if (bodyEl instanceof RPCElement) {
+ try {
+ resArgs = ((RPCElement) bodyEl).getParams();
+ } catch (Exception e) {
+ log.error(JavaUtils.getMessage("exception00"), e);
+ throw AxisFault.makeFault(e);
}
-
- for (int i = outParamStart; i < resArgs.size(); i++) {
- RPCParam param = (RPCParam) resArgs.get(i);
- outParams.put(param.getName(), param.getValue());
+
+ if (resArgs != null && resArgs.size() > 0) {
+
+ // If there is no return, then we start at index 0 to create the
outParams Map.
+ // If there IS a return, then we start with 1.
+ int outParamStart = 0;
+
+ // If we have resArgs and the returnType is specified, then the
first
+ // resArgs is the return. If we have resArgs and neither returnType
+ // nor paramTypes are specified, then we assume that the caller is
+ // following the non-JAX-RPC AXIS shortcut of not having to specify
+ // the return, in which case we again assume the first resArgs is
+ // the return.
+ // NOTE 1: the non-JAX-RPC AXIS shortcut allows a potential error
+ // to escape notice. If the caller IS NOT following the non-JAX-RPC
+ // shortcut but instead intentionally leaves returnType and params
+ // null (ie., a method that takes no parameters and returns nothing)
+ // then, if we DO receive something it should be an error, but this
+ // code passes it through. The ideal solution here is to require
+ // this caller to set the returnType to void, but there's no void
+ // type in XML.
+ // NOTE 2: we should probably verify that the resArgs element
+ // types match the expected returnType and paramTypes, but I'm not
+ // sure how to do that since the resArgs value is a Java Object
+ // and the returnType and paramTypes are QNames.
+ if (returnType != null || paramTypes == null) {
+ RPCParam param = (RPCParam)resArgs.get(0);
+ result = param.getValue();
+ outParamStart = 1;
+ }
+
+ for (int i = outParamStart; i < resArgs.size(); i++) {
+ RPCParam param = (RPCParam) resArgs.get(i);
+ outParams.put(param.getName(), param.getValue());
+ }
+ }
+ } else {
+ // This is a SOAPBodyElement, try to treat it like a return value
+ try {
+ result = bodyEl.getValueAsType(returnType);
+ } catch (Exception e) {
+ // just return the SOAPElement
+ result = bodyEl;
}
+
}
if (log.isDebugEnabled()) {
1.20 +1 -1 xml-axis/java/src/org/apache/axis/message/BodyBuilder.java
Index: BodyBuilder.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/BodyBuilder.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- BodyBuilder.java 22 Feb 2002 23:39:45 -0000 1.19
+++ BodyBuilder.java 27 Feb 2002 17:32:17 -0000 1.20
@@ -148,7 +148,7 @@
context);
} else if (!gotRPCElement &&
isRoot &&
- msgContext.isPropertyTrue(MessageContext.ISRPC, true) ) {
+ msgContext.isEncoded() ) {
gotRPCElement = true;
element = new RPCElement(namespace, localName, prefix,
attributes, context);