Author: ay Date: Wed Mar 27 09:20:46 2013 New Revision: 1461464 URL: http://svn.apache.org/r1461464 Log: Merged revisions 1461461 via svn merge from https://svn.apache.org/repos/asf/cxf/branches/2.7.x-fixes
........ r1461461 | ay | 2013-03-27 10:13:14 +0100 (Wed, 27 Mar 2013) | 9 lines Merged revisions 1461456 via svn merge from https://svn.apache.org/repos/asf/cxf/trunk ........ r1461456 | ay | 2013-03-27 10:00:28 +0100 (Wed, 27 Mar 2013) | 1 line [CXF-4920] TransformationInInterceptor fails when XML contains same namespace with different prefixes ........ ........ Added: cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/resources/multiNS2.xml - copied unchanged from r1461461, cxf/branches/2.7.x-fixes/api/src/test/java/org/apache/cxf/staxutils/resources/multiNS2.xml cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/resources/multiNS2In1.xml - copied unchanged from r1461461, cxf/branches/2.7.x-fixes/api/src/test/java/org/apache/cxf/staxutils/resources/multiNS2In1.xml Modified: cxf/branches/2.6.x-fixes/ (props changed) cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/staxutils/transform/DelegatingNamespaceContext.java cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/staxutils/transform/InTransformReader.java cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/resources/complexReq1.xml cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/resources/complexReqIn3.xml cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/transform/DelegatingNamespaceContextTest.java cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/transform/InTransformReaderTest.java cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/transform/TransformTestUtils.java Propchange: cxf/branches/2.6.x-fixes/ ('svn:mergeinfo' removed) Propchange: cxf/branches/2.6.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/staxutils/transform/DelegatingNamespaceContext.java URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/staxutils/transform/DelegatingNamespaceContext.java?rev=1461464&r1=1461463&r2=1461464&view=diff ============================================================================== --- cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/staxutils/transform/DelegatingNamespaceContext.java (original) +++ cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/staxutils/transform/DelegatingNamespaceContext.java Wed Mar 27 09:20:46 2013 @@ -134,10 +134,11 @@ class DelegatingNamespaceContext impleme public Iterator<String> getPrefixes(String ns) { List<String> pl = new LinkedList<String>(); - for (Map<String, String> pfs : prefixes) { - String pf = pfs.get(ns); - if (pf != null && ns.equals(getNamespaceURI(pf))) { - pl.add(pf); + for (Map<String, String> nsp : namespaces) { + for (Map.Entry<String, String> nse : nsp.entrySet()) { + if (ns.equals(nse.getValue()) && ns.equals(getNamespaceURI(nse.getKey()))) { + pl.add(nse.getKey()); + } } } return pl.iterator(); Modified: cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/staxutils/transform/InTransformReader.java URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/staxutils/transform/InTransformReader.java?rev=1461464&r1=1461463&r2=1461464&view=diff ============================================================================== --- cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/staxutils/transform/InTransformReader.java (original) +++ cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/staxutils/transform/InTransformReader.java Wed Mar 27 09:20:46 2013 @@ -329,6 +329,17 @@ public class InTransformReader extends D } } + public String getNamespaceURI(String prefix) { + String ns = super.getNamespaceURI(prefix); + + String actualNs = nsMap.get(ns); + if (actualNs != null) { + return actualNs; + } else { + return ns != null ? ns : namespaceContext.getNamespaceURI(prefix); + } + } + public String getNamespaceURI() { if (currentEvent != null) { return currentEvent.getName().getNamespaceURI(); Modified: cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/resources/complexReq1.xml URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/resources/complexReq1.xml?rev=1461464&r1=1461463&r2=1461464&view=diff ============================================================================== --- cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/resources/complexReq1.xml (original) +++ cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/resources/complexReq1.xml Wed Mar 27 09:20:46 2013 @@ -32,7 +32,7 @@ <soap:Body> <TransformTestRequest xmlns="http://cxf.apache.org/transform/test" xmlns:ns2="http://cxf.apache.org/transform/header" - xmlns:ps1="http://cxf.apache.org/transform/header/element" + xmlns:ns3="http://cxf.apache.org/transform/header/element" xmlns:ns4="http://cxf.apache.org/transform/fault"/> </soap:Body> </soap:Envelope> Modified: cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/resources/complexReqIn3.xml URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/resources/complexReqIn3.xml?rev=1461464&r1=1461463&r2=1461464&view=diff ============================================================================== --- cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/resources/complexReqIn3.xml (original) +++ cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/resources/complexReqIn3.xml Wed Mar 27 09:20:46 2013 @@ -31,8 +31,8 @@ </soap:Header> <soap:Body> <TransformTestRequest xmlns="http://cxf.apache.org/transform/test" - xmlns:ns2="http://cxf.apache.org/transform/header" - xmlns:ns3="http://cxf.apache.org/transform/header/element" + xmlns:ns2="http://cxf.apache.org/transform/header/element" + xmlns:ns3="http://cxf.apache.org/transform/header" xmlns:ns4="http://cxf.apache.org/transform/fault"/> </soap:Body> </soap:Envelope> Modified: cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/transform/DelegatingNamespaceContextTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/transform/DelegatingNamespaceContextTest.java?rev=1461464&r1=1461463&r2=1461464&view=diff ============================================================================== --- cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/transform/DelegatingNamespaceContextTest.java (original) +++ cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/transform/DelegatingNamespaceContextTest.java Wed Mar 27 09:20:46 2013 @@ -92,6 +92,27 @@ public class DelegatingNamespaceContextT } } + @Test + public void testSomeAddsWithDuplicatedPrefixName() throws Exception { + DelegatingNamespaceContext dnc = getTestDelegatingNamespaceContext(); + + dnc.down(); // 1 + dnc.addPrefix("p00", "urn:foo0"); + dnc.addPrefix("p1", "urn:foo1"); + dnc.addPrefix("p2", "urn:foo2"); + assertEquals("urn:foo0", dnc.getNamespaceURI("p0")); + assertEquals("urn:foo0", dnc.getNamespaceURI("p00")); + assertEquals("urn:foo1", dnc.getNamespaceURI("p1")); + assertEquals("urn:foo2", dnc.getNamespaceURI("p2")); + assertTrue("p0".equals(dnc.getPrefix("urn:foo0")) || "p00".equals(dnc.getPrefix("urn:foo0"))); + assertEquals("p1", dnc.getPrefix("urn:foo1")); + assertEquals("p2", dnc.getPrefix("urn:foo2")); + verifyPrefixes(dnc.getPrefixes("urn:foo1"), new String[] {"p1"}); + verifyPrefixes(dnc.getPrefixes("urn:foo2"), new String[] {"p2"}); + verifyPrefixes(dnc.getPrefixes("urn:foo0"), new String[] {"p0", "p00"}); + } + + private DelegatingNamespaceContext getTestDelegatingNamespaceContext() { return new DelegatingNamespaceContext( new NamespaceContext() { Modified: cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/transform/InTransformReaderTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/transform/InTransformReaderTest.java?rev=1461464&r1=1461463&r2=1461464&view=diff ============================================================================== --- cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/transform/InTransformReaderTest.java (original) +++ cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/transform/InTransformReaderTest.java Wed Mar 27 09:20:46 2013 @@ -449,4 +449,15 @@ public class InTransformReaderTest exten transformElements, null, null, null, null); } + @Test + public void testReadNamespaceWithDuplicatePrefixes() throws Exception { + Map<String, String> transformElements = new HashMap<String, String>(); + transformElements.put("{http://bar.com/foo}*", + "{http://bar.com/foobar}*"); + TransformTestUtils.transformInStreamAndCompare("../resources/multiNS2In1.xml", + "../resources/multiNS2.xml", + transformElements, null, null, null, null); + + } + } Modified: cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/transform/TransformTestUtils.java URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/transform/TransformTestUtils.java?rev=1461464&r1=1461463&r2=1461464&view=diff ============================================================================== --- cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/transform/TransformTestUtils.java (original) +++ cxf/branches/2.6.x-fixes/api/src/test/java/org/apache/cxf/staxutils/transform/TransformTestUtils.java Wed Mar 27 09:20:46 2013 @@ -62,7 +62,6 @@ public final class TransformTestUtils { appendElements, dropElements, transformAttributes); - XMLStreamReader teacher = StaxUtils.createXMLStreamReader( TransformTestUtils.class.getResourceAsStream(outname)); @@ -139,15 +138,16 @@ public final class TransformTestUtils { break; } LOG.fine("Event: " + tevent + " ? " + revent); - Assert.assertEquals(tevent, revent); + Assert.assertEquals("parsing event", tevent, revent); switch (revent) { case XMLStreamConstants.START_ELEMENT: LOG.fine("Start Element " + teacher.getName() + " ? " + reader.getName()); - Assert.assertEquals(teacher.getName(), reader.getName()); + Assert.assertEquals("wrong start element.", teacher.getName(), reader.getName()); if (pfx) { // verify if the namespace prefix are preserved - Assert.assertEquals(teacher.getPrefix(), reader.getPrefix()); + Assert.assertEquals("wrong start element prefix.", teacher.getPrefix(), reader.getPrefix()); + verifyNamespaceDeclarations(teacher, reader); } verifyAttributes(teacher, reader); break; @@ -155,12 +155,12 @@ public final class TransformTestUtils { LOG.fine("End Element " + teacher.getName() + " ? " + reader.getName()); if (eec) { // perform end-element-check - Assert.assertEquals(teacher.getName(), reader.getName()); + Assert.assertEquals("wrong end element qname.", teacher.getName(), reader.getName()); } break; case XMLStreamConstants.CHARACTERS: LOG.fine("Characters " + teacher.getText() + " ? " + reader.getText()); - Assert.assertEquals(teacher.getText(), reader.getText()); + Assert.assertEquals("wrong characteres.", teacher.getText(), reader.getText()); break; default: } @@ -178,10 +178,20 @@ public final class TransformTestUtils { // compares each attribute for (int i = 0; i < acount; i++) { String avalue = attributesMap.remove(teacher.getAttributeName(i)); - Assert.assertEquals(avalue, teacher.getAttributeValue(i)); + Assert.assertEquals("attribute " + teacher.getAttributeName(i) + " has wrong value.", + teacher.getAttributeValue(i), avalue); } // attributes must be exhausted - Assert.assertTrue(attributesMap.isEmpty()); + Assert.assertTrue("attributes must be exhausted.", attributesMap.isEmpty()); + } + + private static void verifyNamespaceDeclarations(XMLStreamReader teacher, XMLStreamReader reader) { + int dcount = teacher.getNamespaceCount(); + for (int i = 0; i < dcount; i++) { + String p = teacher.getNamespacePrefix(i); + Assert.assertEquals("nsdecl prefix " + p + " is incorrectly bound.", + teacher.getNamespaceURI(i), reader.getNamespaceURI(p)); + } } /**
