You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by sc...@apache.org on 2010/06/10 17:33:04 UTC
svn commit: r953352 - in /axis/axis2/java/core/trunk/modules:
jaxws/src/org/apache/axis2/jaxws/message/impl/MessageFactoryImpl.java
kernel/src/org/apache/axis2/util/WrappedDataHandler.java
kernel/test/org/apache/axis2/util/WrappedDataHandlerTest.java
Author: scheu
Date: Thu Jun 10 15:33:03 2010
New Revision: 953352
URL: http://svn.apache.org/viewvc?rev=953352&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/kernel/src/org/apache/axis2/util/WrappedDataHandler.java
axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/util/WrappedDataHandlerTest.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=953352&r1=953351&r2=953352&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 Thu Jun 10 15:33:03 2010
@@ -20,12 +20,7 @@
package org.apache.axis2.jaxws.message.impl;
import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
-import org.apache.axiom.om.impl.OMNamespaceImpl;
-import org.apache.axiom.om.impl.llom.OMSourcedElementImpl;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
import org.apache.axis2.jaxws.ExceptionFactory;
@@ -37,6 +32,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 +114,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 +140,4 @@ public class MessageFactoryImpl implemen
}
return createFrom(block.getXMLStreamReader(true), protocol);
}
-
}
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=953352&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 Thu Jun 10 15:33:03 2010
@@ -0,0 +1,214 @@
+/*
+ * 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 real DataHandler instance.
+ */
+public class WrappedDataHandler extends DataHandler {
+
+ private static final Log log = LogFactory.getLog(WrappedDataHandler.class);
+
+ DataHandler delegate;
+ String contentType;
+
+ private static FakeDataSource FAKE_DS = new FakeDataSource();
+
+ // This class is simply used as a fake DataSource implementation so that the
+ // WrappedDataHandler class can call it's superclass's ctor with a non-null
+ // value that implements DataSource. The FakeDataSource instance will never
+ // be used, however. It's simply a placeholder.
+ private static class FakeDataSource implements DataSource {
+
+ @Override
+ public String getContentType() {
+ return "application/octet-stream";
+ }
+
+ @Override
+ public InputStream getInputStream() throws IOException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getName() {
+ return "FakeDataSource";
+ }
+
+ @Override
+ public OutputStream getOutputStream() throws IOException {
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ /**
+ * 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(FAKE_DS);
+
+ 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);
+ }
+}
Added: axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/util/WrappedDataHandlerTest.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/util/WrappedDataHandlerTest.java?rev=953352&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/util/WrappedDataHandlerTest.java (added)
+++ axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/util/WrappedDataHandlerTest.java Thu Jun 10 15:33:03 2010
@@ -0,0 +1,45 @@
+/*
+ * 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.net.URL;
+import javax.activation.DataHandler;
+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/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"));
+ }
+}
\ No newline at end of file