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 sc...@apache.org on 2008/05/13 20:10:55 UTC
svn commit: r655959 - in /webservices/axis2/trunk/java/modules/jaxws:
src/org/apache/axis2/datasource/jaxb/
src/org/apache/axis2/jaxws/message/attachments/
src/org/apache/axis2/jaxws/message/databinding/
src/org/apache/axis2/jaxws/message/databinding/i...
Author: scheu
Date: Tue May 13 11:10:55 2008
New Revision: 655959
URL: http://svn.apache.org/viewvc?rev=655959&view=rev
Log:
WSCOMMONS-344
Contributor:Rich Scheuerle
JAXWS Enablement of new OMXMLStreamReader xop:include processing
Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/datasource/jaxb/JAXBAttachmentUnmarshaller.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/datasource/jaxb/JAXBDSContext.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/attachments/JAXBAttachmentUnmarshaller.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBBlockContext.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/impl/JAXBBlockImpl.java
webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/message/MessagePersistanceTests.java
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/datasource/jaxb/JAXBAttachmentUnmarshaller.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/datasource/jaxb/JAXBAttachmentUnmarshaller.java?rev=655959&r1=655958&r2=655959&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/datasource/jaxb/JAXBAttachmentUnmarshaller.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/datasource/jaxb/JAXBAttachmentUnmarshaller.java Tue May 13 11:10:55 2008
@@ -20,6 +20,7 @@
package org.apache.axis2.datasource.jaxb;
import org.apache.axiom.om.OMException;
+import org.apache.axiom.om.OMXMLStreamReader;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.jaxws.i18n.Messages;
import org.apache.commons.logging.Log;
@@ -27,6 +28,8 @@
import javax.activation.DataHandler;
import javax.xml.bind.attachment.AttachmentUnmarshaller;
+import javax.xml.stream.XMLStreamReader;
+
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -42,8 +45,10 @@
private static final Log log = LogFactory.getLog(JAXBAttachmentUnmarshaller.class);
private MessageContext msgContext;
+ private XMLStreamReader xmlStreamReader;
- public JAXBAttachmentUnmarshaller(MessageContext msgContext) {
+ public JAXBAttachmentUnmarshaller(MessageContext msgContext,
+ XMLStreamReader xmlStreamReader) {
this.msgContext = msgContext;
}
@@ -52,6 +57,12 @@
// Any message that is received might contain MTOM.
// So always return true.
boolean value = true;
+
+ // Have the OM XMLStreamReader (OMStAXWrapper)
+ // sent xop:include events
+ if (xmlStreamReader instanceof OMXMLStreamReader) {
+ ((OMXMLStreamReader) xmlStreamReader).setInlineMTOM(true);
+ }
if (log.isDebugEnabled()){
log.debug("isXOPPackage returns " + value);
@@ -162,6 +173,14 @@
}
return dh;
}
+ if (xmlStreamReader instanceof OMXMLStreamReader) {
+ DataHandler dh =
+ ((OMXMLStreamReader) xmlStreamReader).getDataHandler(blobcid);
+ if (dh != null) {
+ JAXBAttachmentUnmarshallerMonitor.addBlobCID(blobcid);
+ }
+ return dh;
+ }
return null;
}
}
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/datasource/jaxb/JAXBDSContext.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/datasource/jaxb/JAXBDSContext.java?rev=655959&r1=655958&r2=655959&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/datasource/jaxb/JAXBDSContext.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/datasource/jaxb/JAXBDSContext.java Tue May 13 11:10:55 2008
@@ -226,8 +226,8 @@
* Create an Attachment unmarshaller for unmarshalling MTOM/SWA Attachments
* @return AttachmentUnmarshaller
*/
- protected AttachmentUnmarshaller createAttachmentUnmarshaller() {
- return new JAXBAttachmentUnmarshaller(getMessageContext());
+ protected AttachmentUnmarshaller createAttachmentUnmarshaller(XMLStreamReader reader) {
+ return new JAXBAttachmentUnmarshaller(getMessageContext(), reader);
}
/**
@@ -245,7 +245,7 @@
// Create an attachment unmarshaller
- AttachmentUnmarshaller aum = createAttachmentUnmarshaller();
+ AttachmentUnmarshaller aum = createAttachmentUnmarshaller(reader);
if (aum != null) {
if (DEBUG_ENABLED) {
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/attachments/JAXBAttachmentUnmarshaller.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/attachments/JAXBAttachmentUnmarshaller.java?rev=655959&r1=655958&r2=655959&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/attachments/JAXBAttachmentUnmarshaller.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/attachments/JAXBAttachmentUnmarshaller.java Tue May 13 11:10:55 2008
@@ -19,10 +19,12 @@
package org.apache.axis2.jaxws.message.attachments;
+import org.apache.axiom.om.OMXMLStreamReader;
import org.apache.axis2.datasource.jaxb.JAXBAttachmentUnmarshallerMonitor;
import org.apache.axis2.jaxws.message.Message;
import javax.activation.DataHandler;
+import javax.xml.stream.XMLStreamReader;
/**
* JAXBAttachmentUnmarshaller
@@ -33,9 +35,10 @@
public class JAXBAttachmentUnmarshaller extends org.apache.axis2.datasource.jaxb.JAXBAttachmentUnmarshaller {
private Message message;
+ private XMLStreamReader xmlStreamReader;
- public JAXBAttachmentUnmarshaller(Message message) {
- super(null);
+ public JAXBAttachmentUnmarshaller(Message message, XMLStreamReader xmlStreamReader) {
+ super(null, xmlStreamReader);
this.message = message;
}
@@ -48,7 +51,16 @@
JAXBAttachmentUnmarshallerMonitor.addBlobCID(cid);
}
return dh;
- }
+ }
+
+ if (xmlStreamReader instanceof OMXMLStreamReader) {
+ DataHandler dh =
+ ((OMXMLStreamReader) xmlStreamReader).getDataHandler(cid);
+ if (dh != null) {
+ JAXBAttachmentUnmarshallerMonitor.addBlobCID(cid);
+ }
+ return dh;
+ }
return null;
}
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBBlockContext.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBBlockContext.java?rev=655959&r1=655958&r2=655959&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBBlockContext.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBBlockContext.java Tue May 13 11:10:55 2008
@@ -29,6 +29,7 @@
import javax.xml.bind.JAXBContext;
import javax.xml.bind.attachment.AttachmentMarshaller;
import javax.xml.bind.attachment.AttachmentUnmarshaller;
+import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import java.util.TreeSet;
@@ -93,8 +94,8 @@
}
@Override
- protected AttachmentUnmarshaller createAttachmentUnmarshaller() {
- return new JAXBAttachmentUnmarshaller(getMessage());
+ protected AttachmentUnmarshaller createAttachmentUnmarshaller(XMLStreamReader reader) {
+ return new JAXBAttachmentUnmarshaller(getMessage(), reader);
}
public ClassLoader getClassLoader() {
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?rev=655959&r1=655958&r2=655959&view=diff
==============================================================================
--- 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 Tue May 13 11:10:55 2008
@@ -24,6 +24,7 @@
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMException;
import org.apache.axiom.om.OMSourcedElement;
+import org.apache.axiom.om.OMXMLStreamReader;
import org.apache.axiom.om.util.StAXUtils;
import org.apache.axis2.datasource.jaxb.JAXBDSContext;
import org.apache.axis2.datasource.jaxb.JAXBDataSource;
@@ -166,6 +167,19 @@
new ByteArrayInputStream(_getBytesFromBO(busObj, busContext, "utf-8"));
return StAXUtils.createXMLStreamReader(baos, "utf-8");
}
+
+ protected XMLStreamReader _getReaderFromOM(OMElement omElement) {
+ XMLStreamReader reader;
+ if (omElement.getBuilder() != null && !omElement.getBuilder().isCompleted()) {
+ reader = omElement.getXMLStreamReaderWithoutCaching();
+ } else {
+ reader = omElement.getXMLStreamReader();
+ }
+ if (reader instanceof OMXMLStreamReader) {
+ ((OMXMLStreamReader)reader).setInlineMTOM(false); // Optimize attachment usage
+ }
+ return reader;
+ }
protected void _outputFromBO(Object busObject, Object busContext, XMLStreamWriter writer)
throws XMLStreamException, WebServiceException {
Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/message/MessagePersistanceTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/message/MessagePersistanceTests.java?rev=655959&r1=655958&r2=655959&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/message/MessagePersistanceTests.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/message/MessagePersistanceTests.java Tue May 13 11:10:55 2008
@@ -20,10 +20,13 @@
package org.apache.axis2.jaxws.message;
import junit.framework.TestCase;
+
+import org.apache.axiom.om.OMAttachmentAccessor;
import org.apache.axiom.om.OMDataSource;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMOutputFormat;
import org.apache.axiom.om.OMSourcedElement;
+import org.apache.axiom.om.OMXMLStreamReader;
import org.apache.axiom.om.util.CopyUtils;
import org.apache.axiom.soap.SOAPBody;
import org.apache.axiom.soap.SOAPEnvelope;
@@ -47,6 +50,8 @@
import javax.imageio.ImageIO;
import javax.imageio.stream.FileImageInputStream;
import javax.imageio.stream.ImageInputStream;
+import javax.xml.namespace.QName;
+
import java.awt.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -66,6 +71,8 @@
DataSource stringDS, imageDS;
public String imageResourceDir = "test-resources" + File.separator + "image";
private final String sampleText = "Sample Text";
+ private final static QName XOP_INCLUDE =
+ new QName("http://www.w3.org/2004/08/xop/include", "Include");
protected void setUp() throws Exception {
super.setUp();
@@ -455,6 +462,46 @@
assertTrue(restoredText.indexOf(sampleText) > 0);
assertTrue(restoredText.indexOf("<soapenv:Body><sendImage xmlns=\"urn://mtom.test.org\"><input><imageData><xop:Include") > 0);
+ // Now try walking the saved envelope as an XMLInputStream.
+ // try to restore the message context again
+ // Now read in the persisted message
+ // Setup an input stream to the file
+ inStream = new FileInputStream(theFile);
+
+ // attach a stream capable of reading objects from the
+ // stream connected to the file
+ inObjStream = new ObjectInputStream(inStream);
+ System.out.println("restoring a message context again.....");
+
+ restoredMC =
+ (org.apache.axis2.context.MessageContext) inObjStream.readObject();
+ inObjStream.close();
+ inStream.close();
+ System.out.println("....restored message context.....");
+ env = restoredMC.getEnvelope();
+ env.build();
+
+ // Use tree as input to XMLStreamReader
+ OMXMLStreamReader xmlStreamReader = (OMXMLStreamReader) env.getXMLStreamReader();
+
+ // Issue XOP:Include events for optimized MTOM text nodes
+ xmlStreamReader.setInlineMTOM(false);
+
+ DataHandler dh = null;
+ while(xmlStreamReader.hasNext()) {
+ xmlStreamReader.next();
+ if (xmlStreamReader.isStartElement()) {
+ QName qName =xmlStreamReader.getName();
+ if (XOP_INCLUDE.equals(qName)) {
+ String hrefValue = xmlStreamReader.getAttributeValue("", "href");
+ if (hrefValue != null) {
+ dh =((OMAttachmentAccessor)xmlStreamReader).getDataHandler(hrefValue);
+ }
+ }
+ }
+ }
+
+ assertTrue(dh != null);
}
/**
@@ -549,7 +596,7 @@
assertTrue(!omse.isExpanded());
ds = omse.getDataSource();
assertTrue(ds instanceof JAXBDataSource);
-
+
// Simulate transport on the copied message
baos = new ByteArrayOutputStream();
outputFormat = new OMOutputFormat();
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org