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 nt...@apache.org on 2008/04/15 18:37:16 UTC
svn commit: r648320 - in /webservices/axis2/trunk/java/modules:
jaxws-integration/test/org/apache/axis2/jaxws/sample/
jaxws-integration/test/org/apache/axis2/jaxws/sample/mtom/
jaxws/src/org/apache/axis2/datasource/jaxb/
jaxws/src/org/apache/axis2/jaxw...
Author: nthaker
Date: Tue Apr 15 09:37:08 2008
New Revision: 648320
URL: http://svn.apache.org/viewvc?rev=648320&view=rev
Log:
Axis2-3740
Added:
webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/mtom/MtomSampleMTOMThresholdService.java
Modified:
webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/MtomSampleTests.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/datasource/jaxb/JAXBAttachmentMarshaller.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/config/MTOMConfigurator.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/SOAPMessageFormatter.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java
Modified: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/MtomSampleTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/MtomSampleTests.java?rev=648320&r1=648319&r2=648320&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/MtomSampleTests.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/MtomSampleTests.java Tue Apr 15 09:37:08 2008
@@ -27,6 +27,7 @@
import org.apache.axis2.jaxws.TestLogger;
import org.apache.axis2.jaxws.framework.AbstractTestCase;
import org.apache.axis2.jaxws.provider.DataSourceImpl;
+import org.apache.axis2.util.Utils;
import org.test.mtom.ImageDepot;
import org.test.mtom.ObjectFactory;
import org.test.mtom.SendImage;
@@ -66,6 +67,8 @@
"http://localhost:6060/axis2/services/MtomSampleService.MtomSampleMTOMEnableServicePort";
private static final String URL_ENDPOINT_MTOMDEFAULT =
"http://localhost:6060/axis2/services/MtomSampleService.MtomSampleMTOMDefaultServicePort";
+ private static final String URL_ENDPOINT_MTOMTHRESHOLD =
+ "http://localhost:6060/axis2/services/MtomSampleService.MtomSampleMTOMThresholdServicePort";
private static final String IMAGE_DIR = System.getProperty("basedir",".")+"/"+"test-resources"+File.separator+"image";
@@ -631,6 +634,63 @@
assertNotNull(response);
assertNotNull(response.getOutput().getImageData());
*/
+ }
+ /*
+ * Enable attachment Optimization but call an endpoint with @MTOM(enable=true, Threshold = 99000)
+ */
+
+ public void testSendImage_setMTOMThreshold() throws Exception {
+ TestLogger.logger.debug("----------------------------------");
+ TestLogger.logger.debug("test: " + getName());
+ System.out.println("testSendImage_setMTOMThreshold()");
+ String imageResourceDir = IMAGE_DIR;
+
+ //Create a DataSource from an image
+ File file = new File(imageResourceDir+File.separator+"test.jpg");
+ ImageInputStream fiis = new FileImageInputStream(file);
+ Image image = ImageIO.read(fiis);
+ DataSource imageDS = new DataSourceImpl("image/jpeg","test.jpg",image);
+
+ //Create a DataHandler with the String DataSource object
+ DataHandler dataHandler = new DataHandler(imageDS);
+
+ //Store the data handler in ImageDepot bean
+ ImageDepot imageDepot = new ObjectFactory().createImageDepot();
+ imageDepot.setImageData(dataHandler);
+
+ SendImage request = new ObjectFactory().createSendImage();
+ request.setInput(imageDepot);
+
+ //Create the necessary JAXBContext
+ JAXBContext jbc = JAXBContext.newInstance("org.test.mtom");
+ //Setting Threshold to send request Inline
+ int threshold = 100000;
+ MTOMFeature mtom21 = new MTOMFeature(true, threshold);
+ // Create the JAX-WS client needed to send the request
+ Service service = Service.create(QNAME_SERVICE);
+ service.addPort(QNAME_PORT, SOAPBinding.SOAP11HTTP_BINDING, URL_ENDPOINT_MTOMTHRESHOLD);
+ Dispatch<Object> dispatch = service.createDispatch(QNAME_PORT, jbc, Mode.PAYLOAD, mtom21);
+
+ List cids = null;
+ SendImageResponse response = null;
+ try {
+ JAXBAttachmentUnmarshallerMonitor.setMonitoring(true);
+ response = (SendImageResponse) dispatch.invoke(request);
+
+ // The cids are collected in the monitor. We will check
+ // this to make sure the response mtom is not inlined
+ cids = JAXBAttachmentUnmarshallerMonitor.getBlobCIDs();
+ } finally {
+ JAXBAttachmentUnmarshallerMonitor.setMonitoring(false);
+ }
+
+
+ assertNotNull(response);
+ assertNotNull(response.getOutput().getImageData());
+
+ //There shold be no cid as attachment should be inlined.
+ int numCIDs = (cids == null) ? 0 : cids.size();
+ assertTrue("Expected one attachment inlined:" + numCIDs, numCIDs == 0);
}
}
Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/mtom/MtomSampleMTOMThresholdService.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/mtom/MtomSampleMTOMThresholdService.java?rev=648320&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/mtom/MtomSampleMTOMThresholdService.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/mtom/MtomSampleMTOMThresholdService.java Tue Apr 15 09:37:08 2008
@@ -0,0 +1,64 @@
+package org.apache.axis2.jaxws.sample.mtom;
+
+import java.awt.Image;
+import java.io.InputStream;
+
+import javax.activation.DataHandler;
+import javax.activation.DataSource;
+import javax.imageio.ImageIO;
+import javax.jws.WebService;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.soap.MTOM;
+
+import org.apache.axis2.datasource.jaxb.JAXBAttachmentUnmarshallerMonitor;
+import org.apache.axis2.jaxws.TestLogger;
+import org.apache.axis2.jaxws.provider.DataSourceImpl;
+import org.test.mtom.ImageDepot;
+import org.test.mtom.ObjectFactory;
+/**
+ * Endpoint with MTOM enabled and Threshold set to size bigger than the attachment size.
+ * The response from Server should have attachments inlined.
+ */
+@WebService(serviceName="MtomSampleService",
+ endpointInterface="org.apache.axis2.jaxws.sample.mtom.MtomSample")
+@MTOM(enabled=true, threshold=99000)
+public class MtomSampleMTOMThresholdService implements MtomSample {
+
+ public ImageDepot sendImage(ImageDepot input) {
+ TestLogger.logger.debug("MtomSampleMTOMEnableService [new sendImage request received]");
+ DataHandler data = input.getImageData();
+
+ TestLogger.logger.debug("[contentType] " + data.getContentType());
+ ImageDepot output = (new ObjectFactory()).createImageDepot();
+ Image image = null;
+
+ resetAttachmentUnmarshallingMonitor();
+ try {
+ InputStream stream = (InputStream) data.getContent();
+ image = ImageIO.read(stream);
+
+ DataSource imageDS = new DataSourceImpl("image/jpeg", "test.jpg", image);
+ DataHandler handler = new DataHandler(imageDS);
+ output.setImageData(handler);
+ }
+ catch (Exception e) {
+ throw new WebServiceException(e);
+ }
+ return output;
+ }
+
+ public ImageDepot sendText(byte[] input) {
+ TestLogger.logger.debug("[new sendText request received]");
+ return null;
+ }
+
+ /**
+ * Reset the monitor so that we can determine if an
+ * attachment is unmarshalled on the response.
+ */
+ private void resetAttachmentUnmarshallingMonitor() {
+ if (JAXBAttachmentUnmarshallerMonitor.isMonitoring()) {
+ JAXBAttachmentUnmarshallerMonitor.clear();
+ }
+ }
+}
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/datasource/jaxb/JAXBAttachmentMarshaller.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/datasource/jaxb/JAXBAttachmentMarshaller.java?rev=648320&r1=648319&r2=648320&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/datasource/jaxb/JAXBAttachmentMarshaller.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/datasource/jaxb/JAXBAttachmentMarshaller.java Tue Apr 15 09:37:08 2008
@@ -23,6 +23,7 @@
import org.apache.axiom.om.OMText;
import org.apache.axiom.om.impl.MTOMXMLStreamWriter;
import org.apache.axiom.om.impl.llom.OMTextImpl;
+import org.apache.axis2.Constants;
import org.apache.axis2.Constants.Configuration;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.transport.http.HTTPConstants;
@@ -82,8 +83,7 @@
if (log.isDebugEnabled()){
log.debug("isXOPPackage returns " + value);
}
- return value;
-
+ return value;
}
@@ -109,7 +109,7 @@
"{" + namespace + "}" + localPart);
}
- String cid;
+ String cid = null;
try {
// Create MIME Body Part
@@ -119,9 +119,14 @@
//Create a data source for the MIME Body Part
MimePartDataSource mpds = new MimePartDataSource(mbp);
+ long dataLength =data.length;
+ Integer value = (Integer)msgContext.getProperty(Constants.Configuration.MTOM_THRESHOLD);
+ int optimizedThreshold = (value!=null)?value.intValue():0;
- DataHandler dataHandler = new DataHandler(mpds);
- cid = addDataHandler(dataHandler);
+ if(optimizedThreshold==0 || dataLength > optimizedThreshold){
+ DataHandler dataHandler = new DataHandler(mpds);
+ cid = addDataHandler(dataHandler);
+ }
// Add the content id to the mime body part
mbp.setHeader(HTTPConstants.HEADER_CONTENT_ID, cid);
@@ -173,10 +178,12 @@
// even if the attachment is SWAREF ?)
if (writer instanceof MTOMXMLStreamWriter) {
textNode = new OMTextImpl(dh, null);
- cid = textNode.getContentID();
- ((MTOMXMLStreamWriter) writer).writeOptimized(textNode);
- // Remember the attachment on the message.
- addDataHandler(dh, cid);
+ if(((MTOMXMLStreamWriter) writer).isOptimizedThreshold(textNode)){
+ cid = textNode.getContentID();
+ ((MTOMXMLStreamWriter) writer).writeOptimized(textNode);
+ // Remember the attachment on the message.
+ addDataHandler(dh, cid);
+ }
}
if (log.isDebugEnabled()){
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/config/MTOMConfigurator.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/config/MTOMConfigurator.java?rev=648320&r1=648319&r2=648320&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/config/MTOMConfigurator.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/config/MTOMConfigurator.java Tue Apr 15 09:37:08 2008
@@ -19,6 +19,8 @@
package org.apache.axis2.jaxws.client.config;
+import org.apache.axis2.Constants;
+import org.apache.axis2.description.Parameter;
import org.apache.axis2.jaxws.ExceptionFactory;
import org.apache.axis2.jaxws.binding.SOAPBinding;
import org.apache.axis2.jaxws.core.MessageContext;
@@ -68,49 +70,22 @@
// Enable MTOM
requestMsg.setMTOMEnabled(true);
-
if (threshold <= 0) {
if (log.isDebugEnabled()) {
log.debug("Enabling MTOM with no threshold.");
}
- }
- else if (attachmentIDs != null) {
- // REVIEW This processing will be moved to axiom.
- // DISABLING FOR NOW
- /*
- long size = 0L;
-
- for (String attachmentID : attachmentIDs) {
- DataHandler dh = requestMsg.getDataHandler(attachmentID);
-
- if (dh != null) {
- DataSource ds = dh.getDataSource();
- InputStream is = null;
-
- try {
- is = ds.getInputStream();
- size += is.available();
- }
- catch (Exception e) {
- throw ExceptionFactory.
- makeWebServiceException(Messages.getMessage("mtomAttachErr"), e);
- }
- finally {
- try {
- if (is != null)
- is.close();
- }
- catch (Exception e) {
- //Nothing to do.
- }
- }
- }
- }
-
- if (size > threshold) {
- requestMsg.setMTOMEnabled(true);
+ }else{
+ if(log.isDebugEnabled()){
+ log.debug("MTOM Threshold Value ="+threshold);
}
- */
+
+ //set MTOM threshold value on message context.
+ //Once MTOM threshold is set on message context it will be
+ //read by SOAPMessageFormatter.writeTo() while writing the attachment
+ //SOAPMessageFormatter will further propogate the threshold value to
+ //Axiom.OMOutputFormat. JAXBAttachmentUnmarshaller will then make
+ //decision if the attachment should be inlined or optimized.
+ messageContext.setProperty(Constants.Configuration.MTOM_THRESHOLD, new Integer(threshold));
}
}
else {
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/SOAPMessageFormatter.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/SOAPMessageFormatter.java?rev=648320&r1=648319&r2=648320&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/SOAPMessageFormatter.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/SOAPMessageFormatter.java Tue Apr 15 09:37:08 2008
@@ -26,9 +26,11 @@
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.Parameter;
import org.apache.axis2.transport.MessageFormatter;
import org.apache.axis2.transport.http.util.URLTemplatingUtil;
import org.apache.axis2.util.JavaUtils;
+import org.apache.axis2.util.Utils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -52,6 +54,15 @@
log.debug(" isDoingSWA=" + format.isDoingSWA());
}
OMElement element = msgCtxt.getEnvelope();
+
+ int optimizedThreshold = Utils.getMtomThreshold(msgCtxt);
+ if(optimizedThreshold > 0){
+ if(log.isDebugEnabled()){
+ log.debug("Setting MTOM optimized Threshold Value on OMOutputFormat");
+ }
+ format.setOptimizedThreshold(optimizedThreshold);
+ }
+
try {
if (!(format.isOptimized()) & format.isDoingSWA()) {
StringWriter bufferedSOAPBody = new StringWriter();
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java?rev=648320&r1=648319&r2=648320&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java Tue Apr 15 09:37:08 2008
@@ -540,4 +540,21 @@
});
}
}
+
+ public static int getMtomThreshold(MessageContext msgCtxt){
+ Integer value = null;
+ if(!msgCtxt.isServerSide()){
+ value = (Integer)msgCtxt.getProperty(Constants.Configuration.MTOM_THRESHOLD);
+ }else{
+ Parameter param = msgCtxt.getParameter(Constants.Configuration.MTOM_THRESHOLD);
+ if(param!=null){
+ value = (Integer)param.getValue();
+ }
+ }
+ int threshold = (value!=null)?value.intValue():0;
+ if(log.isDebugEnabled()){
+ log.debug("MTOM optimized Threshold value ="+threshold);
+ }
+ return threshold;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org