You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by wo...@apache.org on 2009/09/11 17:15:26 UTC
svn commit: r813872 -
/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java
Author: woodroy
Date: Fri Sep 11 15:15:25 2009
New Revision: 813872
URL: http://svn.apache.org/viewvc?rev=813872&view=rev
Log:
Fix NPE that occurs when Operation parameter is null for Soap12 faults
Modified:
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java?rev=813872&r1=813871&r2=813872&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java Fri Sep 11 15:15:25 2009
@@ -518,7 +518,13 @@
if (context.isSOAP11()) {
fault.getCode().setText(soapFaultCode);
} else {
- fault.getCode().getValue().setText(soapFaultCode);
+ SOAPFaultValue value = fault.getCode().getValue();
+ if(log.isDebugEnabled()){
+ log.debug("soapFaultCode originally was set to : " + soapFaultCode);
+ }
+ OMNamespace namespace = value.getNamespace();
+ soapFaultCode = switchNamespacePrefix(soapFaultCode, namespace);
+ value.setText(soapFaultCode);
}
}
@@ -639,7 +645,49 @@
return envelope;
}
+
+ /**
+ * Switch the namespace prefix in the soap fault code. It should match the prefix used
+ * by the outgoing soap envelope.
+ *
+ * @param soapFaultCode
+ * @param namespace
+ * @return
+ */
+ public static String switchNamespacePrefix(String soapFaultCode, OMNamespace namespace) {
+ if(soapFaultCode != null &&
+ soapFaultCode.endsWith(":" + SOAPConstants.FAULT_CODE_VERSION_MISMATCH)) {
+ String prefix = namespace.getPrefix();
+ if(log.isDebugEnabled()){
+ log.debug("prefix being used in the outgoing soap envelope is : " + prefix);
+ }
+ // The following methods set the prefix of the incoming soap envelope in soapFaultCode
+ // validateSOAPVersion method in BuilderUtil or
+ // identifySOAPVersion method in StAXSOAPModelBuilder
+ // But the outgoing envelope may have a different prefix, if it does then
+ // we need to strip the prefix set by those methods and add the
+ // correct one.
+ if (!soapFaultCode.startsWith(prefix + ":")) {
+ if(log.isDebugEnabled()){
+ log.debug("stripping old prefix and adding the new one - " + prefix);
+ }
+ // Strip the orginal prefix
+ int index = soapFaultCode.indexOf(':') + 1;
+ soapFaultCode = soapFaultCode.substring(index);
+ // Use the correct prefix for the outgoing soap envelope namespace
+ soapFaultCode = prefix + ":" + soapFaultCode;
+ }
+ }
+ if(log.isDebugEnabled()){
+ log.debug("soapFaultCode is being set to : " + soapFaultCode);
+ }
+ return soapFaultCode;
+ }
+
+
+
+
/**
* By the time the exception comes here it can be wrapped by so many levels. This will crip down
* to the root cause and get the initial error depending on the property