Rich, I think this change causes the Hudson build to fail, because passing null as DataSource argument to DataHandler is not allowed. Probably this depends on the particular JAF implementation that is used. Can you make sure that the DataHandler wrapper works with both the Sun and the Geronimo implementation?
Andreas On Wed, Jun 9, 2010 at 14:02, <sc...@apache.org> wrote: > Author: scheu > Date: Wed Jun 9 12:02:06 2010 > New Revision: 952971 > > URL: http://svn.apache.org/viewvc?rev=952971&view=rev > Log: > AXIS2-4733 > Contributor: Phil Adams > Contributed WrappedDataHandler to allow Axis2 to set the appropriate > content-type on a DataHandler. > Also added a validation test. > > Added: > > axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/message/impl/WrappedDataHandlerTest.java > > axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/WrappedDataHandler.java > Modified: > > axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageFactoryImpl.java > > Modified: > axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageFactoryImpl.java > URL: > http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageFactoryImpl.java?rev=952971&r1=952970&r2=952971&view=diff > ============================================================================== > --- > axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageFactoryImpl.java > (original) > +++ > axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageFactoryImpl.java > Wed Jun 9 12:02:06 2010 > @@ -37,6 +37,7 @@ import org.apache.axis2.jaxws.message.da > import org.apache.axis2.jaxws.message.databinding.DataSourceBlock; > import org.apache.axis2.jaxws.message.factory.MessageFactory; > import org.apache.axis2.transport.http.HTTPConstants; > +import org.apache.axis2.util.WrappedDataHandler; > > import javax.xml.soap.AttachmentPart; > import javax.xml.soap.MimeHeader; > @@ -118,7 +119,7 @@ public class MessageFactoryImpl implemen > m.setDoingSWA(true); > while (it.hasNext()) { > AttachmentPart ap = (AttachmentPart)it.next(); > - m.addDataHandler(ap.getDataHandler(), ap.getContentId()); > + m.addDataHandler(new > WrappedDataHandler(ap.getDataHandler(), ap.getContentType()), > ap.getContentId()); > } > } > return m; > @@ -144,5 +145,4 @@ public class MessageFactoryImpl implemen > } > return createFrom(block.getXMLStreamReader(true), protocol); > } > - > } > > Added: > axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/message/impl/WrappedDataHandlerTest.java > URL: > http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/message/impl/WrappedDataHandlerTest.java?rev=952971&view=auto > ============================================================================== > --- > axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/message/impl/WrappedDataHandlerTest.java > (added) > +++ > axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/message/impl/WrappedDataHandlerTest.java > Wed Jun 9 12:02:06 2010 > @@ -0,0 +1,48 @@ > +package org.apache.axis2.jaxws.message.impl; > + > +/* > + * Licensed to the Apache Software Foundation (ASF) under one > + * or more contributor license agreements. See the NOTICE file > + * distributed with this work for additional information > + * regarding copyright ownership. The ASF licenses this file > + * to you under the Apache License, Version 2.0 (the > + * "License"); you may not use this file except in compliance > + * with the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, > + * software distributed under the License is distributed on an > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > + * KIND, either express or implied. See the License for the > + * specific language governing permissions and limitations > + * under the License. > + */ > + > +import java.net.URL; > +import javax.activation.DataHandler; > + > +import org.apache.axis2.util.WrappedDataHandler; > + > +import junit.framework.TestCase; > + > +/** > + * Test the WrappedDataHandler class. > + */ > +public class WrappedDataHandlerTest extends TestCase { > + > + /** > + * Verify that the Wrapped DataHandler maintains the correct content-type > value > + * for an XML document attachment. > + */ > + public void testWrappedDataHandler() throws Exception { > + URL xmlAttachment = new > URL("file:./test-resources/xml/soapmessage.xml"); > + > + DataHandler dh = new DataHandler(xmlAttachment); > + assertTrue(dh.getContentType().equals("application/xml")); > + > + WrappedDataHandler wrappedDH = new WrappedDataHandler(dh, "text/xml"); > + assertTrue(wrappedDH.getContentType() != null); > + assertTrue(wrappedDH.getContentType().equals("text/xml")); > + } > +} > > Added: > axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/WrappedDataHandler.java > URL: > http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/WrappedDataHandler.java?rev=952971&view=auto > ============================================================================== > --- > axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/WrappedDataHandler.java > (added) > +++ > axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/WrappedDataHandler.java > Wed Jun 9 12:02:06 2010 > @@ -0,0 +1,185 @@ > +/* > + * Licensed to the Apache Software Foundation (ASF) under one > + * or more contributor license agreements. See the NOTICE file > + * distributed with this work for additional information > + * regarding copyright ownership. The ASF licenses this file > + * to you under the Apache License, Version 2.0 (the > + * "License"); you may not use this file except in compliance > + * with the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, > + * software distributed under the License is distributed on an > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > + * KIND, either express or implied. See the License for the > + * specific language governing permissions and limitations > + * under the License. > + */ > + > +package org.apache.axis2.util; > + > +import java.awt.datatransfer.DataFlavor; > +import java.awt.datatransfer.UnsupportedFlavorException; > +import java.io.IOException; > +import java.io.InputStream; > +import java.io.OutputStream; > + > +import javax.activation.CommandInfo; > +import javax.activation.CommandMap; > +import javax.activation.DataHandler; > +import javax.activation.DataSource; > + > +import org.apache.commons.logging.Log; > +import org.apache.commons.logging.LogFactory; > + > +/** > + * This class acts as a wrapper for the javax.activation.DataHandler class. > + * It is used to store away a (potentially) user-defined content-type value > along with > + * the DataHandler instance. We'll delegate all method calls except for > getContentType() > + * to the delegate DataHandler instance passed into the ctor. > + */ > +public class WrappedDataHandler extends DataHandler { > + > + private static final Log log = > LogFactory.getLog(WrappedDataHandler.class); > + > + DataHandler delegate; > + String contentType; > + > + /** > + * Constructs a new instance of the WrappedDataHandler. > + * @param _delegate the real DataHandler instance being wrapped > + * @param _contentType the user-defined contentType associated with the > DataHandler instance > + */ > + public WrappedDataHandler(DataHandler _delegate, String _contentType) { > + super((DataSource)null); > + > + delegate = _delegate; > + contentType = _contentType; > + > + if (log.isDebugEnabled()) { > + log.debug("Created instance of WrappedDatahandler: " + > this.toString() + ", contentType=" + contentType > + + "\nDelegate DataHandler: " + delegate.toString()); > + } > + } > + > + /* (non-Javadoc) > + * @see javax.activation.DataHandler#getAllCommands() > + */ > + �...@override > + public CommandInfo[] getAllCommands() { > + return delegate.getAllCommands(); > + } > + > + /* (non-Javadoc) > + * @see > javax.activation.DataHandler#getBean(javax.activation.CommandInfo) > + */ > + �...@override > + public Object getBean(CommandInfo paramCommandInfo) { > + return delegate.getBean(paramCommandInfo); > + } > + > + /* (non-Javadoc) > + * @see javax.activation.DataHandler#getCommand(java.lang.String) > + */ > + �...@override > + public CommandInfo getCommand(String paramString) { > + return delegate.getCommand(paramString); > + } > + > + /* (non-Javadoc) > + * @see javax.activation.DataHandler#getContent() > + */ > + �...@override > + public Object getContent() throws IOException { > + return delegate.getContent(); > + } > + > + /* (non-Javadoc) > + * @see javax.activation.DataHandler#getContentType() > + */ > + �...@override > + public String getContentType() { > + return (contentType != null ? contentType : > delegate.getContentType()); > + } > + > + /* (non-Javadoc) > + * @see javax.activation.DataHandler#getDataSource() > + */ > + �...@override > + public DataSource getDataSource() { > + return delegate.getDataSource(); > + } > + > + /* (non-Javadoc) > + * @see javax.activation.DataHandler#getInputStream() > + */ > + �...@override > + public InputStream getInputStream() throws IOException { > + return delegate.getInputStream(); > + } > + > + /* (non-Javadoc) > + * @see javax.activation.DataHandler#getName() > + */ > + �...@override > + public String getName() { > + return delegate.getName(); > + } > + > + /* (non-Javadoc) > + * @see javax.activation.DataHandler#getOutputStream() > + */ > + �...@override > + public OutputStream getOutputStream() throws IOException { > + return delegate.getOutputStream(); > + } > + > + /* (non-Javadoc) > + * @see javax.activation.DataHandler#getPreferredCommands() > + */ > + �...@override > + public CommandInfo[] getPreferredCommands() { > + return delegate.getPreferredCommands(); > + } > + > + /* (non-Javadoc) > + * @see > javax.activation.DataHandler#getTransferData(java.awt.datatransfer.DataFlavor) > + */ > + �...@override > + public Object getTransferData(DataFlavor paramDataFlavor) throws > UnsupportedFlavorException, IOException { > + return delegate.getTransferData(paramDataFlavor); > + } > + > + /* (non-Javadoc) > + * @see javax.activation.DataHandler#getTransferDataFlavors() > + */ > + �...@override > + public synchronized DataFlavor[] getTransferDataFlavors() { > + return delegate.getTransferDataFlavors(); > + } > + > + /* (non-Javadoc) > + * @see > javax.activation.DataHandler#isDataFlavorSupported(java.awt.datatransfer.DataFlavor) > + */ > + �...@override > + public boolean isDataFlavorSupported(DataFlavor paramDataFlavor) { > + return delegate.isDataFlavorSupported(paramDataFlavor); > + } > + > + /* (non-Javadoc) > + * @see > javax.activation.DataHandler#setCommandMap(javax.activation.CommandMap) > + */ > + �...@override > + public synchronized void setCommandMap(CommandMap paramCommandMap) { > + delegate.setCommandMap(paramCommandMap); > + } > + > + /* (non-Javadoc) > + * @see javax.activation.DataHandler#writeTo(java.io.OutputStream) > + */ > + �...@override > + public void writeTo(OutputStream paramOutputStream) throws IOException { > + delegate.writeTo(paramOutputStream); > + } > +} > > > --------------------------------------------------------------------- To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org For additional commands, e-mail: java-dev-h...@axis.apache.org