Author: asoldano
Date: Wed Dec  5 14:05:40 2012
New Revision: 1417426

URL: http://svn.apache.org/viewvc?rev=1417426&view=rev
Log:
[CXF-4677] Adding 'autoRewriteSoapAddressForAllServices' option for updating 
all services/ports soap:address values (except for path) in the doc returned to 
wsdl queries; this is basically an extension to the existing 
'autoRewriteSoapAddress'

Modified:
    
cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/WSDLGetUtils.java

Modified: 
cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/WSDLGetUtils.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/WSDLGetUtils.java?rev=1417426&r1=1417425&r2=1417426&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/WSDLGetUtils.java
 (original)
+++ 
cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/WSDLGetUtils.java
 Wed Dec  5 14:05:40 2012
@@ -72,6 +72,7 @@ import org.apache.cxf.wsdl11.ServiceWSDL
 public class WSDLGetUtils {
     
     public static final String AUTO_REWRITE_ADDRESS = "autoRewriteSoapAddress";
+    public static final String AUTO_REWRITE_ADDRESS_ALL = 
"autoRewriteSoapAddressForAllServices";
     public static final String PUBLISHED_ENDPOINT_URL = "publishedEndpointUrl";
     public static final String WSDL_CREATE_IMPORTS = 
"org.apache.cxf.wsdl.create.imports";
     
@@ -283,7 +284,6 @@ public class WSDLGetUtils {
                            Map<String, SchemaReference> smp,
                            Message message) {        
         List<Element> elementList = null;
-        Object rewriteSoapAddress = 
message.getContextualProperty(AUTO_REWRITE_ADDRESS);
         
         try {
             elementList = 
DOMUtils.findAllElementsByTagNameNS(doc.getDocumentElement(),
@@ -330,7 +330,18 @@ public class WSDLGetUtils {
                     base), e);
         }
 
-        if (rewriteSoapAddress == null || 
MessageUtils.isTrue(rewriteSoapAddress)) {
+        boolean rewriteAllSoapAddress = 
MessageUtils.isTrue(message.getContextualProperty(AUTO_REWRITE_ADDRESS_ALL));
+        if (rewriteAllSoapAddress) {
+            List<Element> portList = 
DOMUtils.findAllElementsByTagNameNS(doc.getDocumentElement(),
+                                                                         
"http://schemas.xmlsoap.org/wsdl/";,
+                                                                         
"port");
+            for (Element el : portList) {
+                rewriteAddressProtocolHostPort(base, el, 
"http://schemas.xmlsoap.org/wsdl/soap/";);
+                rewriteAddressProtocolHostPort(base, el, 
"http://schemas.xmlsoap.org/wsdl/soap12/";);
+            }
+        }
+        Object rewriteSoapAddress = 
message.getContextualProperty(AUTO_REWRITE_ADDRESS);
+        if (rewriteSoapAddress == null || 
MessageUtils.isTrue(rewriteSoapAddress) || rewriteAllSoapAddress) {
             List<Element> serviceList = 
DOMUtils.findAllElementsByTagNameNS(doc.getDocumentElement(),
                                                               
"http://schemas.xmlsoap.org/wsdl/";,
                                                               "service");
@@ -344,7 +355,6 @@ public class WSDLGetUtils {
                         String name = el.getAttribute("name");
                         if 
(name.equals(message.getExchange().getEndpoint().getEndpointInfo()
                                             .getName().getLocalPart())) {
-                            
                             rewriteAddress(base, el, 
"http://schemas.xmlsoap.org/wsdl/soap/";);
                             rewriteAddress(base, el, 
"http://schemas.xmlsoap.org/wsdl/soap12/";);
                         }
@@ -368,6 +378,25 @@ public class WSDLGetUtils {
         }
     }
 
+    protected void rewriteAddressProtocolHostPort(String base, Element el, 
String soapNS) {
+        List<Element> sadEls = DOMUtils.findAllElementsByTagNameNS(el,
+                                             soapNS,
+                                             "address");
+        for (Element soapAddress : sadEls) {
+            try {
+                String location = soapAddress.getAttribute("location").trim();
+                URL locUrl = new URL(location);
+                URL baseUrl = new URL(base);
+                StringBuilder sb = new StringBuilder(baseUrl.getProtocol());
+                
sb.append("://").append(baseUrl.getHost()).append(":").append(baseUrl.getPort())
+                    .append(locUrl.getPath());
+                soapAddress.setAttribute("location", sb.toString());
+            } catch (Exception e) {
+                //ignore
+            }
+        }
+    }
+
     protected String resolveWithCatalogs(OASISCatalogManager catalogs, String 
start, String base) {
         try {
             return new OASISCatalogManagerHelper().resolve(catalogs, start, 
base);


Reply via email to