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 ch...@apache.org on 2005/06/29 10:14:35 UTC

svn commit: r202333 - in /webservices/axis/trunk/java/modules: core/src/org/apache/axis/engine/ xml/src/org/apache/axis/om/impl/llom/ xml/src/org/apache/axis/soap/ xml/src/org/apache/axis/soap/impl/llom/ xml/src/org/apache/axis/soap/impl/llom/factory/ ...

Author: chinthaka
Date: Wed Jun 29 01:14:34 2005
New Revision: 202333

URL: http://svn.apache.org/viewcvs?rev=202333&view=rev
Log:
- Fixing OM namespace bug
- Adding correct SOAP fault handling to AxisEngine

Modified:
    webservices/axis/trunk/java/modules/core/src/org/apache/axis/engine/AxisEngine.java
    webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMElementImpl.java
    webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/SOAPFactory.java
    webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/SOAPFault.java
    webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/impl/llom/SOAPFaultImpl.java
    webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/impl/llom/factory/SOAPLinkedListImplFactory.java
    webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/impl/llom/soap11/SOAP11Factory.java

Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/engine/AxisEngine.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/engine/AxisEngine.java?rev=202333&r1=202332&r2=202333&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/engine/AxisEngine.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/engine/AxisEngine.java Wed Jun 29 01:14:34 2005
@@ -22,9 +22,10 @@
 import org.apache.axis.description.TransportOutDescription;
 import org.apache.axis.om.OMAbstractFactory;
 import org.apache.axis.om.OMOutput;
-import org.apache.axis.soap.SOAPBody;
-import org.apache.axis.soap.SOAPEnvelope;
+import org.apache.axis.soap.*;
 import org.apache.axis.soap.impl.llom.SOAPProcessingException;
+import org.apache.axis.soap.impl.llom.SOAPConstants;
+import org.apache.axis.soap.impl.llom.soap12.SOAP12Constants;
 import org.apache.axis.transport.TransportSender;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -45,8 +46,6 @@
 
     /**
      * Constructor AxisEngine
-     *
-     *
      */
     public AxisEngine(ConfigurationContext engineContext) {
         log.info("Axis Engine Started");
@@ -103,7 +102,7 @@
         try {
             ConfigurationContext sysCtx = msgContext.getSystemContext();
             ArrayList phases =
-                sysCtx.getAxisConfiguration().getInPhasesUptoAndIncludingPostDispatch();
+                    sysCtx.getAxisConfiguration().getInPhasesUptoAndIncludingPostDispatch();
 
             if (paused) {
                 resumeInvocationPhases(phases, msgContext);
@@ -148,11 +147,10 @@
 
             // create a SOAP envelope with the Fault
             MessageContext faultContext =
-                new MessageContext(
-                    engineContext,
-                    context.getSessionContext(),
-                    context.getTransportIn(),
-                    context.getTransportOut());
+                    new MessageContext(engineContext,
+                            context.getSessionContext(),
+                            context.getTransportIn(),
+                            context.getTransportOut());
 
             if (context.getFaultTo() != null) {
                 faultContext.setFaultTo(context.getFaultTo());
@@ -171,8 +169,14 @@
             faultContext.setProcessingFault(true);
             faultContext.setServerSide(true);
             SOAPEnvelope envelope = null;
+
             try {
-                envelope = OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope();
+
+                if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(context.getEnvelope().getNamespace().getName())) {
+                    envelope = OMAbstractFactory.getSOAP12Factory().getDefaultFaultEnvelope();
+                } else {
+                    envelope = OMAbstractFactory.getSOAP11Factory().getDefaultFaultEnvelope();
+                }
             } catch (SOAPProcessingException e1) {
                 throw new AxisFault(e1);
             }
@@ -180,7 +184,10 @@
             // TODO do we need to set old Headers back?
             SOAPBody body = envelope.getBody();
             e.printStackTrace();
-            body.addFault(new AxisFault(e.getMessage(), e));
+            
+//            body.addFault(new AxisFault(e.getMessage(), e));
+            body.getFault().setException(new AxisFault(e.getMessage(), e));
+            extractFaultInformationFromMessageContext(context, envelope.getBody().getFault());
 
             faultContext.setEnvelope(envelope);
 
@@ -202,6 +209,33 @@
         }
     }
 
+    private void extractFaultInformationFromMessageContext(MessageContext context, SOAPFault fault) {
+        Object faultCode = context.getProperty(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME);
+        if (faultCode != null) {
+            fault.setCode((SOAPFaultCode) faultCode);
+        }
+
+        Object faultReason = context.getProperty(SOAP12Constants.SOAP_FAULT_REASON_LOCAL_NAME);
+        if (faultReason != null) {
+            fault.setReason((SOAPFaultReason) faultReason);
+        }
+
+        Object faultRole = context.getProperty(SOAP12Constants.SOAP_FAULT_ROLE_LOCAL_NAME);
+        if (faultRole != null) {
+            fault.getRole().setText((String) faultRole);
+        }
+
+        Object faultNode = context.getProperty(SOAP12Constants.SOAP_FAULT_NODE_LOCAL_NAME);
+        if (faultNode != null) {
+            fault.getNode().setText((String) faultNode);
+        }
+
+        Object faultDetail = context.getProperty(SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME);
+        if (faultDetail != null) {
+            fault.setDetail((SOAPFaultDetail) faultDetail);
+        }
+    }
+
     private void verifyContextBuilt(MessageContext msgctx) throws AxisFault {
         if (msgctx.getSystemContext() == null) {
             throw new AxisFault("ConfigurationContext can not be null");
@@ -245,8 +279,9 @@
     /* -----------------   Methods related to storage ----------------------------------------------*/
     /**
      * Stores an object in the underlying storage
+     *
      * @param context The relevant engine context
-     * @param obj the object to be stored
+     * @param obj     the object to be stored
      * @return the storage key
      */
     public Object store(ConfigurationContext context, Object obj) {
@@ -255,10 +290,11 @@
 
     /**
      * retrieves an object from the underlying storage
-     * @see #store(org.apache.axis.context.EngineContext, Object)
+     *
      * @param context
      * @param key
      * @return
+     * @see #store(org.apache.axis.context.EngineContext, Object)
      */
     public Object retrieve(ConfigurationContext context, Object key) {
         return context.getStorage().get(key);
@@ -266,9 +302,10 @@
 
     /**
      * removes an object from the underlying storage
+     *
      * @param context
      * @param key
-     * @return  the object removed
+     * @return the object removed
      */
     public Object remove(ConfigurationContext context, Object key) {
         return context.getStorage().remove(key);
@@ -276,6 +313,7 @@
 
     /**
      * Clears the underlying storage
+     *
      * @param context
      * @return
      */

Modified: webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMElementImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMElementImpl.java?rev=202333&r1=202332&r2=202333&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMElementImpl.java (original)
+++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMElementImpl.java Wed Jun 29 01:14:34 2005
@@ -183,7 +183,7 @@
             if (ns != null) {
                 this.setNamespace(ns);
 //            throw new OMException("Element can not be declared without a namespaceURI. Every Element should be namespace qualified");
-                  
+
             }
         }
     }
@@ -338,17 +338,17 @@
 
         // go up to check with ancestors
         if (parent != null) {
-        	//Comment by Jaya:
-        	//For the OMDocument there won't be any explicit namespace
-        	//declarations, so going up the parent chain till the document
-        	//element should be enough.
-        	//If at a later point community decides that some standard 
-        	//namespaces, like 'xml' which every XML w/ namespaces document
-        	//is supposed to contain implicitly, should go into OMDocument then
-        	//this 'if' block needs to be revisited.
-        	if( parent instanceof OMElement) {
-        		return ((OMElementImpl)parent).findNamespace(uri, prefix);
-        	}
+            //Comment by Jaya:
+            //For the OMDocument there won't be any explicit namespace
+            //declarations, so going up the parent chain till the document
+            //element should be enough.
+            //If at a later point community decides that some standard
+            //namespaces, like 'xml' which every XML w/ namespaces document
+            //is supposed to contain implicitly, should go into OMDocument then
+            //this 'if' block needs to be revisited.
+            if (parent instanceof OMElement) {
+                return ((OMElementImpl) parent).findNamespace(uri, prefix);
+            }
         }
         return null;
     }
@@ -632,14 +632,14 @@
      * @param writer
      * @throws XMLStreamException
      */
-    public void serializeWithCache(OMOutput omOutput)  throws XMLStreamException {
-        serialize(omOutput,true);
+    public void serializeWithCache(OMOutput omOutput) throws XMLStreamException {
+        serialize(omOutput, true);
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////
     //////////////////////////////////////////////////////////////////////////////////////////////
 
-    protected void serialize(OMOutput omOutput,boolean cache)throws XMLStreamException {
+    protected void serialize(OMOutput omOutput, boolean cache) throws XMLStreamException {
 
         // select the builder
         short builderType = PULL_TYPE_BUILDER;    // default is pull type
@@ -648,28 +648,27 @@
         }
         if ((builderType == PUSH_TYPE_BUILDER)
                 && (builder.getRegisteredContentHandler() == null)) {
-            builder.registerExternalContentHandler(
-                    new StreamWriterToContentHandlerConverter(omOutput));
+            builder.registerExternalContentHandler(new StreamWriterToContentHandlerConverter(omOutput));
         }
 
 
         if (!cache) {
             //No caching
-            if (this.firstChild!=null){
-                OMSerializerUtil.serializeStartpart(this,omOutput);
+            if (this.firstChild != null) {
+                OMSerializerUtil.serializeStartpart(this, omOutput);
                 firstChild.serialize(omOutput);
                 OMSerializerUtil.serializeEndpart(omOutput);
-            }else if (!this.done){
-                if (builderType==PULL_TYPE_BUILDER){
-                    OMSerializerUtil.serializeByPullStream(this,omOutput);
-                }else{
-                    OMSerializerUtil.serializeStartpart(this,omOutput);
+            } else if (!this.done) {
+                if (builderType == PULL_TYPE_BUILDER) {
+                    OMSerializerUtil.serializeByPullStream(this, omOutput);
+                } else {
+                    OMSerializerUtil.serializeStartpart(this, omOutput);
                     builder.setCache(cache);
                     builder.next();
                     OMSerializerUtil.serializeEndpart(omOutput);
                 }
-            }else{
-                OMSerializerUtil.serializeNormal(this,omOutput, cache);
+            } else {
+                OMSerializerUtil.serializeNormal(this, omOutput, cache);
             }
 
             //serilize siblings
@@ -683,7 +682,7 @@
             }
         } else {
             //Cached
-            OMSerializerUtil.serializeNormal(this,omOutput, cache);
+            OMSerializerUtil.serializeNormal(this, omOutput, cache);
             // serialize the siblings
             OMNode nextSibling = this.getNextSibling();
             if (nextSibling != null) {
@@ -705,7 +704,7 @@
      * @throws XMLStreamException
      */
     public void serialize(OMOutput omOutput) throws XMLStreamException {
-        this. serialize(omOutput,false);
+        this.serialize(omOutput, false);
     }
 
 
@@ -785,9 +784,11 @@
      * @param namespace
      */
     public void setNamespace(OMNamespace namespace) {
-        OMNamespace ns = this.findNamespace(namespace.getName(), namespace.getPrefix());
-        if (ns == null) {
-            ns = this.declareNamespace(namespace);
+        if (ns != null) {
+            OMNamespace ns = this.findNamespace(namespace.getName(), namespace.getPrefix());
+            if (ns == null) {
+                ns = this.declareNamespace(namespace);
+            }
         }
         this.ns = namespace;
     }
@@ -798,13 +799,13 @@
      * @return
      */
     public QName getQName() {
-         QName qName = null;
+        QName qName = null;
 
         if (ns != null) {
             if (ns.getPrefix() != null) {
                 qName = new QName(ns.getName(), localName, ns.getPrefix());
-            }else{
-               qName = new QName(ns.getName(), localName);
+            } else {
+                qName = new QName(ns.getName(), localName);
             }
         } else {
             qName = new QName(localName);

Modified: webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/SOAPFactory.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/SOAPFactory.java?rev=202333&r1=202332&r2=202333&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/SOAPFactory.java (original)
+++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/SOAPFactory.java Wed Jun 29 01:14:34 2005
@@ -274,4 +274,5 @@
      * @return
      */
     public SOAPEnvelope getDefaultEnvelope() throws SOAPProcessingException;
+    public SOAPEnvelope getDefaultFaultEnvelope() throws SOAPProcessingException;
 }

Modified: webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/SOAPFault.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/SOAPFault.java?rev=202333&r1=202332&r2=202333&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/SOAPFault.java (original)
+++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/SOAPFault.java Wed Jun 29 01:14:34 2005
@@ -90,5 +90,6 @@
      * @return
      * @throws org.apache.axis.om.OMException
      */
-    public abstract Exception getException() throws OMException;
+    public Exception getException() throws OMException;
+    public void setException(Exception e) throws OMException;
 }

Modified: webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/impl/llom/SOAPFaultImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/impl/llom/SOAPFaultImpl.java?rev=202333&r1=202332&r2=202333&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/impl/llom/SOAPFaultImpl.java (original)
+++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/impl/llom/SOAPFaultImpl.java Wed Jun 29 01:14:34 2005
@@ -54,6 +54,10 @@
      */
     public SOAPFaultImpl(SOAPBody parent, Exception e) throws SOAPProcessingException {
         super(parent, SOAPConstants.SOAPFAULT_LOCAL_NAME, true);
+        setException(e);
+    }
+
+    public void setException(Exception e) {
         this.e = e;
         putExceptionToSOAPFault(e);
     }

Modified: webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/impl/llom/factory/SOAPLinkedListImplFactory.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/impl/llom/factory/SOAPLinkedListImplFactory.java?rev=202333&r1=202332&r2=202333&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/impl/llom/factory/SOAPLinkedListImplFactory.java (original)
+++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/impl/llom/factory/SOAPLinkedListImplFactory.java Wed Jun 29 01:14:34 2005
@@ -171,4 +171,21 @@
     public SOAPEnvelope getDefaultEnvelope() throws SOAPProcessingException {
         throw new UnsupportedOperationException();
     }
+
+    public SOAPEnvelope getDefaultFaultEnvelope() throws SOAPProcessingException {
+        SOAPEnvelope defaultEnvelope = getDefaultEnvelope();
+        SOAPFault fault = createSOAPFault(defaultEnvelope.getBody());
+
+        SOAPFaultCode faultCode = createSOAPFaultCode(fault);
+        SOAPFaultValue value = createSOAPFaultValue(faultCode);
+
+        SOAPFaultReason reason = createSOAPFaultReason(fault);
+        SOAPFaultText faultText = createSOAPFaultText(reason);
+
+        SOAPFaultNode faultNode = createSOAPFaultNode(fault);
+        SOAPFaultRole faultRole = createSOAPFaultRole(fault);
+        SOAPFaultDetail faultDetail = createSOAPFaultDetail(fault);
+
+        return defaultEnvelope;
+    }
 }

Modified: webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/impl/llom/soap11/SOAP11Factory.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/impl/llom/soap11/SOAP11Factory.java?rev=202333&r1=202332&r2=202333&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/impl/llom/soap11/SOAP11Factory.java (original)
+++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis/soap/impl/llom/soap11/SOAP11Factory.java Wed Jun 29 01:14:34 2005
@@ -154,15 +154,11 @@
 
     public SOAPEnvelope getDefaultEnvelope() throws SOAPProcessingException {
         OMNamespace ns =
-        new OMNamespaceImpl(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI,
-                SOAP11Constants.SOAP_DEFAULT_NAMESPACE_PREFIX);
+                new OMNamespaceImpl(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI,
+                        SOAP11Constants.SOAP_DEFAULT_NAMESPACE_PREFIX);
         SOAPEnvelopeImpl env = new SOAPEnvelopeImpl(ns);
-
-
         SOAPHeader headerImpl = createSOAPHeader(env);
-
         SOAPBody bodyImpl = createSOAPBody(env);
-
         return env;
     }