You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2008/05/28 17:46:03 UTC

svn commit: r660986 - in /webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2: Constants.java builder/BuilderUtil.java builder/DataSourceBuilder.java engine/AxisConfiguration.java transport/TransportUtils.java

Author: dims
Date: Wed May 28 08:46:03 2008
New Revision: 660986

URL: http://svn.apache.org/viewvc?rev=660986&view=rev
Log:
part of fix for AXIS2-3805 - Provider<DataSource> does not work. ability to plugin a message formatter programatically, ability to specify a regexp for content-type key when looking up a builder. a new DataSourceBuilder that just wraps a DataSource inside an OMElement

Added:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/DataSourceBuilder.java
Modified:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/BuilderUtil.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java?rev=660986&r1=660985&r2=660986&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java Wed May 28 08:46:03 2008
@@ -378,6 +378,8 @@
          */
         public static final String MESSAGE_TYPE = "messageType";
         
+        public static final String MESSAGE_FORMATTER = "messageFormatter";
+
         public static final String SOAP_RESPONSE_MEP = "soapResponseMEP";
         
         /**

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/BuilderUtil.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/BuilderUtil.java?rev=660986&r1=660985&r2=660986&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/BuilderUtil.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/BuilderUtil.java Wed May 28 08:46:03 2008
@@ -711,9 +711,6 @@
                 msgContext.getConfigurationContext().getAxisConfiguration();
         Builder builder = configuration
                 .getMessageBuilder(type);
-        if (builder == null) {
-            builder = configuration.getMessageBuilder(type.toLowerCase());
-        }
         if (builder != null) {
             // Check whether the request has a Accept header if so use that as the response
             // message type.

Added: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/DataSourceBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/DataSourceBuilder.java?rev=660986&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/DataSourceBuilder.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/DataSourceBuilder.java Wed May 28 08:46:03 2008
@@ -0,0 +1,74 @@
+package org.apache.axis2.builder;
+
+import org.apache.axiom.attachments.utils.IOUtils;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMDataSource;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.OMOutputFormat;
+import org.apache.axiom.om.impl.OMNamespaceImpl;
+import org.apache.axiom.om.impl.llom.OMSourcedElementImpl;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.MessageContext;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Writer;
+
+public class DataSourceBuilder implements Builder {
+
+    public OMElement processDocument(InputStream inputStream, String contentType,
+                                     MessageContext msgContext)
+            throws AxisFault {
+        msgContext.setDoingREST(true);
+        OMNamespace ns = new OMNamespaceImpl("", "");
+        OMFactory factory = OMAbstractFactory.getOMFactory();
+        byte[] bytes;
+        try {
+            bytes = IOUtils.getStreamAsByteArray(inputStream);
+        } catch (IOException e) {
+            throw AxisFault.makeFault(e);
+        }
+        ByteArrayDataSourceEx ds = new ByteArrayDataSourceEx(bytes, contentType);
+        return new OMSourcedElementImpl("dummy", ns, factory, ds);
+    }
+
+    public class ByteArrayDataSourceEx extends javax.mail.util.ByteArrayDataSource implements OMDataSource {
+        private byte[] bytes;
+    
+        public ByteArrayDataSourceEx(byte[] bytes, String s) {
+            super(bytes, s);
+            this.bytes = bytes;
+        }
+
+        public void serialize(OutputStream output, OMOutputFormat format) throws XMLStreamException {
+            try {
+                output.write(bytes);
+            } catch (IOException e) {
+                throw new XMLStreamException(e);
+            }
+        }
+    
+        public java.lang.String getContentType() {
+            return super.getContentType();
+        }
+
+        public void serialize(Writer writer, OMOutputFormat format) throws XMLStreamException {
+            throw new UnsupportedOperationException("FIXME");
+        }
+
+        public void serialize(XMLStreamWriter xmlWriter) throws XMLStreamException {
+            throw new UnsupportedOperationException("FIXME");
+        }
+
+        public XMLStreamReader getReader() throws XMLStreamException {
+            throw new UnsupportedOperationException("FIXME");
+        }
+    }
+    
+}

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java?rev=660986&r1=660985&r2=660986&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java Wed May 28 08:46:03 2008
@@ -628,7 +628,24 @@
      *         the given content type.
      */
     public Builder getMessageBuilder(String contentType) {
-        return (Builder) messageBuilders.get(contentType);
+        if(messageBuilders.isEmpty()){
+            return null;
+        }
+        Builder builder = (Builder) messageBuilders.get(contentType);
+        if (builder == null) {
+            builder = (Builder) messageBuilders.get(contentType.toLowerCase());
+        }
+        if (builder == null) {
+            Iterator iterator = messageBuilders.entrySet().iterator();
+            while (iterator.hasNext() && builder == null) {
+                Map.Entry entry = (Map.Entry) iterator.next();
+                String key = (String) entry.getKey();
+                if (contentType.matches(key)) {
+                    builder = (Builder) entry.getValue();
+                }
+            }
+        }
+        return builder;
     }
 
     /**

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java?rev=660986&r1=660985&r2=660986&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java Wed May 28 08:46:03 2008
@@ -280,6 +280,12 @@
 
         }
         if (messageFormatter == null) {
+            messageFormatter = (MessageFormatter) msgContext.getProperty(Constants.Configuration.MESSAGE_FORMATTER);
+            if(messageFormatter != null) {
+                return messageFormatter;
+            }
+        }
+        if (messageFormatter == null) {
 
             // If we are doing rest better default to Application/xml formatter
             if (msgContext.isDoingREST()) {