This is an automated email from the ASF dual-hosted git repository. robertlazarski pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/axis-axis2-java-core.git
The following commit(s) were added to refs/heads/master by this push: new 9ac5ef7168 Also parse action from start-info and use axiom ContentType for parsing new e45019c1d3 Merge pull request #308 from manfredweiss/AXIS2-5986 9ac5ef7168 is described below commit 9ac5ef71688deb994d0b814c89c1623ef7eec886 Author: Manfred Weiss <manfred.we...@ith-icoserve.com> AuthorDate: Fri May 27 12:07:34 2022 +0200 Also parse action from start-info and use axiom ContentType for parsing --- .../org/apache/axis2/kernel/TransportUtils.java | 29 +++++++++++----------- .../apache/axis2/kernel/TransportUtilsTest.java | 27 ++++++++++++++++++++ 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/modules/kernel/src/org/apache/axis2/kernel/TransportUtils.java b/modules/kernel/src/org/apache/axis2/kernel/TransportUtils.java index ab9c80d5f5..91a5e94512 100644 --- a/modules/kernel/src/org/apache/axis2/kernel/TransportUtils.java +++ b/modules/kernel/src/org/apache/axis2/kernel/TransportUtils.java @@ -23,6 +23,7 @@ package org.apache.axis2.kernel; import org.apache.axiom.attachments.Attachments; import org.apache.axiom.attachments.CachedFileDataSource; import org.apache.axiom.attachments.lifecycle.LifecycleManager; +import org.apache.axiom.mime.ContentType; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMException; @@ -55,7 +56,9 @@ import javax.xml.stream.XMLStreamException; import java.io.File; import java.io.InputStream; import java.io.OutputStream; +import java.text.ParseException; import java.util.List; +import java.util.Optional; public class TransportUtils { @@ -409,23 +412,19 @@ public class TransportUtils { public static void processContentTypeForAction(String contentType, MessageContext msgContext) { //Check for action header and set it in as soapAction in MessageContext - int index = contentType.indexOf("action"); - if (index > -1) { - String transientString = contentType.substring(index, contentType.length()); - int equal = transientString.indexOf("="); - int firstSemiColon = transientString.indexOf(";"); - String soapAction; // This will contain "" in the string - if (firstSemiColon > -1) { - soapAction = transientString.substring(equal + 1, firstSemiColon); - } else { - soapAction = transientString.substring(equal + 1, transientString.length()); + try { + ContentType ct = new ContentType(contentType); + String startInfo = ct.getParameter("start-info"); + if (startInfo != null) { + Optional.ofNullable(new ContentType(startInfo).getParameter("action")) + .ifPresent(msgContext::setSoapAction); } - if ((soapAction != null) && soapAction.startsWith("\"") - && soapAction.endsWith("\"")) { - soapAction = soapAction - .substring(1, soapAction.length() - 1); + Optional.ofNullable(ct.getParameter("action")) + .ifPresent(msgContext::setSoapAction); + } catch (ParseException e) { + if (log.isDebugEnabled()) { + log.debug("Failed to parse Content-Type Header: " + e.getMessage(), e); } - msgContext.setSoapAction(soapAction); } } diff --git a/modules/kernel/test/org/apache/axis2/kernel/TransportUtilsTest.java b/modules/kernel/test/org/apache/axis2/kernel/TransportUtilsTest.java new file mode 100644 index 0000000000..f30c548680 --- /dev/null +++ b/modules/kernel/test/org/apache/axis2/kernel/TransportUtilsTest.java @@ -0,0 +1,27 @@ +package org.apache.axis2.kernel; + +import junit.framework.TestCase; +import org.apache.axis2.context.MessageContext; + +import java.util.UUID; + +public class TransportUtilsTest extends TestCase { + + private static final String ACTION_INSIDE_STARTINFO = "multipart/related; type=\"application/xop+xml\"; boundary=\"%s\"; start=\"<root.mess...@cxf.apache.org>\"; start-info=\"application/soap+xml; action=\\\"%s\\\"\""; + private static final String ACTION_OUTSIDE_STARTINFO = "Multipart/Related;boundary=MIME_boundary;type=\"application/xop+xml\";start=\"<mymessage....@example.org>\";start-info=\"application/soap+xml\"; action=\"%s\""; + + public void testProcessContentTypeForAction() { + + String soapAction = "http://www.example.com/ProcessData"; + String contentType; + MessageContext msgContext = new MessageContext(); + + contentType = String.format(ACTION_INSIDE_STARTINFO, UUID.randomUUID().toString(), soapAction); + TransportUtils.processContentTypeForAction(contentType, msgContext); + assertEquals(soapAction, msgContext.getSoapAction()); + + contentType = String.format(ACTION_OUTSIDE_STARTINFO, soapAction); + TransportUtils.processContentTypeForAction(contentType, msgContext); + assertEquals(soapAction, msgContext.getSoapAction()); + } +} \ No newline at end of file