You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by hi...@apache.org on 2010/05/04 08:28:25 UTC
svn commit: r940741 - in /synapse/trunk/java:
modules/core/src/main/java/org/apache/synapse/config/xml/
modules/core/src/test/java/org/apache/synapse/config/xml/ src/site/xdoc/
Author: hiranya
Date: Tue May 4 06:28:25 2010
New Revision: 940741
URL: http://svn.apache.org/viewvc?rev=940741&view=rev
Log:
Fixing SYNAPSE-345. The header mediator factory now does not create header mediators with namespace unqualified headers. Added some test cases to cover the scenario and updated the docs.
Added:
synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/HeaderMediatorConfigurationTest.java
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/HeaderMediatorFactory.java
synapse/trunk/java/src/site/xdoc/Synapse_Configuration_Language.xml
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/HeaderMediatorFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/HeaderMediatorFactory.java?rev=940741&r1=940740&r2=940741&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/HeaderMediatorFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/HeaderMediatorFactory.java Tue May 4 06:28:25 2010
@@ -23,6 +23,7 @@ import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMElement;
import org.apache.synapse.Mediator;
import org.apache.synapse.SynapseException;
+import org.apache.synapse.SynapseConstants;
import org.apache.synapse.mediators.transform.HeaderMediator;
import org.jaxen.JaxenException;
@@ -66,15 +67,25 @@ public class HeaderMediatorFactory exten
String prefix = nameAtt.substring(0, colonPos);
String namespaceURI = OMElementUtils.getNameSpaceWithPrefix(prefix, elem);
if (namespaceURI == null) {
- String msg = "Invalid namespace prefix '" + prefix + "' in name attribute";
- log.error(msg);
- throw new SynapseException(msg);
+ handleException("Invalid namespace prefix '" + prefix + "' in name attribute");
} else {
- headerMediator.setQName(new QName(namespaceURI, nameAtt.substring(colonPos+1), prefix));
+ headerMediator.setQName(new QName(namespaceURI, nameAtt.substring(colonPos+1),
+ prefix));
}
} else {
// no prefix
- headerMediator.setQName(new QName(nameAtt));
+ if (SynapseConstants.HEADER_TO.equals(nameAtt) ||
+ SynapseConstants.HEADER_FROM.equals(nameAtt) ||
+ SynapseConstants.HEADER_ACTION.equals(nameAtt) ||
+ SynapseConstants.HEADER_FAULT.equals(nameAtt) ||
+ SynapseConstants.HEADER_REPLY_TO.equals(nameAtt) ||
+ SynapseConstants.HEADER_RELATES_TO.equals(nameAtt)) {
+
+ headerMediator.setQName(new QName(nameAtt));
+ } else {
+ handleException("Invalid SOAP header: " + nameAtt + " specified at the " +
+ "header mediator. All SOAP headers must be namespace qualified.");
+ }
}
}
@@ -90,9 +101,8 @@ public class HeaderMediatorFactory exten
if (headerMediator.getAction() == HeaderMediator.ACTION_SET &&
value == null && exprn == null) {
- String msg = "A 'value' or 'expression' attribute is required for a [set] header mediator";
- log.error(msg);
- throw new SynapseException(msg);
+ handleException("A 'value' or 'expression' attribute is required for a [set] " +
+ "header mediator");
}
if (value != null && value.getAttributeValue() != null) {
@@ -102,9 +112,7 @@ public class HeaderMediatorFactory exten
try {
headerMediator.setExpression(SynapseXPathFactory.getSynapseXPath(elem, ATT_EXPRN));
} catch (JaxenException je) {
- String msg = "Invalid XPath expression : " + exprn.getAttributeValue();
- log.error(msg);
- throw new SynapseException(msg, je);
+ handleException("Invalid XPath expression : " + exprn.getAttributeValue());
}
}
Added: synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/HeaderMediatorConfigurationTest.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/HeaderMediatorConfigurationTest.java?rev=940741&view=auto
==============================================================================
--- synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/HeaderMediatorConfigurationTest.java (added)
+++ synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/HeaderMediatorConfigurationTest.java Tue May 4 06:28:25 2010
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2005-2008, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. 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.synapse.config.xml;
+
+import junit.framework.TestCase;
+import org.apache.axiom.om.util.AXIOMUtil;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.SynapseConstants;
+
+import javax.xml.stream.XMLStreamException;
+
+public class HeaderMediatorConfigurationTest extends TestCase {
+
+ public void testNamespaceUnqualifiedScenarioOne() {
+ try {
+ String inputXml = "<header xmlns=\"http://synapse.apache.org/ns/2010/04/configuration\" name=\"MyHeader\" value=\"MyValue\"/>";
+ HeaderMediatorFactory fac = new HeaderMediatorFactory();
+ fac.createMediator(AXIOMUtil.stringToOM(inputXml));
+ fail("HeaderMediator created with namespace unqualified SOAP header");
+ } catch (XMLStreamException e) {
+ fail("Error while parsing header mediator configuration");
+ } catch (SynapseException ignored) {
+
+ }
+
+ try {
+ String inputXml = "<header xmlns=\"http://synapse.apache.org/ns/2010/04/configuration\" name=\"MyHeader\" action=\"remove\"/>";
+ HeaderMediatorFactory fac = new HeaderMediatorFactory();
+ fac.createMediator(AXIOMUtil.stringToOM(inputXml));
+ fail("HeaderMediator created with namespace unqualified SOAP header");
+ } catch (XMLStreamException e) {
+ fail("Error while parsing header mediator configuration");
+ } catch (SynapseException ignored) {
+
+ }
+ }
+
+ public void testNamespaceUnqualifiedScenarioTwo() {
+ try {
+ String inputXml = "<header xmlns=\"http://synapse.apache.org/ns/2010/04/configuration\" name=\"m:MyHeader\" value=\"MyValue\"/>";
+ HeaderMediatorFactory fac = new HeaderMediatorFactory();
+ fac.createMediator(AXIOMUtil.stringToOM(inputXml));
+ fail("HeaderMediator created with namespace unqualified SOAP header");
+ } catch (XMLStreamException e) {
+ fail("Error while parsing header mediator configuration");
+ } catch (SynapseException ignored) {
+
+ }
+
+ try {
+ String inputXml = "<header xmlns=\"http://synapse.apache.org/ns/2010/04/configuration\" name=\"m:MyHeader\" action=\"remove\"/>";
+ HeaderMediatorFactory fac = new HeaderMediatorFactory();
+ fac.createMediator(AXIOMUtil.stringToOM(inputXml));
+ fail("HeaderMediator created with namespace unqualified SOAP header");
+ } catch (XMLStreamException e) {
+ fail("Error while parsing header mediator configuration");
+ } catch (SynapseException ignored) {
+
+ }
+ }
+
+ public void testPredefinedHeaders() {
+ predefinedHeaderTest(SynapseConstants.HEADER_TO);
+ predefinedHeaderTest(SynapseConstants.HEADER_ACTION);
+ predefinedHeaderTest(SynapseConstants.HEADER_FROM);
+ predefinedHeaderTest(SynapseConstants.HEADER_RELATES_TO);
+ predefinedHeaderTest(SynapseConstants.HEADER_REPLY_TO);
+ predefinedHeaderTest(SynapseConstants.HEADER_FAULT);
+ }
+
+ private void predefinedHeaderTest(String header) {
+ try {
+ String inputXml = "<header xmlns=\"http://synapse.apache.org/ns/2010/04/configuration\" name=\"" + header + "\" value=\"MyValue\"/>";
+ HeaderMediatorFactory fac = new HeaderMediatorFactory();
+ fac.createMediator(AXIOMUtil.stringToOM(inputXml));
+ } catch (XMLStreamException e) {
+ fail("Error while parsing header mediator configuration");
+ }
+
+ try {
+ String inputXml = "<header xmlns=\"http://synapse.apache.org/ns/2010/04/configuration\" name=\"" + header + "\" action=\"remove\"/>";
+ HeaderMediatorFactory fac = new HeaderMediatorFactory();
+ fac.createMediator(AXIOMUtil.stringToOM(inputXml));
+ } catch (XMLStreamException e) {
+ fail("Error while parsing header mediator configuration");
+ }
+ }
+
+ public void testNamespaceQualifiedScenario() {
+ try {
+ String inputXml = "<header xmlns=\"http://synapse.apache.org/ns/2010/04/configuration\" xmlns:m=\"http://synapse.apache.org\" name=\"m:MyHeader\" value=\"MyValue\"/>";
+ HeaderMediatorFactory fac = new HeaderMediatorFactory();
+ fac.createMediator(AXIOMUtil.stringToOM(inputXml));
+ } catch (XMLStreamException e) {
+ fail("Error while parsing header mediator configuration");
+ }
+
+ try {
+ String inputXml = "<header xmlns=\"http://synapse.apache.org/ns/2010/04/configuration\" xmlns:m=\"http://synapse.apache.org\" name=\"m:MyHeader\" action=\"remove\"/>";
+ HeaderMediatorFactory fac = new HeaderMediatorFactory();
+ fac.createMediator(AXIOMUtil.stringToOM(inputXml));
+ } catch (XMLStreamException e) {
+ fail("Error while parsing header mediator configuration");
+ }
+ }
+
+}
Modified: synapse/trunk/java/src/site/xdoc/Synapse_Configuration_Language.xml
URL: http://svn.apache.org/viewvc/synapse/trunk/java/src/site/xdoc/Synapse_Configuration_Language.xml?rev=940741&r1=940740&r2=940741&view=diff
==============================================================================
--- synapse/trunk/java/src/site/xdoc/Synapse_Configuration_Language.xml (original)
+++ synapse/trunk/java/src/site/xdoc/Synapse_Configuration_Language.xml Tue May 4 06:28:25 2010
@@ -1597,6 +1597,19 @@ where "sequence/dynamic_seq_1.xml" refer
action attribute specifies whether the mediator should set or remove the
header. If omitted, it defaults to a set-header.
</p>
+ <p>
+ The value of the 'name' attribute must be one of the following aliases or
+ a valid QName with a namespace prefix. (In the latter case the namespace prefix
+ must be mapped to a valid namespace URI using the standard xmlns attribute)
+ </p>
+ <ul>
+ <li>To</li>
+ <li>From</li>
+ <li>Action</li>
+ <li>FaultTo</li>
+ <li>ReplyTo</li>
+ <li>RelatesTo</li>
+ </ul>
<p/>
<h3>
Selection Mediators