Return-Path: X-Original-To: apmail-cxf-commits-archive@www.apache.org Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 43CB0D5EC for ; Thu, 14 Feb 2013 21:39:40 +0000 (UTC) Received: (qmail 87510 invoked by uid 500); 14 Feb 2013 21:39:40 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 87430 invoked by uid 500); 14 Feb 2013 21:39:40 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 87423 invoked by uid 99); 14 Feb 2013 21:39:40 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 14 Feb 2013 21:39:40 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 14 Feb 2013 21:39:36 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 8A8B823889B3; Thu, 14 Feb 2013 21:39:15 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1446345 - in /cxf/branches/2.6.x-fixes: api/src/main/java/org/apache/cxf/staxutils/ rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/ systests/jaxws/src/test... Date: Thu, 14 Feb 2013 21:39:15 -0000 To: commits@cxf.apache.org From: dkulp@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130214213915.8A8B823889B3@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: dkulp Date: Thu Feb 14 21:39:14 2013 New Revision: 1446345 URL: http://svn.apache.org/r1446345 Log: Merged revisions 1446341 via git cherry-pick from https://svn.apache.org/repos/asf/cxf/branches/2.7.x-fixes ........ r1446341 | dkulp | 2013-02-14 16:30:28 -0500 (Thu, 14 Feb 2013) | 10 lines Merged revisions 1446336 via git cherry-pick from https://svn.apache.org/repos/asf/cxf/trunk ........ r1446336 | dkulp | 2013-02-14 16:27:18 -0500 (Thu, 14 Feb 2013) | 2 lines [CXF-4818] Fix problems with adding soap:Header things to existing MessageMode Provider/Dispatch ........ ........ Added: cxf/branches/2.6.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/provider/CXF4818Test.java cxf/branches/2.6.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/provider/cxf4818data.txt Modified: cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/staxutils/OverlayW3CDOMStreamWriter.java cxf/branches/2.6.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJStreamWriter.java cxf/branches/2.6.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/MessageModeOutInterceptor.java Modified: cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/staxutils/OverlayW3CDOMStreamWriter.java URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/staxutils/OverlayW3CDOMStreamWriter.java?rev=1446345&r1=1446344&r2=1446345&view=diff ============================================================================== --- cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/staxutils/OverlayW3CDOMStreamWriter.java (original) +++ cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/staxutils/OverlayW3CDOMStreamWriter.java Thu Feb 14 21:39:14 2013 @@ -48,6 +48,9 @@ public class OverlayW3CDOMStreamWriter e public OverlayW3CDOMStreamWriter(Element e) { super(e); } + public OverlayW3CDOMStreamWriter(Document doc, Element e) { + super(doc, e); + } @Override public void writeEndElement() throws XMLStreamException { @@ -68,6 +71,7 @@ public class OverlayW3CDOMStreamWriter e if (nd2.getNodeType() == Node.ELEMENT_NODE && local.equals(nd2.getLocalName()) && StringUtils.isEmpty(nd2.getNamespaceURI())) { + adjustOverlaidNode(nd2, null); setChild((Element)nd2, false); return; } @@ -78,6 +82,9 @@ public class OverlayW3CDOMStreamWriter e super.writeStartElement(local); } + protected void adjustOverlaidNode(Node nd2, String pfx) { + } + public void writeStartElement(String namespace, String local) throws XMLStreamException { isOverlaidStack.add(0, isOverlaid); if (isOverlaid) { @@ -92,6 +99,7 @@ public class OverlayW3CDOMStreamWriter e if (nd2.getNodeType() == Node.ELEMENT_NODE && local.equals(nd2.getLocalName()) && namespace.equals(nd2.getNamespaceURI())) { + adjustOverlaidNode(nd2, ""); setChild((Element)nd2, false); return; } @@ -121,6 +129,7 @@ public class OverlayW3CDOMStreamWriter e if (nd2.getNodeType() == Node.ELEMENT_NODE && local.equals(nd2.getLocalName()) && namespace.equals(nd2.getNamespaceURI())) { + adjustOverlaidNode(nd2, prefix); setChild((Element)nd2, false); return; } Modified: cxf/branches/2.6.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJStreamWriter.java URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJStreamWriter.java?rev=1446345&r1=1446344&r2=1446345&view=diff ============================================================================== --- cxf/branches/2.6.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJStreamWriter.java (original) +++ cxf/branches/2.6.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJStreamWriter.java Thu Feb 14 21:39:14 2013 @@ -27,9 +27,9 @@ import org.w3c.dom.Element; import org.w3c.dom.Node; import org.apache.cxf.common.util.StringUtils; -import org.apache.cxf.staxutils.W3CDOMStreamWriter; +import org.apache.cxf.staxutils.OverlayW3CDOMStreamWriter; -public final class SAAJStreamWriter extends W3CDOMStreamWriter { +public final class SAAJStreamWriter extends OverlayW3CDOMStreamWriter { private final SOAPPart part; public SAAJStreamWriter(SOAPPart part) { @@ -56,6 +56,18 @@ public final class SAAJStreamWriter exte } return e; } + protected void adjustOverlaidNode(Node nd2, String pfx) { + String namespace = nd2.getNamespaceURI(); + try { + if (namespace != null + && namespace.equals(part.getEnvelope().getElementName().getURI())) { + adjustPrefix((SOAPElement)nd2, pfx); + } + } catch (SOAPException e) { + //ignore, fallback + } + super.adjustOverlaidNode(nd2, pfx); + } protected void createAndAddElement(String prefix, String local, String namespace) { try { @@ -69,6 +81,9 @@ public final class SAAJStreamWriter exte setChild(adjustPrefix(part.getEnvelope().getBody(), prefix), false); return; } else if ("Header".equals(local)) { + if (part.getEnvelope().getHeader() == null) { + part.getEnvelope().addHeader(); + } setChild(adjustPrefix(part.getEnvelope().getHeader(), prefix), false); return; } else if ("Fault".equals(local)) { @@ -109,4 +124,4 @@ public final class SAAJStreamWriter exte } super.createAndAddElement(prefix, local, namespace); } -} \ No newline at end of file +} Modified: cxf/branches/2.6.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/MessageModeOutInterceptor.java URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/MessageModeOutInterceptor.java?rev=1446345&r1=1446344&r2=1446345&view=diff ============================================================================== --- cxf/branches/2.6.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/MessageModeOutInterceptor.java (original) +++ cxf/branches/2.6.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/MessageModeOutInterceptor.java Thu Feb 14 21:39:14 2013 @@ -60,7 +60,6 @@ import org.apache.cxf.phase.AbstractPhas import org.apache.cxf.phase.Phase; import org.apache.cxf.service.model.BindingMessageInfo; import org.apache.cxf.service.model.BindingOperationInfo; -import org.apache.cxf.staxutils.OverlayW3CDOMStreamWriter; import org.apache.cxf.staxutils.StaxUtils; import org.apache.cxf.staxutils.W3CDOMStreamWriter; @@ -238,7 +237,7 @@ public class MessageModeOutInterceptor e XMLStreamWriter origWriter = message.getContent(XMLStreamWriter.class); message.put(SAAJOutInterceptor.ORIGINAL_XML_WRITER, origWriter); } - W3CDOMStreamWriter writer = new OverlayW3CDOMStreamWriter(soapMessage.getSOAPPart()); + W3CDOMStreamWriter writer = new SAAJStreamWriter(soapMessage.getSOAPPart()); // Replace stax writer with DomStreamWriter message.setContent(XMLStreamWriter.class, writer); message.setContent(SOAPMessage.class, soapMessage); @@ -293,4 +292,4 @@ public class MessageModeOutInterceptor e } } -} \ No newline at end of file +} Added: cxf/branches/2.6.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/provider/CXF4818Test.java URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/provider/CXF4818Test.java?rev=1446345&view=auto ============================================================================== --- cxf/branches/2.6.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/provider/CXF4818Test.java (added) +++ cxf/branches/2.6.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/provider/CXF4818Test.java Thu Feb 14 21:39:14 2013 @@ -0,0 +1,154 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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.cxf.systest.provider; + + +import java.io.InputStream; +import java.io.StringReader; + +import javax.annotation.Resource; +import javax.xml.soap.MessageFactory; +import javax.xml.soap.SOAPMessage; +import javax.xml.transform.stream.StreamSource; +import javax.xml.ws.Endpoint; +import javax.xml.ws.Provider; +import javax.xml.ws.ServiceMode; +import javax.xml.ws.WebServiceContext; +import javax.xml.ws.WebServiceException; +import javax.xml.ws.WebServiceProvider; +import javax.xml.ws.soap.Addressing; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.methods.InputStreamRequestEntity; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.cxf.staxutils.StaxUtils; +import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; +import org.apache.cxf.testutil.common.AbstractBusTestServerBase; +import org.apache.cxf.testutil.common.TestUtil; +import org.junit.BeforeClass; +import org.junit.Test; + +public class CXF4818Test extends AbstractBusClientServerTestBase { + + public static final String ADDRESS + = "http://localhost:" + TestUtil.getPortNumber(Server.class) + + "/AddressProvider/AddressProvider"; + + public static class Server extends AbstractBusTestServerBase { + + protected void run() { + Object implementor = new CXF4818Provider(); + Endpoint.publish(ADDRESS, implementor); + } + + public static void main(String[] args) { + try { + Server s = new Server(); + s.start(); + } catch (Exception ex) { + ex.printStackTrace(); + System.exit(-1); + } finally { + System.out.println("done!"); + } + } + } + + @BeforeClass + public static void startServers() throws Exception { + assertTrue("server did not launch correctly", launchServer(Server.class, true)); + } + + @Test + public void testCXF4818() throws Exception { + InputStream body = getClass().getResourceAsStream("cxf4818data.txt"); + HttpClient client = new HttpClient(); + PostMethod post = new PostMethod(ADDRESS); + post.setRequestEntity(new InputStreamRequestEntity(body, "text/xml")); + client.executeMethod(post); + + Document doc = StaxUtils.read(post.getResponseBodyAsStream()); + //System.out.println(StaxUtils.toString(doc)); + Element root = doc.getDocumentElement(); + Node child = root.getFirstChild(); + + boolean foundBody = false; + boolean foundHeader = false; + while (child != null) { + if ("Header".equals(child.getLocalName())) { + foundHeader = true; + assertFalse("Already found body", foundBody); + } else if ("Body".equals(child.getLocalName())) { + foundBody = true; + assertTrue("Did not find header before the body", foundHeader); + } + child = child.getNextSibling(); + } + assertTrue("Did not find the soap:Body element", foundBody); + assertTrue("Did not find the soap:Header element", foundHeader); + } + + + + @WebServiceProvider(serviceName = "GenericService", + targetNamespace = "http://cxf.apache.org/basictest", + portName = "GenericServicePosrt") + @ServiceMode(value = javax.xml.ws.Service.Mode.MESSAGE) + @Addressing + public static class CXF4818Provider implements Provider { + + @Resource + protected WebServiceContext context; + + public SOAPMessage invoke(SOAPMessage request) { + try { + String responseText = "" + + "" + + "" + + "Foo Response Body" + + "" + + "" + + "\n"; + + + // Create a SOAP request message + MessageFactory soapmsgfactory = MessageFactory.newInstance(); + SOAPMessage responseMessage = soapmsgfactory.createMessage(); + StreamSource responseMessageSrc = null; + + responseMessageSrc = new StreamSource(new StringReader(responseText)); + responseMessage.getSOAPPart().setContent(responseMessageSrc); + responseMessage.saveChanges(); + + return responseMessage; + + } catch (Exception e) { + throw new WebServiceException(e); + } + + } + + } +} Added: cxf/branches/2.6.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/provider/cxf4818data.txt URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/provider/cxf4818data.txt?rev=1446345&view=auto ============================================================================== --- cxf/branches/2.6.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/provider/cxf4818data.txt (added) +++ cxf/branches/2.6.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/provider/cxf4818data.txt Thu Feb 14 21:39:14 2013 @@ -0,0 +1,11 @@ + + + http://cxf.apache.org/output + urn:uuid:472f7066-56a3-4807-b1eb-ae1c786c081c + http://www.w3.org/2005/08/addressing/anonymous + urn:uuid:9e58b03c-3253-4bd8-8faa-855d15e217e0 + + + + + \ No newline at end of file