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 sc...@apache.org on 2006/11/10 21:40:52 UTC

svn commit: r473462 - in /webservices/axis2/trunk/java/modules/jaxws: src/org/apache/axis2/jaxws/client/ src/org/apache/axis2/jaxws/client/proxy/ src/org/apache/axis2/jaxws/core/ src/org/apache/axis2/jaxws/core/controller/ src/org/apache/axis2/jaxws/me...

Author: scheu
Date: Fri Nov 10 12:40:51 2006
New Revision: 473462

URL: http://svn.apache.org/viewvc?view=rev&rev=473462
Log:
AXIS2-1674
Contributor: Rich Scheuerle
Added support for MimeHeaders for Dispatch<SOAPMessage> & Provider<SOAPMessage>...plus some minor bug fixes

Modified:
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/BaseDispatch.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/MessageContext.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/Message.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/impl/JAXBBlockImpl.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageImpl.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/util/MessageUtils.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/provider/SoapMessageProviderTests.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/provider/soapmsg/SoapMessageProvider.java

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/BaseDispatch.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/BaseDispatch.java?view=diff&rev=473462&r1=473461&r2=473462
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/BaseDispatch.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/BaseDispatch.java Fri Nov 10 12:40:51 2006
@@ -132,9 +132,9 @@
                 XMLFault fault = responseMsg.getXMLFault();
                 throw ExceptionFactory.makeWebServiceException(fault.getReason().getText());
             }
-            else if (responseMsg.getLocalException() != null) {
+            else if (responseMsgCtx.getLocalException() != null) {
                 // use the factory, it'll throw the right thing:
-                throw ExceptionFactory.makeWebServiceException(responseMsg.getLocalException());
+                throw ExceptionFactory.makeWebServiceException(responseMsgCtx.getLocalException());
             }
         } catch (MessageException e) {
             throw ExceptionFactory.makeWebServiceException(e);

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java?view=diff&rev=473462&r1=473461&r2=473462
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java Fri Nov 10 12:40:51 2006
@@ -316,9 +316,9 @@
 		    }
 		    
 		    throw (Throwable)object;
-		} else if (responseMsg.getLocalException() != null) {
+		} else if (responseContext.getLocalException() != null) {
 		    // use the factory, it'll throw the right thing:
-		    throw ExceptionFactory.makeWebServiceException(responseMsg.getLocalException());
+		    throw ExceptionFactory.makeWebServiceException(responseContext.getLocalException());
 		}
 		Object object = methodMarshaller.demarshalResponse(responseMsg, args);
 		if (log.isDebugEnabled()) {

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/MessageContext.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/MessageContext.java?view=diff&rev=473462&r1=473461&r2=473462
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/MessageContext.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/MessageContext.java Fri Nov 10 12:40:51 2006
@@ -52,6 +52,10 @@
     private QName operationName;    //FIXME: This should become the OperationDescription
     private Message message;
     private Mode mode;
+    
+    // If a local exception is thrown, the exception is placed on the message context.
+    // It is not converted into a Message.
+    private Throwable localException = null;
         
     public MessageContext() {
         axisMsgCtx = new org.apache.axis2.context.MessageContext();
@@ -144,5 +148,26 @@
         }
 
         return maintainSession;
+    }
+    
+    /**
+     * The local exception is the Throwable object held on the Message
+     * from a problem that occurred due to something other than the
+     * server.  In other words, no message ever travelled across the wire.
+     * @return the Throwable object or null
+     */
+     public Throwable getLocalException() {
+         return localException;
+     }
+
+    /**
+     * The local exception is the Throwable object held on the Message
+     * from a problem that occurred due to something other than the
+     * server.  In other words, no message ever travelled across the wire.
+     * @param t
+     * @see Throwable
+     */
+    public void setLocalException(Throwable t) {
+        localException = t;
     }
 }

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java?view=diff&rev=473462&r1=473461&r2=473462
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java Fri Nov 10 12:40:51 2006
@@ -138,7 +138,7 @@
             if (response.getMessage() == null && faultexception != null) {
                 MessageFactory factory = (MessageFactory) FactoryRegistry.getFactory(MessageFactory.class);
                 Message message = factory.create(request.getMessage().getProtocol());
-                message.setLocalException(faultexception);
+                response.setLocalException(faultexception);
                 response.setMessage(message);
             }
             

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/Message.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/Message.java?view=diff&rev=473462&r1=473461&r2=473462
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/Message.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/Message.java Fri Nov 10 12:40:51 2006
@@ -19,6 +19,7 @@
 import java.util.List;
 
 import javax.activation.DataHandler;
+import javax.xml.soap.MimeHeaders;
 import javax.xml.soap.SOAPMessage;
 
 /**
@@ -95,20 +96,13 @@
     public void setMTOMEnabled(boolean b);
     
     /**
-     * The local exception is the Throwable object held on the Message
-     * from a problem that occurred due to something other than the
-     * server.  In other words, no message ever travelled across the wire.
-     * @return the Throwable object or null
+     * @return get the MimeHeaders
      */
-     public Throwable getLocalException();
-
+    public MimeHeaders getMimeHeaders();
+    
     /**
-     * The local exception is the Throwable object held on the Message
-     * from a problem that occurred due to something other than the
-     * server.  In other words, no message ever travelled across the wire.
-     * @param t
-     * @see Throwable
+     * Set the MimeHeaders
+     * @param mhs MimeHeaders
      */
-    public void setLocalException(Throwable t);
-	
+    public void setMimeHeaders(MimeHeaders mhs);
 }

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/impl/JAXBBlockImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/impl/JAXBBlockImpl.java?view=diff&rev=473462&r1=473461&r2=473462
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/impl/JAXBBlockImpl.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/impl/JAXBBlockImpl.java Fri Nov 10 12:40:51 2006
@@ -174,13 +174,8 @@
                 am.setMessage(msg);
                 m.setAttachmentMarshaller(am);
             }   
-            if (busObject instanceof JAXBElement) {
-            	m.marshal(busObject, writer);
-            } else {
-            	JAXBElement b = new JAXBElement(this.getQName(), busObject.getClass(), busObject);
-            	m.marshal(b, writer);
-            }
             
+            m.marshal(busObject, writer);
             
             
             // Successfully marshalled the data

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageImpl.java?view=diff&rev=473462&r1=473461&r2=473462
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageImpl.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageImpl.java Fri Nov 10 12:40:51 2006
@@ -27,6 +27,7 @@
 import javax.xml.namespace.QName;
 import javax.xml.soap.AttachmentPart;
 import javax.xml.soap.MessageFactory;
+import javax.xml.soap.MimeHeader;
 import javax.xml.soap.MimeHeaders;
 import javax.xml.soap.SOAPEnvelope;
 import javax.xml.soap.SOAPMessage;
@@ -67,7 +68,7 @@
 	XMLPart xmlPart = null; // the representation of the xmlpart
 	List<Attachment> attachments = new ArrayList<Attachment>(); // non-xml parts
     boolean mtomEnabled;
-	Throwable localException = null;
+    private MimeHeaders mimeHeaders = new MimeHeaders(); 
     
 	// Constants
 	private static final String SOAP11_ENV_NS = "http://schemas.xmlsoap.org/soap/envelope/";
@@ -177,10 +178,9 @@
 
 			// Create soapMessage object from Message Factory using the input
 			// stream created from OM.
-
-			// TODO should we read the MIME Header from JAXWS MessageContext.
-			// For now I will create a default header
-			MimeHeaders defaultHeader = new MimeHeaders();
+      
+			// Get the MimeHeaders
+			MimeHeaders defaultHeaders = this.getMimeHeaders();
 
 			// Toggle based on SOAP 1.1 or SOAP 1.2
 			String contentType = null;
@@ -189,8 +189,10 @@
 			} else {
 				contentType = SOAP12_CONTENT_TYPE;
 			}
-			defaultHeader.addHeader("Content-type", contentType +"; charset=UTF-8");
-			SOAPMessage soapMessage = mf.createMessage(defaultHeader, inStream);
+            
+            // Override the content-type
+			defaultHeaders.setHeader("Content-type", contentType +"; charset=UTF-8");
+			SOAPMessage soapMessage = mf.createMessage(defaultHeaders, inStream);
             
             // At this point the XMLPart is still an OMElement.  We need to change it to the new SOAPEnvelope.
 			createXMLPart(soapMessage.getSOAPPart().getEnvelope());
@@ -385,14 +387,6 @@
     public String getXMLPartContentType() {
         return xmlPart.getXMLPartContentType();
     }
-    
-    public Throwable getLocalException() {
-        return localException;
-    }
-
-    public void setLocalException(Throwable t) {
-        localException = t;
-    }
 
     public Style getStyle() {
         return xmlPart.getStyle();
@@ -410,5 +404,21 @@
         xmlPart.setOperationElement(operationQName);
     }
 
+    /* (non-Javadoc)
+     * @see org.apache.axis2.jaxws.message.Attachment#getMimeHeaders()
+     */
+    public MimeHeaders getMimeHeaders() {
+       return mimeHeaders;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.axis2.jaxws.message.Attachment#setMimeHeaders(javax.xml.soap.MimeHeaders)
+     */
+    public void setMimeHeaders(MimeHeaders mhs) {
+        mimeHeaders = mhs;
+        if (mimeHeaders == null) {
+            mimeHeaders = new MimeHeaders();
+        }
+    }
 
 }

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/util/MessageUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/util/MessageUtils.java?view=diff&rev=473462&r1=473461&r2=473462
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/util/MessageUtils.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/util/MessageUtils.java Fri Nov 10 12:40:51 2006
@@ -17,6 +17,7 @@
 package org.apache.axis2.jaxws.message.util;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 
@@ -53,6 +54,7 @@
 import org.apache.axis2.jaxws.registry.FactoryRegistry;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.http.Header;
 
 
 /**
@@ -164,6 +166,18 @@
                 throw ExceptionFactory.makeWebServiceException("Could not create new Message");
             }
             
+            // Add all the MimeHeaders from the Axis2 MessageContext
+            MimeHeaders mhs = message.getMimeHeaders();
+            HashMap headerMap = (HashMap) msgContext.getProperty(MessageContext.TRANSPORT_HEADERS);
+            if (headerMap != null) {
+                Iterator it = headerMap.keySet().iterator();
+                while (it.hasNext()) {
+                    String key = (String) it.next();
+                    String value = (String) headerMap.get(key);
+                    mhs.addHeader(key, value);
+                }
+            }
+            
             // FIXME: This should be revisited when we re-work the MTOM support.
             //This destroys performance by forcing a double pass through the message.
             //If attachments are found on the MessageContext, then that means
@@ -241,6 +255,14 @@
         // Put the XML message on the Axis 2 Message Context
         SOAPEnvelope envelope = (SOAPEnvelope) message.getAsOMElement();
         msgContext.setEnvelope(envelope);
+        
+        // Put the Headers onto the MessageContext
+        HashMap headerMap = new HashMap();
+        for (Iterator it = message.getMimeHeaders().getAllHeaders(); it.hasNext();) {
+            MimeHeader mh = (MimeHeader) it.next();
+            headerMap.put(mh.getName(), mh.getValue());
+        }
+        msgContext.setProperty(MessageContext.TRANSPORT_HEADERS, headerMap);
         
         // Enable MTOM Attachments 
         if (message.isMTOMEnabled()) {

Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/provider/SoapMessageProviderTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/provider/SoapMessageProviderTests.java?view=diff&rev=473462&r1=473461&r2=473462
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/provider/SoapMessageProviderTests.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/provider/SoapMessageProviderTests.java Fri Nov 10 12:40:51 2006
@@ -95,10 +95,17 @@
             SOAPMessage request = factory.createMessage(null, 
                     new ByteArrayInputStream(msg.getBytes()));
             
+            // Test the transport headers by sending a content description
+            request.setContentDescription(SoapMessageProvider.XML_REQUEST);
+            
             // Dispatch
         	System.out.println(">> Invoking SourceMessageProviderDispatch");
         	SOAPMessage response = dispatch.invoke(request);
 
+            // Check for valid content description
+            assert(response.getContentDescription() != null);
+            assert(response.getContentDescription().equals(SoapMessageProvider.XML_RESPONSE));
+            
             // Check assertions and get the data element
             SOAPElement dataElement = assertResponseXML(response, SoapMessageProvider.XML_RESPONSE);
             

Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/provider/soapmsg/SoapMessageProvider.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/provider/soapmsg/SoapMessageProvider.java?view=diff&rev=473462&r1=473461&r2=473462
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/provider/soapmsg/SoapMessageProvider.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/provider/soapmsg/SoapMessageProvider.java Fri Nov 10 12:40:51 2006
@@ -163,6 +163,10 @@
     private SOAPMessage getXMLResponse(SOAPMessage request, SOAPElement dataElement) throws Exception {
         SOAPMessage response;
         
+        // Transport header check
+        assert(request.getContentDescription() != null);
+        assert(request.getContentDescription().equals(SoapMessageProvider.XML_REQUEST));
+
         // Additional assertion checks
         assert(countAttachments(request) == 0);
         
@@ -171,6 +175,8 @@
         String responseXML = responseMsgStart + XML_RETURN + responseMsgEnd;
         response = factory.createMessage(null, new ByteArrayInputStream(responseXML.getBytes()));
         
+        // Set a content description
+        response.setContentDescription(SoapMessageProvider.XML_RESPONSE);
         return response;
     }
     



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org