tomj 2002/10/02 08:14:56
Modified: java/src/org/apache/axis/message Tag: interop4
SOAPFaultDetailsBuilder.java
java/src/org/apache/axis/wsdl/toJava Tag: interop4
JavaStubWriter.java
Log:
All tests in the simple-rpc-encoded.wsdl now pass against the Sun endpoint.
Add some protective code to check for null.
Emit the fault QNames using the namespace from the BindingFault, not the
message namespace. Don't emit register calls for duplicate QNames.
Revision Changes Path
No revision
No revision
1.1.2.2 +1 -1
xml-axis/java/src/org/apache/axis/message/Attic/SOAPFaultDetailsBuilder.java
Index: SOAPFaultDetailsBuilder.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/message/Attic/SOAPFaultDetailsBuilder.java,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- SOAPFaultDetailsBuilder.java 2 Oct 2002 12:09:57 -0000 1.1.2.1
+++ SOAPFaultDetailsBuilder.java 2 Oct 2002 15:14:56 -0000 1.1.2.2
@@ -119,7 +119,7 @@
Service service = (Service) msgContext.getProperty(Call.WSDL_SERVICE);
if (service != null) {
Service.FaultInfo info = service.getFaultInfoForQName(qn);
- if (info.cls != null) {
+ if (info != null && info.cls != null) {
// Set the class
builder.setFaultClass(info.cls);
// register callback for the data, use the xmlType from fault info
No revision
No revision
1.98.2.2 +24 -5
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.98.2.1
retrieving revision 1.98.2.2
diff -u -r1.98.2.1 -r1.98.2.2
--- JavaStubWriter.java 1 Oct 2002 20:38:51 -0000 1.98.2.1
+++ JavaStubWriter.java 2 Oct 2002 15:14:56 -0000 1.98.2.2
@@ -71,7 +71,9 @@
import javax.wsdl.OperationType;
import javax.wsdl.Part;
import javax.wsdl.PortType;
+import javax.wsdl.BindingFault;
import javax.wsdl.extensions.soap.SOAPOperation;
+import javax.wsdl.extensions.soap.SOAPFault;
import javax.xml.namespace.QName;
import java.io.IOException;
import java.io.PrintWriter;
@@ -402,11 +404,15 @@
* This function returns the faults in an operation
*/
private void writeFaultInfo(PrintWriter pw, PortType portType) {
+ // Where we remember which QName we have already written out
+ Vector emitted = new Vector();
// Get all the faults from all the operations
List operations = portType.getOperations();
for (int i = 0; i < operations.size(); ++i) {
Operation operation = (Operation) operations.get(i);
Map faults = operation.getFaults();
+ BindingOperation bindOp =
+ binding.getBindingOperation(operation.getName(), null, null);
if (faults != null) {
Iterator it = faults.values().iterator();
@@ -418,15 +424,28 @@
Map parts = message.getParts();
String partName = (String) parts.keySet().iterator().next();
- // Hack alert!
- // We need a QName for the exception part that we are going to
- // serialize, but <part name=""> isn't NOT a QName - go figure
- // So we will use the namespace of the Message, and the name of
the part
+ // Use the namespace in the binding for this fault
// NOTE: we do the same thing when writing the fault in
JavaFaultWriter
- String namespace = message.getQName().getNamespaceURI();
+ BindingFault bindFault =
bindOp.getBindingFault(fault.getName());
+ List extList = bindFault.getExtensibilityElements();
+ String namespace = "";
+ for (Iterator iterator = extList.iterator();
iterator.hasNext();) {
+ Object o = (Object) iterator.next();
+ if (o instanceof SOAPFault) {
+ SOAPFault sf = (SOAPFault) o;
+ namespace = sf.getNamespaceURI();
+ }
+ }
// Now make a QName
QName qname = new QName(namespace, partName);
+
+ if (emitted.contains(qname)) {
+ continue;
+ }
+
+ // Remember that we have already registered this name
+ emitted.add(qname);
// Get the Exception class name
String className = Utils.getFullExceptionName(fault,
symbolTable);