You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2010/09/04 23:31:02 UTC

svn commit: r992684 - in /cxf/trunk/rt/frontend/jaxws/src: main/java/org/apache/cxf/jaxws/spi/ProviderImpl.java test/java/org/apache/cxf/jaxws/spi/ProviderImplTest.java

Author: sergeyb
Date: Sat Sep  4 21:31:02 2010
New Revision: 992684

URL: http://svn.apache.org/viewvc?rev=992684&view=rev
Log:
Dropping empty Metadata elements from EPRs

Modified:
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/ProviderImpl.java
    cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spi/ProviderImplTest.java

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/ProviderImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/ProviderImpl.java?rev=992684&r1=992683&r2=992684&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/ProviderImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/ProviderImpl.java Sat Sep  4 21:31:02 2010
@@ -212,83 +212,92 @@ public class ProviderImpl extends javax.
                 writer.writeEndElement();
             }
 
-            writer.writeStartElement(JAXWSAConstants.WSA_PREFIX, JAXWSAConstants.WSA_METADATA_NAME,
-                                     JAXWSAConstants.NS_WSA);
-            writer.writeNamespace(JAXWSAConstants.WSAW_PREFIX, JAXWSAConstants.NS_WSAW);
-            writer.writeNamespace(JAXWSAConstants.WSAM_PREFIX, JAXWSAConstants.NS_WSAM);
-            if (wsdlDocumentLocation != null) {
-                boolean includeLocationOnly = false;
-                org.apache.cxf.message.Message message = PhaseInterceptorChain.getCurrentMessage();
-                if (message != null) {
-                    includeLocationOnly = MessageUtils.isTrue(
-                        message.getContextualProperty("org.apache.cxf.wsa.metadata.wsdlLocationOnly"));
-                }
-                String attrubuteValue = serviceName != null && !includeLocationOnly 
-                        ? serviceName.getNamespaceURI() + " " + wsdlDocumentLocation
-                        : wsdlDocumentLocation;
-                writer.writeNamespace(JAXWSAConstants.WSDLI_PFX,
-                                      JAXWSAConstants.NS_WSDLI);
-                writer.writeAttribute(JAXWSAConstants.WSDLI_PFX,
-                                      JAXWSAConstants.NS_WSDLI,
-                                      JAXWSAConstants.WSDLI_WSDLLOCATION,
-                                      attrubuteValue);
-            }
-            if (interfaceName != null) {
-                writer.writeStartElement(JAXWSAConstants.WSAM_PREFIX,
-                                         JAXWSAConstants.WSAM_INTERFACE_NAME,
-                                         JAXWSAConstants.NS_WSAM);
-                String portTypePrefix = interfaceName.getPrefix();
-                if (portTypePrefix == null || portTypePrefix.equals("")) {
-                    portTypePrefix = "ns1";
-                }
-                writer.writeNamespace(portTypePrefix, interfaceName.getNamespaceURI());
-                writer.writeCharacters(portTypePrefix + ":" + interfaceName.getLocalPart());
-                writer.writeEndElement();
-            }
-
-            
-            String serviceNamePrefix = null;
-
-            if (serviceName != null) {
-                serviceNamePrefix = (serviceName.getPrefix() == null || serviceName.getPrefix().length() == 0)
-                    ? "ns2" : serviceName.getPrefix();
-
-                writer.writeStartElement(JAXWSAConstants.WSAM_PREFIX,
-                                         JAXWSAConstants.WSAM_SERVICENAME_NAME,
-                                         JAXWSAConstants.NS_WSAM);
-
-                if (portName != null) {
-                    writer.writeAttribute(JAXWSAConstants.WSAM_ENDPOINT_NAME, portName.getLocalPart());
-                }
-                writer.writeNamespace(serviceNamePrefix, serviceName.getNamespaceURI());
-                writer.writeCharacters(serviceNamePrefix + ":" + serviceName.getLocalPart());
-
-                writer.writeEndElement();
-            }
-
-            if (wsdlDocumentLocation != null) {
-
-                writer.writeStartElement(WSDLConstants.WSDL_PREFIX, WSDLConstants.QNAME_DEFINITIONS
-                    .getLocalPart(), WSDLConstants.NS_WSDL11);
-                writer.writeNamespace(WSDLConstants.WSDL_PREFIX, WSDLConstants.NS_WSDL11);
-                writer.writeStartElement(WSDLConstants.WSDL_PREFIX,
-                                         WSDLConstants.QNAME_IMPORT.getLocalPart(),
-                                         WSDLConstants.QNAME_IMPORT.getNamespaceURI());
+            if (wsdlDocumentLocation != null
+                || interfaceName != null
+                || serviceName != null
+                || metadata != null) {
+                
+                        
+                writer.writeStartElement(JAXWSAConstants.WSA_PREFIX, JAXWSAConstants.WSA_METADATA_NAME,
+                                         JAXWSAConstants.NS_WSA);
+                writer.writeNamespace(JAXWSAConstants.WSAW_PREFIX, JAXWSAConstants.NS_WSAW);
+                writer.writeNamespace(JAXWSAConstants.WSAM_PREFIX, JAXWSAConstants.NS_WSAM);
+                
+                if (wsdlDocumentLocation != null) {
+                    boolean includeLocationOnly = false;
+                    org.apache.cxf.message.Message message = PhaseInterceptorChain.getCurrentMessage();
+                    if (message != null) {
+                        includeLocationOnly = MessageUtils.isTrue(
+                            message.getContextualProperty("org.apache.cxf.wsa.metadata.wsdlLocationOnly"));
+                    }
+                    String attrubuteValue = serviceName != null && !includeLocationOnly 
+                            ? serviceName.getNamespaceURI() + " " + wsdlDocumentLocation
+                            : wsdlDocumentLocation;
+                    writer.writeNamespace(JAXWSAConstants.WSDLI_PFX,
+                                          JAXWSAConstants.NS_WSDLI);
+                    writer.writeAttribute(JAXWSAConstants.WSDLI_PFX,
+                                          JAXWSAConstants.NS_WSDLI,
+                                          JAXWSAConstants.WSDLI_WSDLLOCATION,
+                                          attrubuteValue);
+                }
+                if (interfaceName != null) {
+                    writer.writeStartElement(JAXWSAConstants.WSAM_PREFIX,
+                                             JAXWSAConstants.WSAM_INTERFACE_NAME,
+                                             JAXWSAConstants.NS_WSAM);
+                    String portTypePrefix = interfaceName.getPrefix();
+                    if (portTypePrefix == null || portTypePrefix.equals("")) {
+                        portTypePrefix = "ns1";
+                    }
+                    writer.writeNamespace(portTypePrefix, interfaceName.getNamespaceURI());
+                    writer.writeCharacters(portTypePrefix + ":" + interfaceName.getLocalPart());
+                    writer.writeEndElement();
+                }
+    
+                
+                String serviceNamePrefix = null;
+    
                 if (serviceName != null) {
-                    writer.writeAttribute(WSDLConstants.ATTR_NAMESPACE, serviceName.getNamespaceURI());
+                    serviceNamePrefix = 
+                        (serviceName.getPrefix() == null || serviceName.getPrefix().length() == 0)
+                        ? "ns2" : serviceName.getPrefix();
+    
+                    writer.writeStartElement(JAXWSAConstants.WSAM_PREFIX,
+                                             JAXWSAConstants.WSAM_SERVICENAME_NAME,
+                                             JAXWSAConstants.NS_WSAM);
+    
+                    if (portName != null) {
+                        writer.writeAttribute(JAXWSAConstants.WSAM_ENDPOINT_NAME, portName.getLocalPart());
+                    }
+                    writer.writeNamespace(serviceNamePrefix, serviceName.getNamespaceURI());
+                    writer.writeCharacters(serviceNamePrefix + ":" + serviceName.getLocalPart());
+    
+                    writer.writeEndElement();
+                }
+    
+                if (wsdlDocumentLocation != null) {
+    
+                    writer.writeStartElement(WSDLConstants.WSDL_PREFIX, WSDLConstants.QNAME_DEFINITIONS
+                        .getLocalPart(), WSDLConstants.NS_WSDL11);
+                    writer.writeNamespace(WSDLConstants.WSDL_PREFIX, WSDLConstants.NS_WSDL11);
+                    writer.writeStartElement(WSDLConstants.WSDL_PREFIX,
+                                             WSDLConstants.QNAME_IMPORT.getLocalPart(),
+                                             WSDLConstants.QNAME_IMPORT.getNamespaceURI());
+                    if (serviceName != null) {
+                        writer.writeAttribute(WSDLConstants.ATTR_NAMESPACE, serviceName.getNamespaceURI());
+                    }
+                    writer.writeAttribute(WSDLConstants.ATTR_LOCATION, wsdlDocumentLocation);
+                    writer.writeEndElement();
+                    writer.writeEndElement();
+                }
+    
+                if (metadata != null) {
+                    for (Element e : metadata) {
+                        StaxUtils.writeElement(e, writer, true);
+                    }
                 }
-                writer.writeAttribute(WSDLConstants.ATTR_LOCATION, wsdlDocumentLocation);
-                writer.writeEndElement();
+    
                 writer.writeEndElement();
             }
-
-            if (metadata != null) {
-                for (Element e : metadata) {
-                    StaxUtils.writeElement(e, writer, true);
-                }
-            }
-
-            writer.writeEndElement();
             
             if (elements != null) {
                 for (Element e : elements) {

Modified: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spi/ProviderImplTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spi/ProviderImplTest.java?rev=992684&r1=992683&r2=992684&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spi/ProviderImplTest.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spi/ProviderImplTest.java Sat Sep  4 21:31:02 2010
@@ -19,15 +19,24 @@
 
 package org.apache.cxf.jaxws.spi;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.transform.stream.StreamResult;
 import javax.xml.ws.wsaddressing.W3CEndpointReference;
 
+import org.w3c.dom.Element;
+
 import org.apache.cxf.BusFactory;
+
 import org.junit.After;
 
 
 public class ProviderImplTest extends org.junit.Assert {
+    
     @org.junit.Test
     public void testCreateW3CEpr() throws Exception {
         QName serviceName = new QName("http://cxf.apache.org", "ServiceName");
@@ -46,6 +55,72 @@ public class ProviderImplTest extends or
                    sw.toString().contains("wsdli:wsdlLocation=\"http://cxf.apache.org wsdlLoc\""));
     }
 
+    @org.junit.Test
+    public void testCreateW3CEprNoMetadata() throws Exception {
+        ProviderImpl impl = new ProviderImpl();
+        W3CEndpointReference w3Epr = impl.createW3CEndpointReference(
+                         "http://myaddress", null, null, null, null, null, null, null, null);
+        
+        java.io.StringWriter sw = new java.io.StringWriter();
+        StreamResult result = new StreamResult(sw);
+        w3Epr.writeTo(result);
+        assertTrue("Address is expected", sw.toString().contains("Address"));
+        assertFalse("empty Metadata element should be dropped", sw.toString().contains("Metadata"));
+    }
+    
+    @org.junit.Test
+    public void testCreateW3CEprMetadataInterfaceNameOnly() throws Exception {
+        QName serviceName = new QName("http://cxf.apache.org", "IntfName");
+        ProviderImpl impl = new ProviderImpl();
+        W3CEndpointReference w3Epr = impl.createW3CEndpointReference(
+                         "http://myaddress", serviceName, null, null, null, null, null, null, null);
+        
+        java.io.StringWriter sw = new java.io.StringWriter();
+        StreamResult result = new StreamResult(sw);
+        w3Epr.writeTo(result);
+        assertTrue("Address is expected", sw.toString().contains("Address"));
+        assertTrue("Metadata element expected", sw.toString().contains("Metadata"));
+        assertTrue("Interface element expected", sw.toString().contains("Interface"));
+        assertFalse("ServiceName is unexpected", sw.toString().contains("ServiceName"));
+    }
+    
+    @org.junit.Test
+    public void testCreateW3CEprMetadataServiceNameOnly() throws Exception {
+        QName serviceName = new QName("http://cxf.apache.org", "ServiceName");
+        ProviderImpl impl = new ProviderImpl();
+        W3CEndpointReference w3Epr = impl.createW3CEndpointReference(
+                         "http://myaddress", null, serviceName, null, null, null, null, null, null);
+        
+        java.io.StringWriter sw = new java.io.StringWriter();
+        StreamResult result = new StreamResult(sw);
+        w3Epr.writeTo(result);
+        assertTrue("Address is expected", sw.toString().contains("Address"));
+        assertTrue("Metadata element expected", sw.toString().contains("Metadata"));
+        assertFalse("Interface element unexpected", sw.toString().contains("Interface"));
+        assertTrue("ServiceName is expected", sw.toString().contains("ServiceName"));
+    }
+    
+    @org.junit.Test
+    public void testCreateW3CEprMetadataMetadataOnly() throws Exception {
+        ProviderImpl impl = new ProviderImpl();
+        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+        Element element = builder.newDocument().createElement("customMetadata");
+        List<Element> metadata = new ArrayList<Element>();
+        metadata.add(element);
+        W3CEndpointReference w3Epr = impl.createW3CEndpointReference(
+                         "http://myaddress", null, null, 
+                         metadata, null, null);
+        
+        java.io.StringWriter sw = new java.io.StringWriter();
+        StreamResult result = new StreamResult(sw);
+        w3Epr.writeTo(result);
+        assertTrue("Address is expected", sw.toString().contains("Address"));
+        assertTrue("Metadata element expected", sw.toString().contains("Metadata"));
+        assertTrue("Custom Metadata element expected", sw.toString().contains("customMetadata"));
+        assertFalse("Interface element unexpected", sw.toString().contains("Interface"));
+        assertFalse("ServiceName unexpected", sw.toString().contains("ServiceName"));
+    }
+    
     @After
     public void tearDown() {
         BusFactory.setDefaultBus(null);