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 bi...@apache.org on 2020/04/14 19:57:49 UTC

[axis-axis2-java-core] branch AXIS2-5308 created (now ed56889)

This is an automated email from the ASF dual-hosted git repository.

billblough pushed a change to branch AXIS2-5308
in repository https://gitbox.apache.org/repos/asf/axis-axis2-java-core.git.


      at ed56889  Some initial code for AXIS2-5308.

This branch includes the following new commits:

     new 36ef147  Create branch to work on AXIS2-5308.
     new ed56889  Some initial code for AXIS2-5308.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[axis-axis2-java-core] 02/02: Some initial code for AXIS2-5308.

Posted by bi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

billblough pushed a commit to branch AXIS2-5308
in repository https://gitbox.apache.org/repos/asf/axis-axis2-java-core.git

commit ed568896db884ef98e5addaa64eaf80ccc3c5833
Author: Andreas Veithen <ve...@apache.org>
AuthorDate: Sun Jan 17 20:40:16 2016 +0000

    Some initial code for AXIS2-5308.
---
 .../axis2/jaxws/message/impl/MessageImpl.java      | 33 ++-------------
 .../axis2/jaxws/message/impl/XMLPartImpl.java      |  8 +++-
 .../axis2/jaxws/message/util/SAAJConverter.java    | 12 ++++--
 .../jaxws/message/util/impl/SAAJConverterImpl.java | 47 +++++++++++++++++-----
 .../axis2/jaxws/message/SAAJConverterTests.java    |  6 +--
 .../src/org/apache/axis2/builder/MTOMBuilder.java  |  3 --
 6 files changed, 60 insertions(+), 49 deletions(-)

diff --git a/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageImpl.java b/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageImpl.java
index 723c897..88b746c 100644
--- a/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageImpl.java
+++ b/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageImpl.java
@@ -48,7 +48,6 @@ import javax.activation.DataHandler;
 import javax.jws.soap.SOAPBinding.Style;
 import javax.xml.namespace.QName;
 import javax.xml.soap.AttachmentPart;
-import javax.xml.soap.MessageFactory;
 import javax.xml.soap.MimeHeaders;
 import javax.xml.soap.SOAPConstants;
 import javax.xml.soap.SOAPEnvelope;
@@ -57,8 +56,6 @@ import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 import javax.xml.ws.WebServiceException;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -188,36 +185,13 @@ public class MessageImpl implements Message {
             // Get OMElement from XMLPart.
             OMElement element = xmlPart.getAsOMElement();
             
+            SOAPMessage soapMessage = getSAAJConverter().toSAAJ((org.apache.axiom.soap.SOAPEnvelope)element, false);
+            
             // Get the namespace so that we can determine SOAP11 or SOAP12
             OMNamespace ns = element.getNamespace();
             
-            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
-            element.serialize(outStream);
-            
-            // In some cases (usually inbound) the builder will not be closed after
-            // serialization.  In that case it should be closed manually.
-            if (element.getBuilder() != null && !element.getBuilder().isCompleted()) {
-                element.close(false);
-            }
-            
-            byte[] bytes = outStream.toByteArray();
-            
-            if (log.isDebugEnabled()) {
-                String text = new String(bytes);
-                log.debug("  inputstream = " + text);
-            }
-            
-            // Create InputStream
-            ByteArrayInputStream inStream = new ByteArrayInputStream(bytes);
-            
-            // Create MessageFactory that supports the version of SOAP in the om element
-            MessageFactory mf = getSAAJConverter().createMessageFactory(ns.getNamespaceURI());
-            
-            // Create soapMessage object from Message Factory using the input
-            // stream created from OM.
-            
             // Get the MimeHeaders from the transportHeaders map
-            MimeHeaders defaultHeaders = new MimeHeaders();
+            MimeHeaders defaultHeaders = soapMessage.getMimeHeaders();
             if (transportHeaders != null) {
                 Iterator it = transportHeaders.entrySet().iterator();
                 while (it.hasNext()) {
@@ -266,7 +240,6 @@ public class MessageImpl implements Message {
             if (log.isDebugEnabled()) {
                 log.debug("  setContentType =" + ctValue);
             }
-            SOAPMessage soapMessage = mf.createMessage(defaultHeaders, inStream);
             
             // At this point the XMLPart is still an OMElement.  
             // We need to change it to the new SOAPEnvelope.
diff --git a/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/XMLPartImpl.java b/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/XMLPartImpl.java
index 331d2a3..dc1d6c9 100644
--- a/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/XMLPartImpl.java
+++ b/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/XMLPartImpl.java
@@ -21,6 +21,7 @@ package org.apache.axis2.jaxws.message.impl;
 
 import org.apache.axiom.attachments.Attachments;
 import org.apache.axiom.om.OMElement;
+import org.apache.axis2.jaxws.ExceptionFactory;
 import org.apache.axis2.jaxws.message.Message;
 import org.apache.axis2.jaxws.message.Protocol;
 import org.apache.axis2.jaxws.message.factory.SAAJConverterFactory;
@@ -28,6 +29,7 @@ import org.apache.axis2.jaxws.message.util.SAAJConverter;
 import org.apache.axis2.jaxws.registry.FactoryRegistry;
 
 import javax.xml.soap.SOAPEnvelope;
+import javax.xml.soap.SOAPException;
 import javax.xml.ws.WebServiceException;
 
 /**
@@ -92,7 +94,11 @@ public class XMLPartImpl extends XMLPartBase {
 
     @Override
     protected SOAPEnvelope _convertOM2SE(OMElement om) throws WebServiceException {
-        return getSAAJConverter().toSAAJ((org.apache.axiom.soap.SOAPEnvelope)om);
+        try {
+            return getSAAJConverter().toSAAJ((org.apache.axiom.soap.SOAPEnvelope)om, true).getSOAPPart().getEnvelope();
+        } catch (SOAPException ex) {
+            throw ExceptionFactory.makeWebServiceException(ex);
+        }
     }
 
     @Override
diff --git a/modules/jaxws/src/org/apache/axis2/jaxws/message/util/SAAJConverter.java b/modules/jaxws/src/org/apache/axis2/jaxws/message/util/SAAJConverter.java
index 3fe42e1..6bcf7ee 100644
--- a/modules/jaxws/src/org/apache/axis2/jaxws/message/util/SAAJConverter.java
+++ b/modules/jaxws/src/org/apache/axis2/jaxws/message/util/SAAJConverter.java
@@ -27,6 +27,7 @@ import javax.xml.soap.SOAPElement;
 import javax.xml.soap.SOAPEnvelope;
 import javax.xml.soap.SOAPException;
 import javax.xml.soap.SOAPFactory;
+import javax.xml.soap.SOAPMessage;
 import javax.xml.ws.WebServiceException;
 
 /** SAAJConverter Provides Conversion between SAAJ and OM Constructed via the SAAJConverterFactory */
@@ -35,13 +36,18 @@ public interface SAAJConverter {
 	public final static String OM_ATTRIBUTE_KEY = "ATTRIBUTE_TYPE_KEY";
 	
     /**
-     * Convert OM SOAPEnvleope to SAAJ SOAPEnvelope
+     * Convert OM {@link org.apache.axiom.soap.SOAPEnvelope} to SAAJ {@link SOAPMessage}.
      *
      * @param omElement
-     * @return SOAPEnvelope
+     * @param inlineMtom
+     *            Specifies how optimized base64 encoded content is handled. {@code true} indicates
+     *            that such content should be inlined (i.e. converted to text nodes). {@code false}
+     *            instructs the method to produce an XOP encoded message and add the optimized
+     *            content as attachment parts to the returned message.
+     * @return the converted message
      * @throws WebServiceException
      */
-    public SOAPEnvelope toSAAJ(org.apache.axiom.soap.SOAPEnvelope omElement)
+    public SOAPMessage toSAAJ(org.apache.axiom.soap.SOAPEnvelope omElement, boolean inlineMtom)
             throws WebServiceException;
 
     /**
diff --git a/modules/jaxws/src/org/apache/axis2/jaxws/message/util/impl/SAAJConverterImpl.java b/modules/jaxws/src/org/apache/axis2/jaxws/message/util/impl/SAAJConverterImpl.java
index 9d2a0bd..f1f63b7 100644
--- a/modules/jaxws/src/org/apache/axis2/jaxws/message/util/impl/SAAJConverterImpl.java
+++ b/modules/jaxws/src/org/apache/axis2/jaxws/message/util/impl/SAAJConverterImpl.java
@@ -28,18 +28,23 @@ import org.apache.axiom.soap.SOAP11Constants;
 import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axiom.soap.impl.builder.MTOMStAXSOAPModelBuilder;
 import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
+import org.apache.axiom.util.stax.xop.MimePartProvider;
+import org.apache.axiom.util.stax.xop.XOPEncodedStream;
+import org.apache.axiom.util.stax.xop.XOPUtils;
 import org.apache.axis2.jaxws.ExceptionFactory;
 import org.apache.axis2.jaxws.i18n.Messages;
 import org.apache.axis2.jaxws.message.util.SAAJConverter;
 import org.apache.axis2.jaxws.message.util.SOAPElementReader;
 import org.apache.axis2.jaxws.utility.JavaUtils;
 import org.apache.axis2.jaxws.utility.SAAJFactory;
+import org.apache.axis2.namespace.Constants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.w3c.dom.Node;
-import org.w3c.dom.Attr; 
+import org.w3c.dom.Attr;
 
 import javax.xml.namespace.QName;
+import javax.xml.soap.AttachmentPart;
 import javax.xml.soap.Detail;
 import javax.xml.soap.MessageFactory;
 import javax.xml.soap.Name;
@@ -62,6 +67,7 @@ import javax.xml.transform.stream.StreamResult;
 import javax.xml.ws.WebServiceException;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.util.Iterator;
 
 /** SAAJConverterImpl Provides an conversion methods between OM<->SAAJ */
@@ -77,21 +83,20 @@ public class SAAJConverterImpl implements SAAJConverter {
     /* (non-Javadoc)
       * @see org.apache.axis2.jaxws.message.util.SAAJConverter#toSAAJ(org.apache.axiom.soap.SOAPEnvelope)
       */
-    public SOAPEnvelope toSAAJ(org.apache.axiom.soap.SOAPEnvelope omEnvelope)
+    public SOAPMessage toSAAJ(org.apache.axiom.soap.SOAPEnvelope omEnvelope, boolean inlineMtom)
             throws WebServiceException {
     	if (log.isDebugEnabled()) {
-    	    log.debug("Converting OM SOAPEnvelope to SAAJ SOAPEnvelope");
+    	    log.debug("Converting OM SOAPEnvelope to SAAJ SOAPMessage");
     	    log.debug("The conversion occurs due to " + JavaUtils.stackToString());
     	}
     	
-        SOAPEnvelope soapEnvelope = null;
         try {
             // Build the default envelope
             OMNamespace ns = omEnvelope.getNamespace();
             MessageFactory mf = createMessageFactory(ns.getNamespaceURI());
             SOAPMessage sm = mf.createMessage();
             SOAPPart sp = sm.getSOAPPart();
-            soapEnvelope = sp.getEnvelope();
+            SOAPEnvelope soapEnvelope = sp.getEnvelope();
 
             // The getSOAPEnvelope() call creates a default SOAPEnvelope with a SOAPHeader and SOAPBody.
             // The SOAPHeader and SOAPBody are removed (they will be added back in if they are present in the
@@ -109,15 +114,23 @@ public class SAAJConverterImpl implements SAAJConverter {
             // The best way to walk the data is to get the XMLStreamReader and use this
             // to build the SOAPElements
             XMLStreamReader reader = omEnvelope.getXMLStreamReader();
+            MimePartProvider mimePartProvider;
+            if (inlineMtom) {
+                mimePartProvider = null;
+            } else {
+                XOPEncodedStream xop = XOPUtils.getXOPEncodedStream(reader);
+                mimePartProvider = xop.getMimePartProvider();
+                reader = xop.getReader();
+            }
 
             NameCreator nc = new NameCreator(soapEnvelope);
-            buildSOAPTree(nc, soapEnvelope, null, reader, false);
+            buildSOAPTree(nc, sm, soapEnvelope, null, reader, mimePartProvider, false);
+            return sm;
         } catch (WebServiceException e) {
             throw e;
         } catch (SOAPException e) {
             throw ExceptionFactory.makeWebServiceException(e);
         }
-        return soapEnvelope;
     }
 
     /* (non-Javadoc)
@@ -253,7 +266,7 @@ public class SAAJConverterImpl implements SAAJConverter {
                     .makeWebServiceException(Messages.getMessage("SAAJConverterErr1"));
         }
         NameCreator nc = new NameCreator((SOAPEnvelope)env);
-        return buildSOAPTree(nc, null, parent, reader, false);
+        return buildSOAPTree(nc, null, null, parent, reader, null, false);
     }
 
 
@@ -279,7 +292,7 @@ public class SAAJConverterImpl implements SAAJConverter {
             reader = omElement.getXMLStreamReaderWithoutCaching();
         }
         NameCreator nc = new NameCreator(sf);
-        return buildSOAPTree(nc, null, parent, reader, false);
+        return buildSOAPTree(nc, null, null, parent, reader, null, false);
     }
 
 
@@ -295,9 +308,11 @@ public class SAAJConverterImpl implements SAAJConverter {
      * @param quitAtBody - true if quit reading after the body START_ELEMENT
      */
     protected SOAPElement buildSOAPTree(NameCreator nc,
+                                        SOAPMessage message,
                                         SOAPElement root,
                                         SOAPElement parent,
                                         XMLStreamReader reader,
+                                        MimePartProvider mimePartProvider,
                                         boolean quitAtBody)
             throws WebServiceException {
         try {
@@ -316,6 +331,18 @@ public class SAAJConverterImpl implements SAAJConverter {
                                 root = parent;
                             }
                         }
+                        if (message != null && mimePartProvider != null
+                                && Constants.ELEM_XOP_INCLUDE.equals(reader.getLocalName())
+                                && Constants.URI_XOP_INCLUDE.equals(reader.getNamespaceURI())) {
+                            String href = reader.getAttributeValue(null, "href");
+                            if (href != null) {
+                                String contentId = XOPUtils.getContentIDFromURL(href);
+                                AttachmentPart part = message.createAttachmentPart();
+                                part.setContentId(contentId);
+                                part.setDataHandler(mimePartProvider.getDataHandler(contentId));
+                                message.addAttachmentPart(part);
+                            }
+                        }
                         if (quitAtBody && parent instanceof SOAPBody) {
                             return root;
                         }
@@ -388,6 +415,8 @@ public class SAAJConverterImpl implements SAAJConverter {
             throw ExceptionFactory.makeWebServiceException(e);
         } catch (SOAPException e) {
             throw ExceptionFactory.makeWebServiceException(e);
+        } catch (IOException e) {
+            throw ExceptionFactory.makeWebServiceException(e);
         }
         return root;
     }
diff --git a/modules/jaxws/test/org/apache/axis2/jaxws/message/SAAJConverterTests.java b/modules/jaxws/test/org/apache/axis2/jaxws/message/SAAJConverterTests.java
index bd499bc..0473782 100644
--- a/modules/jaxws/test/org/apache/axis2/jaxws/message/SAAJConverterTests.java
+++ b/modules/jaxws/test/org/apache/axis2/jaxws/message/SAAJConverterTests.java
@@ -107,7 +107,7 @@ public class SAAJConverterTests extends TestCase {
 		SAAJConverter converter = f.getSAAJConverter();
 		
 		// Step 2: Convert the OM SOAPEnvelope to an SAAJ SOAPEnvelope
-		SOAPEnvelope saajEnvelope = converter.toSAAJ(omEnvelope);
+		SOAPEnvelope saajEnvelope = converter.toSAAJ(omEnvelope, true).getSOAPPart().getEnvelope();
 		
 		// Step 2a: Simple assertion check to ensure correctness.
 		String name = saajEnvelope.getBody().getFirstChild().getLocalName();
@@ -121,7 +121,7 @@ public class SAAJConverterTests extends TestCase {
 		assertTrue("a".equals(name));
 		
 		// Step 4: Rinse and repeat
-		saajEnvelope = converter.toSAAJ(omEnvelope);
+		saajEnvelope = converter.toSAAJ(omEnvelope, true).getSOAPPart().getEnvelope();
 		name = saajEnvelope.getBody().getFirstChild().getLocalName();
 		assertTrue("a".equals(name));
 		omEnvelope = converter.toOM(saajEnvelope);
@@ -212,7 +212,7 @@ public class SAAJConverterTests extends TestCase {
 		SAAJConverter converter = f.getSAAJConverter();
 		
 		// Step 2: Convert the OM SOAPEnvelope to an SAAJ SOAPEnvelope
-		SOAPEnvelope saajEnvelope = converter.toSAAJ(omEnvelope);
+		SOAPEnvelope saajEnvelope = converter.toSAAJ(omEnvelope, true).getSOAPPart().getEnvelope();
 		
 		// Step 3: Verify attribute type is stored after conversion
 		Element testElement = (Element) saajEnvelope.getBody().getFirstChild().getFirstChild();
diff --git a/modules/kernel/src/org/apache/axis2/builder/MTOMBuilder.java b/modules/kernel/src/org/apache/axis2/builder/MTOMBuilder.java
index 4ddb79d..9a04afa 100644
--- a/modules/kernel/src/org/apache/axis2/builder/MTOMBuilder.java
+++ b/modules/kernel/src/org/apache/axis2/builder/MTOMBuilder.java
@@ -43,9 +43,6 @@ public class MTOMBuilder implements MIMEAwareBuilder {
     public OMElement processMIMEMessage(Attachments attachments, String contentType,
             MessageContext messageContext) throws AxisFault {
         try {
-            // TODO: this will be changed later (see AXIS2-5308)
-            messageContext.setAttachmentMap(attachments);
-            
             SOAPModelBuilder builder = OMXMLBuilderFactory.createSOAPModelBuilder(attachments);
             OMDocument document = builder.getDocument();
             String charsetEncoding = document.getCharsetEncoding();


[axis-axis2-java-core] 01/02: Create branch to work on AXIS2-5308.

Posted by bi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

billblough pushed a commit to branch AXIS2-5308
in repository https://gitbox.apache.org/repos/asf/axis-axis2-java-core.git

commit 36ef1470cd5e412108b15d0e474eacd1a7ad3879
Author: Andreas Veithen <ve...@apache.org>
AuthorDate: Sun Jan 17 20:38:54 2016 +0000

    Create branch to work on AXIS2-5308.