You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by as...@apache.org on 2014/07/10 00:08:42 UTC

git commit: [CXF-5866] Adding XMLStreamReaderWrapper to WSDLManagerImpl and providing a XMLStreamReader wrapper that resolves system properties

Repository: cxf
Updated Branches:
  refs/heads/master 2c9464299 -> e0b7f3556


[CXF-5866] Adding XMLStreamReaderWrapper to WSDLManagerImpl and providing a XMLStreamReader wrapper that resolves system properties


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/e0b7f355
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/e0b7f355
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/e0b7f355

Branch: refs/heads/master
Commit: e0b7f35566bdcb2f364f85caa70c4b100433ed8a
Parents: 2c94642
Author: Alessio Soldano <as...@redhat.com>
Authored: Thu Jul 10 00:04:09 2014 +0200
Committer: Alessio Soldano <as...@redhat.com>
Committed: Thu Jul 10 00:08:08 2014 +0200

----------------------------------------------------------------------
 .../staxutils/DelegatingXMLStreamReader.java    | 264 +++++++++++++++++++
 .../staxutils/SysPropExpandingStreamReader.java |  90 +++++++
 .../cxf/staxutils/XMLStreamReaderWrapper.java   |  30 +++
 .../SysPropExpandingStreamReaderTest.java       |  63 +++++
 .../apache/cxf/staxutils/resources/sysprops.xml |  23 ++
 .../org/apache/cxf/wsdl11/WSDLManagerImpl.java  |  26 +-
 .../apache/cxf/wsdl11/WSDLManagerImplTest.java  |  28 ++
 .../org/apache/cxf/wsdl11/hello_world_wrap.wsdl | 161 +++++++++++
 8 files changed, 680 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java b/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java
new file mode 100644
index 0000000..56564a7
--- /dev/null
+++ b/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java
@@ -0,0 +1,264 @@
+/**
+ * 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.staxutils;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+/**
+ * A XMLStreamReader that delegates to a provided XMLStreamReader instance.
+ * 
+ */
+public class DelegatingXMLStreamReader implements XMLStreamReader {
+    
+    private final XMLStreamReader delegate;
+    
+    public DelegatingXMLStreamReader(XMLStreamReader reader) {
+        this.delegate = reader;
+    }
+    
+    @Override
+    public Object getProperty(String name) throws IllegalArgumentException {
+        return delegate.getProperty(name);
+    }
+
+    @Override
+    public int next() throws XMLStreamException {
+        return delegate.next();
+    }
+
+    @Override
+    public void require(int type, String namespaceURI, String localName) throws XMLStreamException {
+        delegate.require(type, namespaceURI, localName);
+    }
+
+    @Override
+    public String getElementText() throws XMLStreamException {
+        return delegate.getElementText();
+    }
+
+    @Override
+    public int nextTag() throws XMLStreamException {
+        return delegate.nextTag();
+    }
+
+    @Override
+    public boolean hasNext() throws XMLStreamException {
+        return delegate.hasNext();
+    }
+
+    @Override
+    public void close() throws XMLStreamException {
+        delegate.close();
+    }
+
+    @Override
+    public String getNamespaceURI(String prefix) {
+        return delegate.getNamespaceURI(prefix);
+    }
+
+    @Override
+    public boolean isStartElement() {
+        return delegate.isStartElement();
+    }
+
+    @Override
+    public boolean isEndElement() {
+        return delegate.isEndElement();
+    }
+
+    @Override
+    public boolean isCharacters() {
+        return delegate.isCharacters();
+    }
+
+    @Override
+    public boolean isWhiteSpace() {
+        return delegate.isWhiteSpace();
+    }
+
+    @Override
+    public String getAttributeValue(String namespaceURI, String localName) {
+        return delegate.getAttributeValue(namespaceURI, localName);
+    }
+
+    @Override
+    public int getAttributeCount() {
+        return delegate.getAttributeCount();
+    }
+
+    @Override
+    public QName getAttributeName(int index) {
+        return delegate.getAttributeName(index);
+    }
+
+    @Override
+    public String getAttributeNamespace(int index) {
+        return delegate.getAttributeNamespace(index);
+    }
+
+    @Override
+    public String getAttributeLocalName(int index) {
+        return delegate.getAttributeLocalName(index);
+    }
+
+    @Override
+    public String getAttributePrefix(int index) {
+        return delegate.getAttributePrefix(index);
+    }
+
+    @Override
+    public String getAttributeType(int index) {
+        return delegate.getAttributeType(index);
+    }
+
+    @Override
+    public String getAttributeValue(int index) {
+        return delegate.getAttributeValue(index);
+    }
+
+    @Override
+    public boolean isAttributeSpecified(int index) {
+        return delegate.isAttributeSpecified(index);
+    }
+
+    @Override
+    public int getNamespaceCount() {
+        return delegate.getNamespaceCount();
+    }
+
+    @Override
+    public String getNamespacePrefix(int index) {
+        return delegate.getNamespacePrefix(index);
+    }
+
+    @Override
+    public String getNamespaceURI(int index) {
+        return delegate.getNamespaceURI(index);
+    }
+
+    @Override
+    public NamespaceContext getNamespaceContext() {
+        return delegate.getNamespaceContext();
+    }
+
+    @Override
+    public int getEventType() {
+        return delegate.getEventType();
+    }
+
+    @Override
+    public String getText() {
+        return delegate.getText();
+    }
+
+    @Override
+    public char[] getTextCharacters() {
+        return delegate.getTextCharacters();
+    }
+
+    @Override
+    public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length)
+        throws XMLStreamException {
+        return delegate.getTextCharacters(sourceStart, target, targetStart, length);
+    }
+
+    @Override
+    public int getTextStart() {
+        return delegate.getTextStart();
+    }
+
+    @Override
+    public int getTextLength() {
+        return delegate.getTextLength();
+    }
+
+    @Override
+    public String getEncoding() {
+        return delegate.getEncoding();
+    }
+
+    @Override
+    public boolean hasText() {
+        return delegate.hasText();
+    }
+
+    @Override
+    public Location getLocation() {
+        return delegate.getLocation();
+    }
+
+    @Override
+    public QName getName() {
+        return delegate.getName();
+    }
+
+    @Override
+    public String getLocalName() {
+        return delegate.getLocalName();
+    }
+
+    @Override
+    public boolean hasName() {
+        return delegate.hasName();
+    }
+
+    @Override
+    public String getNamespaceURI() {
+        return delegate.getNamespaceURI();
+    }
+
+    @Override
+    public String getPrefix() {
+        return delegate.getPrefix();
+    }
+
+    @Override
+    public String getVersion() {
+        return delegate.getVersion();
+    }
+
+    @Override
+    public boolean isStandalone() {
+        return delegate.isStandalone();
+    }
+
+    @Override
+    public boolean standaloneSet() {
+        return delegate.standaloneSet();
+    }
+
+    @Override
+    public String getCharacterEncodingScheme() {
+        return delegate.getCharacterEncodingScheme();
+    }
+
+    @Override
+    public String getPITarget() {
+        return delegate.getPITarget();
+    }
+
+    @Override
+    public String getPIData() {
+        return delegate.getPIData();
+    }
+}

http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java b/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java
new file mode 100644
index 0000000..4987338
--- /dev/null
+++ b/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java
@@ -0,0 +1,90 @@
+/**
+ * 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.staxutils;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+/**
+ * A wrapper around XMLStreamReader that expands system property references in element and attribute values.
+ * 
+ */
+public class SysPropExpandingStreamReader extends DelegatingXMLStreamReader {
+
+    public static final String DELIMITER = "@";
+    
+    public SysPropExpandingStreamReader(XMLStreamReader reader) {
+        super(reader);
+    }
+
+    protected String expandSystemProperty(String value) {
+        if (!isEmpty(value)) {
+            final int startIndx = value.indexOf(DELIMITER);
+            if (startIndx > -1) {
+                final int endIndx = value.lastIndexOf(DELIMITER);
+                if (endIndx > -1 && startIndx + 1 < endIndx) {
+                    final String propName = value.substring(startIndx + 1, endIndx);
+                    if (!isEmpty(propName)) {
+                        final String envValue = System.getProperty(propName);
+                        if (!isEmpty(envValue)) {
+                            StringBuilder sb = new StringBuilder();
+                            sb.append(value.substring(0, startIndx));
+                            sb.append(envValue);
+                            sb.append(value.substring(endIndx + 1));
+                            value = sb.toString();
+                        }
+                    }
+                }
+            }
+        }
+        return value;
+    }
+
+    private static boolean isEmpty(String str) {
+        if (str != null) {
+            int len = str.length();
+            for (int x = 0; x < len; ++x) {
+                if (str.charAt(x) > ' ') {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public String getElementText() throws XMLStreamException {
+        return expandSystemProperty(super.getElementText());
+    }
+
+    @Override
+    public String getAttributeValue(String namespaceURI, String localName) {
+        return expandSystemProperty(super.getAttributeValue(namespaceURI, localName));
+    }
+
+    @Override
+    public String getAttributeValue(int index) {
+        return expandSystemProperty(super.getAttributeValue(index));
+    }
+
+    @Override
+    public String getText() {
+        return expandSystemProperty(super.getText());
+    }
+}

http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java b/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java
new file mode 100644
index 0000000..36c582f
--- /dev/null
+++ b/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java
@@ -0,0 +1,30 @@
+/**
+ * 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.staxutils;
+
+import javax.xml.stream.XMLStreamReader;
+
+/**
+ * Interface for XMLStreamReader wrappers
+ * 
+ */
+public interface XMLStreamReaderWrapper {
+    
+    public XMLStreamReader wrap(XMLStreamReader reader);
+}

http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java b/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java
new file mode 100644
index 0000000..59a188c
--- /dev/null
+++ b/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java
@@ -0,0 +1,63 @@
+/**
+ * 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.staxutils;
+
+import java.io.InputStream;
+
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.cxf.helpers.DOMUtils;
+import org.junit.Assert;
+import org.junit.Test;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class SysPropExpandingStreamReaderTest extends Assert {
+
+    @Test
+    public void testSystemPropertyExpansion() throws Exception {
+        final String barProp = System.setProperty("bar", "BAR-VALUE");
+        final String blahProp = System.setProperty("blah", "BLAH-VALUE");
+        try {
+            XMLStreamReader reader = new SysPropExpandingStreamReader(StaxUtils.createXMLStreamReader(getTestStream("./resources/sysprops.xml")));
+            Document doc = StaxUtils.read(reader);
+            Element abc = DOMUtils.getChildrenWithName(doc.getDocumentElement(), "http://foo/bar", "abc").iterator().next();
+            assertEquals("fooBAR-VALUEfoo", abc.getTextContent());
+            Element def = DOMUtils.getChildrenWithName(doc.getDocumentElement(), "http://foo/bar", "def").iterator().next();
+            assertEquals("ggggg", def.getTextContent());
+            assertEquals("BLAH-VALUE2", def.getAttribute("myAttr"));
+        } finally {
+            if (barProp != null) {
+                System.setProperty("bar", barProp);
+            } else {
+                System.clearProperty("bar");
+            }
+            if (blahProp != null) {
+                System.setProperty("blah", blahProp);
+            } else {
+                System.clearProperty("blah");
+            }
+        }
+    }
+
+    private InputStream getTestStream(String resource) {
+        return getClass().getResourceAsStream(resource);
+    }
+}

http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml b/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml
new file mode 100644
index 0000000..7a6ca81
--- /dev/null
+++ b/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<ns:ssss xmlns:ns="http://foo/bar">
+    <ns:abc>foo@bar@foo</ns:abc>
+    <ns:def myAttr="@blah@2">ggggg</ns:def>
+</ns:ssss>

http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
----------------------------------------------------------------------
diff --git a/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java b/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
index e4f368a..2f24f9f 100644
--- a/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
+++ b/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
@@ -49,6 +49,9 @@ import org.apache.cxf.common.util.CacheMap;
 import org.apache.cxf.configuration.ConfiguredBeanLocator;
 import org.apache.cxf.service.model.ServiceSchemaInfo;
 import org.apache.cxf.staxutils.StaxUtils;
+import org.apache.cxf.staxutils.DelegatingXMLStreamReader;
+import org.apache.cxf.staxutils.SysPropExpandingStreamReader;
+import org.apache.cxf.staxutils.XMLStreamReaderWrapper;
 import org.apache.cxf.wsdl.WSDLConstants;
 import org.apache.cxf.wsdl.WSDLExtensionLoader;
 import org.apache.cxf.wsdl.WSDLManager;
@@ -71,6 +74,8 @@ public class WSDLManagerImpl implements WSDLManager {
     private boolean disableSchemaCache;
     
     private Bus bus;
+    
+    private XMLStreamReaderWrapper xmlStreamReaderWrapper;
 
     public WSDLManagerImpl() throws BusException {
         this(null);
@@ -130,6 +135,9 @@ public class WSDLManagerImpl implements WSDLManager {
         }
     }
     
+    protected Bus getBus() {
+        return bus;
+    }
 
     /*
      * (non-Javadoc)
@@ -153,7 +161,11 @@ public class WSDLManagerImpl implements WSDLManager {
                 return definitionsMap.get(url);
             }
         }
-        return loadDefinition(url);
+        Definition def = loadDefinition(url);
+        synchronized (definitionsMap) {
+            definitionsMap.put(url, def);
+        }
+        return def;
     }
 
     public Definition getDefinition(Element el) throws WSDLException {
@@ -179,7 +191,7 @@ public class WSDLManagerImpl implements WSDLManager {
         }
     }
 
-    private Definition loadDefinition(String url) throws WSDLException {
+    protected Definition loadDefinition(String url) throws WSDLException {
         WSDLReader reader = factory.newWSDLReader();
         reader.setFeature("javax.wsdl.verbose", false);
         reader.setFeature("javax.wsdl.importDocuments", true);
@@ -195,6 +207,9 @@ public class WSDLManagerImpl implements WSDLManager {
             XMLStreamReader xmlReader = null;
             try {
                 xmlReader = StaxUtils.createXMLStreamReader(src);
+                if (xmlStreamReaderWrapper != null) {
+                    xmlReader = xmlStreamReaderWrapper.wrap(xmlReader);
+                }
                 doc = StaxUtils.read(xmlReader, true);
                 if (src.getSystemId() != null) {
                     try {
@@ -217,11 +232,12 @@ public class WSDLManagerImpl implements WSDLManager {
             def = reader.readWSDL(wsdlLocator);
         }
         
-        synchronized (definitionsMap) {
-            definitionsMap.put(url, def);
-        }
         return def;
     }
+    
+    public void setXMLStreamReaderWrapper(XMLStreamReaderWrapper wrapper) {
+        this.xmlStreamReaderWrapper = wrapper;
+    }
 
     private void addExtensionAttributeTypes(ExtensionRegistry extreg) {
         // register types that are not of wsdl4j's default attribute type QName

http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
----------------------------------------------------------------------
diff --git a/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java b/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
index e3e5b0a..bcafef1 100644
--- a/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
+++ b/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
@@ -29,7 +29,10 @@ import javax.wsdl.Port;
 import javax.wsdl.PortType;
 import javax.wsdl.Service;
 import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
 
+import org.apache.cxf.staxutils.SysPropExpandingStreamReader;
+import org.apache.cxf.staxutils.XMLStreamReaderWrapper;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -106,4 +109,29 @@ public class WSDLManagerImplTest extends Assert {
         java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream(); 
         builder.getWSDLFactory().newWSDLWriter().writeWSDL(def, bos);
     }
+    
+    @Test
+    public void testXMLStreamReaderWrapper() throws Exception {
+        final String testProp = System.setProperty("org.apache.cxf.test.wsdl11.port", "99999");
+        try {
+            String wsdlUrl = getClass().getResource("hello_world_wrap.wsdl").toString();
+            WSDLManagerImpl builder = new WSDLManagerImpl();
+            builder.setXMLStreamReaderWrapper(new XMLStreamReaderWrapper() {
+                @Override
+                public XMLStreamReader wrap(XMLStreamReader reader) {
+                    return new SysPropExpandingStreamReader(reader);
+                }
+            });
+            Definition def = builder.getDefinition(wsdlUrl);
+            java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream(); 
+            builder.getWSDLFactory().newWSDLWriter().writeWSDL(def, bos);
+            assertTrue(bos.toString().contains("http://localhost:99999/SoapContext/SoapPort"));
+        } finally {
+            if (testProp != null) {
+                System.setProperty("org.apache.cxf.test.wsdl11.port", testProp);
+            } else {
+                System.clearProperty("org.apache.cxf.test.wsdl11.port");
+            }
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl
----------------------------------------------------------------------
diff --git a/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl b/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl
new file mode 100644
index 0000000..d2f1d75
--- /dev/null
+++ b/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<wsdl:definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://apache.org/hello_world_soap_http" xmlns:x1="http://apache.org/hello_world_soap_http/types" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="HelloWorld" targetNamespace="http://apache.org/hello_world_soap_http">
+    <wsdl:types>
+        <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://apache.org/hello_world_soap_http/types" targetNamespace="http://apache.org/hello_world_soap_http/types" elementFormDefault="qualified">
+            <simpleType name="MyStringType">
+                <restriction base="string">
+                    <maxLength value="30"/>
+                </restriction>
+            </simpleType>
+            <element name="sayHi">
+                <complexType/>
+            </element>
+            <element name="sayHiResponse">
+                <complexType>
+                    <sequence>
+                        <element name="responseType" type="string"/>
+                    </sequence>
+                </complexType>
+            </element>
+            <element name="greetMe">
+                <complexType>
+                    <sequence>
+                        <element name="requestType" type="tns:MyStringType"/>
+                    </sequence>
+                </complexType>
+            </element>
+            <element name="greetMeResponse">
+                <complexType>
+                    <sequence>
+                        <element name="responseType" type="string"/>
+                    </sequence>
+                </complexType>
+            </element>
+            <element name="greetMeOneWay">
+                <complexType>
+                    <sequence>
+                        <element name="requestType" type="string"/>
+                    </sequence>
+                </complexType>
+            </element>
+            <element name="pingMe">
+                <complexType/>
+            </element>
+            <element name="pingMeResponse">
+                <complexType/>
+            </element>
+            <element name="faultDetail">
+                <complexType>
+                    <sequence>
+                        <element name="minor" type="short"/>
+                        <element name="major" type="short"/>
+                    </sequence>
+                </complexType>
+            </element>
+        </schema>
+    </wsdl:types>
+    <wsdl:message name="sayHiRequest">
+        <wsdl:part element="x1:sayHi" name="in"/>
+    </wsdl:message>
+    <wsdl:message name="sayHiResponse">
+        <wsdl:part element="x1:sayHiResponse" name="out"/>
+    </wsdl:message>
+    <wsdl:message name="greetMeRequest">
+        <wsdl:part element="x1:greetMe" name="in"/>
+    </wsdl:message>
+    <wsdl:message name="greetMeResponse">
+        <wsdl:part element="x1:greetMeResponse" name="out"/>
+    </wsdl:message>
+    <wsdl:message name="greetMeOneWayRequest">
+        <wsdl:part element="x1:greetMeOneWay" name="in"/>
+    </wsdl:message>
+    <wsdl:message name="pingMeRequest">
+        <wsdl:part name="in" element="x1:pingMe"/>
+    </wsdl:message>
+    <wsdl:message name="pingMeResponse">
+        <wsdl:part name="out" element="x1:pingMeResponse"/>
+    </wsdl:message>
+    <wsdl:message name="pingMeFault">
+        <wsdl:part name="faultDetail" element="x1:faultDetail"/>
+    </wsdl:message>
+    <wsdl:portType name="Greeter">
+        <wsdl:operation name="sayHi">
+            <wsdl:input message="tns:sayHiRequest" name="sayHiRequest"/>
+            <wsdl:output message="tns:sayHiResponse" name="sayHiResponse"/>
+        </wsdl:operation>
+        <wsdl:operation name="greetMe">
+            <wsdl:input message="tns:greetMeRequest" name="greetMeRequest"/>
+            <wsdl:output message="tns:greetMeResponse" name="greetMeResponse"/>
+        </wsdl:operation>
+        <wsdl:operation name="greetMeOneWay">
+            <wsdl:input message="tns:greetMeOneWayRequest" name="greetMeOneWayRequest"/>
+        </wsdl:operation>
+        <wsdl:operation name="pingMe">
+            <wsdl:input name="pingMeRequest" message="tns:pingMeRequest"/>
+            <wsdl:output name="pingMeResponse" message="tns:pingMeResponse"/>
+            <wsdl:fault name="pingMeFault" message="tns:pingMeFault"/>
+        </wsdl:operation>
+    </wsdl:portType>
+    <wsdl:binding name="Greeter_SOAPBinding" type="tns:Greeter">
+        <soap:binding xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+        <wsdl:operation name="sayHi">
+            <soap:operation xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="" style="document"/>
+            <wsdl:input name="sayHiRequest">
+                <soap:body xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
+            </wsdl:input>
+            <wsdl:output name="sayHiResponse">
+                <soap:body xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
+            </wsdl:output>
+        </wsdl:operation>
+        <wsdl:operation name="greetMe">
+            <soap:operation xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="" style="document"/>
+            <wsdl:input name="greetMeRequest">
+                <soap:body xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
+            </wsdl:input>
+            <wsdl:output name="greetMeResponse">
+                <soap:body xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
+            </wsdl:output>
+        </wsdl:operation>
+        <wsdl:operation name="greetMeOneWay">
+            <soap:operation xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="" style="document"/>
+            <wsdl:input name="greetMeOneWayRequest">
+                <soap:body xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
+            </wsdl:input>
+        </wsdl:operation>
+        <wsdl:operation name="pingMe">
+            <soap:operation xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" style="document"/>
+            <wsdl:input>
+                <soap:body xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
+            </wsdl:input>
+            <wsdl:output>
+                <soap:body xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
+            </wsdl:output>
+            <wsdl:fault name="pingMeFault">
+                <soap:fault xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="pingMeFault" use="literal"/>
+            </wsdl:fault>
+        </wsdl:operation>
+    </wsdl:binding>
+    <wsdl:service name="SOAPService">
+        <wsdl:port binding="tns:Greeter_SOAPBinding" name="SoapPort">
+            <soap:address xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" location="http://localhost:@org.apache.cxf.test.wsdl11.port@/SoapContext/SoapPort"/>
+        </wsdl:port>
+    </wsdl:service>
+</wsdl:definitions>


Re: git commit: [CXF-5866] Adding XMLStreamReaderWrapper to WSDLManagerImpl and providing a XMLStreamReader wrapper that resolves system properties

Posted by Alessio Soldano <as...@redhat.com>.
On 10/07/14 14:29, Daniel Kulp wrote:
> Alessio,
>
> Two thoughts:
>
> 1) There is a java.xml.stream.util.StreamReaderDelegate class available from StAX apis, is there really a need for another delegate in CXF?
didn't notice that, thanks

>
> 2) Would it make sense to change the SysPropExpandingStreamReader to a more generic “PropertiesExpandingStreamReader” that takes a Properties object as a constructor param (or better yet, a Map<String, Object> or similar).  That way someone could possibly configure it with some properties object specified in spring or similar.
sure, sounds reasonable. The sys prop is simply my specific scenario, 
but we can make this more generic.

I'll work on this tomorrow morning.

thanks
Alessio

P.S. will also re-check the pmd errors, I must have forgotten a 
'nochecks' when building for testing...

-- 
Alessio Soldano
Web Service Lead, JBoss


Re: git commit: [CXF-5866] Adding XMLStreamReaderWrapper to WSDLManagerImpl and providing a XMLStreamReader wrapper that resolves system properties

Posted by Aki Yoshida <el...@gmail.com>.
just to note that there are a few PMD errors with this commit.

currently core is failing with PMD errors.

2014-07-10 16:51 GMT+02:00 Jason Pell <ja...@pellcorp.com>:
> That definitely sounds good. I am so sick of system properties for
> configuration.
> On 10/07/2014 10:30 PM, "Daniel Kulp" <dk...@apache.org> wrote:
>
>>
>> Alessio,
>>
>> Two thoughts:
>>
>> 1) There is a java.xml.stream.util.StreamReaderDelegate class available
>> from StAX apis, is there really a need for another delegate in CXF?
>>
>> 2) Would it make sense to change the SysPropExpandingStreamReader to a
>> more generic “PropertiesExpandingStreamReader” that takes a Properties
>> object as a constructor param (or better yet, a Map<String, Object> or
>> similar).  That way someone could possibly configure it with some
>> properties object specified in spring or similar.
>>
>>
>> Dan
>>
>>
>> On Jul 9, 2014, at 6:08 PM, asoldano@apache.org wrote:
>>
>> > Repository: cxf
>> > Updated Branches:
>> >  refs/heads/master 2c9464299 -> e0b7f3556
>> >
>> >
>> > [CXF-5866] Adding XMLStreamReaderWrapper to WSDLManagerImpl and
>> providing a XMLStreamReader wrapper that resolves system properties
>> >
>> >
>> > Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
>> > Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/e0b7f355
>> > Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/e0b7f355
>> > Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/e0b7f355
>> >
>> > Branch: refs/heads/master
>> > Commit: e0b7f35566bdcb2f364f85caa70c4b100433ed8a
>> > Parents: 2c94642
>> > Author: Alessio Soldano <as...@redhat.com>
>> > Authored: Thu Jul 10 00:04:09 2014 +0200
>> > Committer: Alessio Soldano <as...@redhat.com>
>> > Committed: Thu Jul 10 00:08:08 2014 +0200
>> >
>> > ----------------------------------------------------------------------
>> > .../staxutils/DelegatingXMLStreamReader.java    | 264 +++++++++++++++++++
>> > .../staxutils/SysPropExpandingStreamReader.java |  90 +++++++
>> > .../cxf/staxutils/XMLStreamReaderWrapper.java   |  30 +++
>> > .../SysPropExpandingStreamReaderTest.java       |  63 +++++
>> > .../apache/cxf/staxutils/resources/sysprops.xml |  23 ++
>> > .../org/apache/cxf/wsdl11/WSDLManagerImpl.java  |  26 +-
>> > .../apache/cxf/wsdl11/WSDLManagerImplTest.java  |  28 ++
>> > .../org/apache/cxf/wsdl11/hello_world_wrap.wsdl | 161 +++++++++++
>> > 8 files changed, 680 insertions(+), 5 deletions(-)
>> > ----------------------------------------------------------------------
>> >
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> a/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java
>> b/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java
>> > new file mode 100644
>> > index 0000000..56564a7
>> > --- /dev/null
>> > +++
>> b/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java
>> > @@ -0,0 +1,264 @@
>> > +/**
>> > + * 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.staxutils;
>> > +
>> > +import javax.xml.namespace.NamespaceContext;
>> > +import javax.xml.namespace.QName;
>> > +import javax.xml.stream.Location;
>> > +import javax.xml.stream.XMLStreamException;
>> > +import javax.xml.stream.XMLStreamReader;
>> > +
>> > +/**
>> > + * A XMLStreamReader that delegates to a provided XMLStreamReader
>> instance.
>> > + *
>> > + */
>> > +public class DelegatingXMLStreamReader implements XMLStreamReader {
>> > +
>> > +    private final XMLStreamReader delegate;
>> > +
>> > +    public DelegatingXMLStreamReader(XMLStreamReader reader) {
>> > +        this.delegate = reader;
>> > +    }
>> > +
>> > +    @Override
>> > +    public Object getProperty(String name) throws
>> IllegalArgumentException {
>> > +        return delegate.getProperty(name);
>> > +    }
>> > +
>> > +    @Override
>> > +    public int next() throws XMLStreamException {
>> > +        return delegate.next();
>> > +    }
>> > +
>> > +    @Override
>> > +    public void require(int type, String namespaceURI, String
>> localName) throws XMLStreamException {
>> > +        delegate.require(type, namespaceURI, localName);
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getElementText() throws XMLStreamException {
>> > +        return delegate.getElementText();
>> > +    }
>> > +
>> > +    @Override
>> > +    public int nextTag() throws XMLStreamException {
>> > +        return delegate.nextTag();
>> > +    }
>> > +
>> > +    @Override
>> > +    public boolean hasNext() throws XMLStreamException {
>> > +        return delegate.hasNext();
>> > +    }
>> > +
>> > +    @Override
>> > +    public void close() throws XMLStreamException {
>> > +        delegate.close();
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getNamespaceURI(String prefix) {
>> > +        return delegate.getNamespaceURI(prefix);
>> > +    }
>> > +
>> > +    @Override
>> > +    public boolean isStartElement() {
>> > +        return delegate.isStartElement();
>> > +    }
>> > +
>> > +    @Override
>> > +    public boolean isEndElement() {
>> > +        return delegate.isEndElement();
>> > +    }
>> > +
>> > +    @Override
>> > +    public boolean isCharacters() {
>> > +        return delegate.isCharacters();
>> > +    }
>> > +
>> > +    @Override
>> > +    public boolean isWhiteSpace() {
>> > +        return delegate.isWhiteSpace();
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getAttributeValue(String namespaceURI, String
>> localName) {
>> > +        return delegate.getAttributeValue(namespaceURI, localName);
>> > +    }
>> > +
>> > +    @Override
>> > +    public int getAttributeCount() {
>> > +        return delegate.getAttributeCount();
>> > +    }
>> > +
>> > +    @Override
>> > +    public QName getAttributeName(int index) {
>> > +        return delegate.getAttributeName(index);
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getAttributeNamespace(int index) {
>> > +        return delegate.getAttributeNamespace(index);
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getAttributeLocalName(int index) {
>> > +        return delegate.getAttributeLocalName(index);
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getAttributePrefix(int index) {
>> > +        return delegate.getAttributePrefix(index);
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getAttributeType(int index) {
>> > +        return delegate.getAttributeType(index);
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getAttributeValue(int index) {
>> > +        return delegate.getAttributeValue(index);
>> > +    }
>> > +
>> > +    @Override
>> > +    public boolean isAttributeSpecified(int index) {
>> > +        return delegate.isAttributeSpecified(index);
>> > +    }
>> > +
>> > +    @Override
>> > +    public int getNamespaceCount() {
>> > +        return delegate.getNamespaceCount();
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getNamespacePrefix(int index) {
>> > +        return delegate.getNamespacePrefix(index);
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getNamespaceURI(int index) {
>> > +        return delegate.getNamespaceURI(index);
>> > +    }
>> > +
>> > +    @Override
>> > +    public NamespaceContext getNamespaceContext() {
>> > +        return delegate.getNamespaceContext();
>> > +    }
>> > +
>> > +    @Override
>> > +    public int getEventType() {
>> > +        return delegate.getEventType();
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getText() {
>> > +        return delegate.getText();
>> > +    }
>> > +
>> > +    @Override
>> > +    public char[] getTextCharacters() {
>> > +        return delegate.getTextCharacters();
>> > +    }
>> > +
>> > +    @Override
>> > +    public int getTextCharacters(int sourceStart, char[] target, int
>> targetStart, int length)
>> > +        throws XMLStreamException {
>> > +        return delegate.getTextCharacters(sourceStart, target,
>> targetStart, length);
>> > +    }
>> > +
>> > +    @Override
>> > +    public int getTextStart() {
>> > +        return delegate.getTextStart();
>> > +    }
>> > +
>> > +    @Override
>> > +    public int getTextLength() {
>> > +        return delegate.getTextLength();
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getEncoding() {
>> > +        return delegate.getEncoding();
>> > +    }
>> > +
>> > +    @Override
>> > +    public boolean hasText() {
>> > +        return delegate.hasText();
>> > +    }
>> > +
>> > +    @Override
>> > +    public Location getLocation() {
>> > +        return delegate.getLocation();
>> > +    }
>> > +
>> > +    @Override
>> > +    public QName getName() {
>> > +        return delegate.getName();
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getLocalName() {
>> > +        return delegate.getLocalName();
>> > +    }
>> > +
>> > +    @Override
>> > +    public boolean hasName() {
>> > +        return delegate.hasName();
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getNamespaceURI() {
>> > +        return delegate.getNamespaceURI();
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getPrefix() {
>> > +        return delegate.getPrefix();
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getVersion() {
>> > +        return delegate.getVersion();
>> > +    }
>> > +
>> > +    @Override
>> > +    public boolean isStandalone() {
>> > +        return delegate.isStandalone();
>> > +    }
>> > +
>> > +    @Override
>> > +    public boolean standaloneSet() {
>> > +        return delegate.standaloneSet();
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getCharacterEncodingScheme() {
>> > +        return delegate.getCharacterEncodingScheme();
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getPITarget() {
>> > +        return delegate.getPITarget();
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getPIData() {
>> > +        return delegate.getPIData();
>> > +    }
>> > +}
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> a/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java
>> b/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java
>> > new file mode 100644
>> > index 0000000..4987338
>> > --- /dev/null
>> > +++
>> b/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java
>> > @@ -0,0 +1,90 @@
>> > +/**
>> > + * 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.staxutils;
>> > +
>> > +import javax.xml.stream.XMLStreamException;
>> > +import javax.xml.stream.XMLStreamReader;
>> > +
>> > +/**
>> > + * A wrapper around XMLStreamReader that expands system property
>> references in element and attribute values.
>> > + *
>> > + */
>> > +public class SysPropExpandingStreamReader extends
>> DelegatingXMLStreamReader {
>> > +
>> > +    public static final String DELIMITER = "@";
>> > +
>> > +    public SysPropExpandingStreamReader(XMLStreamReader reader) {
>> > +        super(reader);
>> > +    }
>> > +
>> > +    protected String expandSystemProperty(String value) {
>> > +        if (!isEmpty(value)) {
>> > +            final int startIndx = value.indexOf(DELIMITER);
>> > +            if (startIndx > -1) {
>> > +                final int endIndx = value.lastIndexOf(DELIMITER);
>> > +                if (endIndx > -1 && startIndx + 1 < endIndx) {
>> > +                    final String propName = value.substring(startIndx +
>> 1, endIndx);
>> > +                    if (!isEmpty(propName)) {
>> > +                        final String envValue =
>> System.getProperty(propName);
>> > +                        if (!isEmpty(envValue)) {
>> > +                            StringBuilder sb = new StringBuilder();
>> > +                            sb.append(value.substring(0, startIndx));
>> > +                            sb.append(envValue);
>> > +                            sb.append(value.substring(endIndx + 1));
>> > +                            value = sb.toString();
>> > +                        }
>> > +                    }
>> > +                }
>> > +            }
>> > +        }
>> > +        return value;
>> > +    }
>> > +
>> > +    private static boolean isEmpty(String str) {
>> > +        if (str != null) {
>> > +            int len = str.length();
>> > +            for (int x = 0; x < len; ++x) {
>> > +                if (str.charAt(x) > ' ') {
>> > +                    return false;
>> > +                }
>> > +            }
>> > +        }
>> > +        return true;
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getElementText() throws XMLStreamException {
>> > +        return expandSystemProperty(super.getElementText());
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getAttributeValue(String namespaceURI, String
>> localName) {
>> > +        return
>> expandSystemProperty(super.getAttributeValue(namespaceURI, localName));
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getAttributeValue(int index) {
>> > +        return expandSystemProperty(super.getAttributeValue(index));
>> > +    }
>> > +
>> > +    @Override
>> > +    public String getText() {
>> > +        return expandSystemProperty(super.getText());
>> > +    }
>> > +}
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> a/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java
>> b/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java
>> > new file mode 100644
>> > index 0000000..36c582f
>> > --- /dev/null
>> > +++
>> b/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java
>> > @@ -0,0 +1,30 @@
>> > +/**
>> > + * 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.staxutils;
>> > +
>> > +import javax.xml.stream.XMLStreamReader;
>> > +
>> > +/**
>> > + * Interface for XMLStreamReader wrappers
>> > + *
>> > + */
>> > +public interface XMLStreamReaderWrapper {
>> > +
>> > +    public XMLStreamReader wrap(XMLStreamReader reader);
>> > +}
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> a/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java
>> b/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java
>> > new file mode 100644
>> > index 0000000..59a188c
>> > --- /dev/null
>> > +++
>> b/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java
>> > @@ -0,0 +1,63 @@
>> > +/**
>> > + * 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.staxutils;
>> > +
>> > +import java.io.InputStream;
>> > +
>> > +import javax.xml.stream.XMLStreamReader;
>> > +
>> > +import org.apache.cxf.helpers.DOMUtils;
>> > +import org.junit.Assert;
>> > +import org.junit.Test;
>> > +import org.w3c.dom.Document;
>> > +import org.w3c.dom.Element;
>> > +
>> > +public class SysPropExpandingStreamReaderTest extends Assert {
>> > +
>> > +    @Test
>> > +    public void testSystemPropertyExpansion() throws Exception {
>> > +        final String barProp = System.setProperty("bar", "BAR-VALUE");
>> > +        final String blahProp = System.setProperty("blah",
>> "BLAH-VALUE");
>> > +        try {
>> > +            XMLStreamReader reader = new
>> SysPropExpandingStreamReader(StaxUtils.createXMLStreamReader(getTestStream("./resources/sysprops.xml")));
>> > +            Document doc = StaxUtils.read(reader);
>> > +            Element abc =
>> DOMUtils.getChildrenWithName(doc.getDocumentElement(), "http://foo/bar",
>> "abc").iterator().next();
>> > +            assertEquals("fooBAR-VALUEfoo", abc.getTextContent());
>> > +            Element def =
>> DOMUtils.getChildrenWithName(doc.getDocumentElement(), "http://foo/bar",
>> "def").iterator().next();
>> > +            assertEquals("ggggg", def.getTextContent());
>> > +            assertEquals("BLAH-VALUE2", def.getAttribute("myAttr"));
>> > +        } finally {
>> > +            if (barProp != null) {
>> > +                System.setProperty("bar", barProp);
>> > +            } else {
>> > +                System.clearProperty("bar");
>> > +            }
>> > +            if (blahProp != null) {
>> > +                System.setProperty("blah", blahProp);
>> > +            } else {
>> > +                System.clearProperty("blah");
>> > +            }
>> > +        }
>> > +    }
>> > +
>> > +    private InputStream getTestStream(String resource) {
>> > +        return getClass().getResourceAsStream(resource);
>> > +    }
>> > +}
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml
>> > ----------------------------------------------------------------------
>> > diff --git
>> a/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml
>> b/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml
>> > new file mode 100644
>> > index 0000000..7a6ca81
>> > --- /dev/null
>> > +++ b/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml
>> > @@ -0,0 +1,23 @@
>> > +<?xml version="1.0" encoding="UTF-8"?>
>> > +<!--
>> > +  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.
>> > +-->
>> > +<ns:ssss xmlns:ns="http://foo/bar">
>> > +    <ns:abc>foo@bar@foo</ns:abc>
>> > +    <ns:def myAttr="@blah@2">ggggg</ns:def>
>> > +</ns:ssss>
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> a/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
>> b/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
>> > index e4f368a..2f24f9f 100644
>> > --- a/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
>> > +++ b/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
>> > @@ -49,6 +49,9 @@ import org.apache.cxf.common.util.CacheMap;
>> > import org.apache.cxf.configuration.ConfiguredBeanLocator;
>> > import org.apache.cxf.service.model.ServiceSchemaInfo;
>> > import org.apache.cxf.staxutils.StaxUtils;
>> > +import org.apache.cxf.staxutils.DelegatingXMLStreamReader;
>> > +import org.apache.cxf.staxutils.SysPropExpandingStreamReader;
>> > +import org.apache.cxf.staxutils.XMLStreamReaderWrapper;
>> > import org.apache.cxf.wsdl.WSDLConstants;
>> > import org.apache.cxf.wsdl.WSDLExtensionLoader;
>> > import org.apache.cxf.wsdl.WSDLManager;
>> > @@ -71,6 +74,8 @@ public class WSDLManagerImpl implements WSDLManager {
>> >     private boolean disableSchemaCache;
>> >
>> >     private Bus bus;
>> > +
>> > +    private XMLStreamReaderWrapper xmlStreamReaderWrapper;
>> >
>> >     public WSDLManagerImpl() throws BusException {
>> >         this(null);
>> > @@ -130,6 +135,9 @@ public class WSDLManagerImpl implements WSDLManager {
>> >         }
>> >     }
>> >
>> > +    protected Bus getBus() {
>> > +        return bus;
>> > +    }
>> >
>> >     /*
>> >      * (non-Javadoc)
>> > @@ -153,7 +161,11 @@ public class WSDLManagerImpl implements WSDLManager
>> {
>> >                 return definitionsMap.get(url);
>> >             }
>> >         }
>> > -        return loadDefinition(url);
>> > +        Definition def = loadDefinition(url);
>> > +        synchronized (definitionsMap) {
>> > +            definitionsMap.put(url, def);
>> > +        }
>> > +        return def;
>> >     }
>> >
>> >     public Definition getDefinition(Element el) throws WSDLException {
>> > @@ -179,7 +191,7 @@ public class WSDLManagerImpl implements WSDLManager {
>> >         }
>> >     }
>> >
>> > -    private Definition loadDefinition(String url) throws WSDLException {
>> > +    protected Definition loadDefinition(String url) throws
>> WSDLException {
>> >         WSDLReader reader = factory.newWSDLReader();
>> >         reader.setFeature("javax.wsdl.verbose", false);
>> >         reader.setFeature("javax.wsdl.importDocuments", true);
>> > @@ -195,6 +207,9 @@ public class WSDLManagerImpl implements WSDLManager {
>> >             XMLStreamReader xmlReader = null;
>> >             try {
>> >                 xmlReader = StaxUtils.createXMLStreamReader(src);
>> > +                if (xmlStreamReaderWrapper != null) {
>> > +                    xmlReader = xmlStreamReaderWrapper.wrap(xmlReader);
>> > +                }
>> >                 doc = StaxUtils.read(xmlReader, true);
>> >                 if (src.getSystemId() != null) {
>> >                     try {
>> > @@ -217,11 +232,12 @@ public class WSDLManagerImpl implements
>> WSDLManager {
>> >             def = reader.readWSDL(wsdlLocator);
>> >         }
>> >
>> > -        synchronized (definitionsMap) {
>> > -            definitionsMap.put(url, def);
>> > -        }
>> >         return def;
>> >     }
>> > +
>> > +    public void setXMLStreamReaderWrapper(XMLStreamReaderWrapper
>> wrapper) {
>> > +        this.xmlStreamReaderWrapper = wrapper;
>> > +    }
>> >
>> >     private void addExtensionAttributeTypes(ExtensionRegistry extreg) {
>> >         // register types that are not of wsdl4j's default attribute
>> type QName
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
>> > ----------------------------------------------------------------------
>> > diff --git
>> a/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
>> b/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
>> > index e3e5b0a..bcafef1 100644
>> > ---
>> a/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
>> > +++
>> b/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
>> > @@ -29,7 +29,10 @@ import javax.wsdl.Port;
>> > import javax.wsdl.PortType;
>> > import javax.wsdl.Service;
>> > import javax.xml.namespace.QName;
>> > +import javax.xml.stream.XMLStreamReader;
>> >
>> > +import org.apache.cxf.staxutils.SysPropExpandingStreamReader;
>> > +import org.apache.cxf.staxutils.XMLStreamReaderWrapper;
>> > import org.junit.Assert;
>> > import org.junit.Test;
>> >
>> > @@ -106,4 +109,29 @@ public class WSDLManagerImplTest extends Assert {
>> >         java.io.ByteArrayOutputStream bos = new
>> java.io.ByteArrayOutputStream();
>> >         builder.getWSDLFactory().newWSDLWriter().writeWSDL(def, bos);
>> >     }
>> > +
>> > +    @Test
>> > +    public void testXMLStreamReaderWrapper() throws Exception {
>> > +        final String testProp =
>> System.setProperty("org.apache.cxf.test.wsdl11.port", "99999");
>> > +        try {
>> > +            String wsdlUrl =
>> getClass().getResource("hello_world_wrap.wsdl").toString();
>> > +            WSDLManagerImpl builder = new WSDLManagerImpl();
>> > +            builder.setXMLStreamReaderWrapper(new
>> XMLStreamReaderWrapper() {
>> > +                @Override
>> > +                public XMLStreamReader wrap(XMLStreamReader reader) {
>> > +                    return new SysPropExpandingStreamReader(reader);
>> > +                }
>> > +            });
>> > +            Definition def = builder.getDefinition(wsdlUrl);
>> > +            java.io.ByteArrayOutputStream bos = new
>> java.io.ByteArrayOutputStream();
>> > +            builder.getWSDLFactory().newWSDLWriter().writeWSDL(def,
>> bos);
>> > +            assertTrue(bos.toString().contains("
>> http://localhost:99999/SoapContext/SoapPort"));
>> > +        } finally {
>> > +            if (testProp != null) {
>> > +                System.setProperty("org.apache.cxf.test.wsdl11.port",
>> testProp);
>> > +            } else {
>> > +                System.clearProperty("org.apache.cxf.test.wsdl11.port");
>> > +            }
>> > +        }
>> > +    }
>> > }
>> >
>> >
>> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl
>> > ----------------------------------------------------------------------
>> > diff --git
>> a/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl
>> b/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl
>> > new file mode 100644
>> > index 0000000..d2f1d75
>> > --- /dev/null
>> > +++
>> b/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl
>> > @@ -0,0 +1,161 @@
>> > +<?xml version="1.0" encoding="UTF-8"?>
>> > +<!--
>> > +  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.
>> > +-->
>> > +<wsdl:definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="
>> http://apache.org/hello_world_soap_http" xmlns:x1="
>> http://apache.org/hello_world_soap_http/types" xmlns:wsdl="
>> http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="
>> http://www.w3.org/2001/XMLSchema" name="HelloWorld" targetNamespace="
>> http://apache.org/hello_world_soap_http">
>> > +    <wsdl:types>
>> > +        <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="
>> http://apache.org/hello_world_soap_http/types" targetNamespace="
>> http://apache.org/hello_world_soap_http/types"
>> elementFormDefault="qualified">
>> > +            <simpleType name="MyStringType">
>> > +                <restriction base="string">
>> > +                    <maxLength value="30"/>
>> > +                </restriction>
>> > +            </simpleType>
>> > +            <element name="sayHi">
>> > +                <complexType/>
>> > +            </element>
>> > +            <element name="sayHiResponse">
>> > +                <complexType>
>> > +                    <sequence>
>> > +                        <element name="responseType" type="string"/>
>> > +                    </sequence>
>> > +                </complexType>
>> > +            </element>
>> > +            <element name="greetMe">
>> > +                <complexType>
>> > +                    <sequence>
>> > +                        <element name="requestType"
>> type="tns:MyStringType"/>
>> > +                    </sequence>
>> > +                </complexType>
>> > +            </element>
>> > +            <element name="greetMeResponse">
>> > +                <complexType>
>> > +                    <sequence>
>> > +                        <element name="responseType" type="string"/>
>> > +                    </sequence>
>> > +                </complexType>
>> > +            </element>
>> > +            <element name="greetMeOneWay">
>> > +                <complexType>
>> > +                    <sequence>
>> > +                        <element name="requestType" type="string"/>
>> > +                    </sequence>
>> > +                </complexType>
>> > +            </element>
>> > +            <element name="pingMe">
>> > +                <complexType/>
>> > +            </element>
>> > +            <element name="pingMeResponse">
>> > +                <complexType/>
>> > +            </element>
>> > +            <element name="faultDetail">
>> > +                <complexType>
>> > +                    <sequence>
>> > +                        <element name="minor" type="short"/>
>> > +                        <element name="major" type="short"/>
>> > +                    </sequence>
>> > +                </complexType>
>> > +            </element>
>> > +        </schema>
>> > +    </wsdl:types>
>> > +    <wsdl:message name="sayHiRequest">
>> > +        <wsdl:part element="x1:sayHi" name="in"/>
>> > +    </wsdl:message>
>> > +    <wsdl:message name="sayHiResponse">
>> > +        <wsdl:part element="x1:sayHiResponse" name="out"/>
>> > +    </wsdl:message>
>> > +    <wsdl:message name="greetMeRequest">
>> > +        <wsdl:part element="x1:greetMe" name="in"/>
>> > +    </wsdl:message>
>> > +    <wsdl:message name="greetMeResponse">
>> > +        <wsdl:part element="x1:greetMeResponse" name="out"/>
>> > +    </wsdl:message>
>> > +    <wsdl:message name="greetMeOneWayRequest">
>> > +        <wsdl:part element="x1:greetMeOneWay" name="in"/>
>> > +    </wsdl:message>
>> > +    <wsdl:message name="pingMeRequest">
>> > +        <wsdl:part name="in" element="x1:pingMe"/>
>> > +    </wsdl:message>
>> > +    <wsdl:message name="pingMeResponse">
>> > +        <wsdl:part name="out" element="x1:pingMeResponse"/>
>> > +    </wsdl:message>
>> > +    <wsdl:message name="pingMeFault">
>> > +        <wsdl:part name="faultDetail" element="x1:faultDetail"/>
>> > +    </wsdl:message>
>> > +    <wsdl:portType name="Greeter">
>> > +        <wsdl:operation name="sayHi">
>> > +            <wsdl:input message="tns:sayHiRequest" name="sayHiRequest"/>
>> > +            <wsdl:output message="tns:sayHiResponse"
>> name="sayHiResponse"/>
>> > +        </wsdl:operation>
>> > +        <wsdl:operation name="greetMe">
>> > +            <wsdl:input message="tns:greetMeRequest"
>> name="greetMeRequest"/>
>> > +            <wsdl:output message="tns:greetMeResponse"
>> name="greetMeResponse"/>
>> > +        </wsdl:operation>
>> > +        <wsdl:operation name="greetMeOneWay">
>> > +            <wsdl:input message="tns:greetMeOneWayRequest"
>> name="greetMeOneWayRequest"/>
>> > +        </wsdl:operation>
>> > +        <wsdl:operation name="pingMe">
>> > +            <wsdl:input name="pingMeRequest"
>> message="tns:pingMeRequest"/>
>> > +            <wsdl:output name="pingMeResponse"
>> message="tns:pingMeResponse"/>
>> > +            <wsdl:fault name="pingMeFault" message="tns:pingMeFault"/>
>> > +        </wsdl:operation>
>> > +    </wsdl:portType>
>> > +    <wsdl:binding name="Greeter_SOAPBinding" type="tns:Greeter">
>> > +        <soap:binding xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>> style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
>> > +        <wsdl:operation name="sayHi">
>> > +            <soap:operation xmlns:soap="
>> http://schemas.xmlsoap.org/wsdl/soap/" soapAction="" style="document"/>
>> > +            <wsdl:input name="sayHiRequest">
>> > +                <soap:body xmlns:soap="
>> http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
>> > +            </wsdl:input>
>> > +            <wsdl:output name="sayHiResponse">
>> > +                <soap:body xmlns:soap="
>> http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
>> > +            </wsdl:output>
>> > +        </wsdl:operation>
>> > +        <wsdl:operation name="greetMe">
>> > +            <soap:operation xmlns:soap="
>> http://schemas.xmlsoap.org/wsdl/soap/" soapAction="" style="document"/>
>> > +            <wsdl:input name="greetMeRequest">
>> > +                <soap:body xmlns:soap="
>> http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
>> > +            </wsdl:input>
>> > +            <wsdl:output name="greetMeResponse">
>> > +                <soap:body xmlns:soap="
>> http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
>> > +            </wsdl:output>
>> > +        </wsdl:operation>
>> > +        <wsdl:operation name="greetMeOneWay">
>> > +            <soap:operation xmlns:soap="
>> http://schemas.xmlsoap.org/wsdl/soap/" soapAction="" style="document"/>
>> > +            <wsdl:input name="greetMeOneWayRequest">
>> > +                <soap:body xmlns:soap="
>> http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
>> > +            </wsdl:input>
>> > +        </wsdl:operation>
>> > +        <wsdl:operation name="pingMe">
>> > +            <soap:operation xmlns:soap="
>> http://schemas.xmlsoap.org/wsdl/soap/" style="document"/>
>> > +            <wsdl:input>
>> > +                <soap:body xmlns:soap="
>> http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
>> > +            </wsdl:input>
>> > +            <wsdl:output>
>> > +                <soap:body xmlns:soap="
>> http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
>> > +            </wsdl:output>
>> > +            <wsdl:fault name="pingMeFault">
>> > +                <soap:fault xmlns:soap="
>> http://schemas.xmlsoap.org/wsdl/soap/" name="pingMeFault" use="literal"/>
>> > +            </wsdl:fault>
>> > +        </wsdl:operation>
>> > +    </wsdl:binding>
>> > +    <wsdl:service name="SOAPService">
>> > +        <wsdl:port binding="tns:Greeter_SOAPBinding" name="SoapPort">
>> > +            <soap:address xmlns:soap="
>> http://schemas.xmlsoap.org/wsdl/soap/"
>> location="http://localhost:@org.apache.cxf.test.wsdl11.port
>> @/SoapContext/SoapPort"/>
>> > +        </wsdl:port>
>> > +    </wsdl:service>
>> > +</wsdl:definitions>
>> >
>>
>> --
>> Daniel Kulp
>> dkulp@apache.org - http://dankulp.com/blog
>> Talend Community Coder - http://coders.talend.com
>>
>>

Re: git commit: [CXF-5866] Adding XMLStreamReaderWrapper to WSDLManagerImpl and providing a XMLStreamReader wrapper that resolves system properties

Posted by Jason Pell <ja...@pellcorp.com>.
That definitely sounds good. I am so sick of system properties for
configuration.
On 10/07/2014 10:30 PM, "Daniel Kulp" <dk...@apache.org> wrote:

>
> Alessio,
>
> Two thoughts:
>
> 1) There is a java.xml.stream.util.StreamReaderDelegate class available
> from StAX apis, is there really a need for another delegate in CXF?
>
> 2) Would it make sense to change the SysPropExpandingStreamReader to a
> more generic “PropertiesExpandingStreamReader” that takes a Properties
> object as a constructor param (or better yet, a Map<String, Object> or
> similar).  That way someone could possibly configure it with some
> properties object specified in spring or similar.
>
>
> Dan
>
>
> On Jul 9, 2014, at 6:08 PM, asoldano@apache.org wrote:
>
> > Repository: cxf
> > Updated Branches:
> >  refs/heads/master 2c9464299 -> e0b7f3556
> >
> >
> > [CXF-5866] Adding XMLStreamReaderWrapper to WSDLManagerImpl and
> providing a XMLStreamReader wrapper that resolves system properties
> >
> >
> > Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
> > Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/e0b7f355
> > Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/e0b7f355
> > Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/e0b7f355
> >
> > Branch: refs/heads/master
> > Commit: e0b7f35566bdcb2f364f85caa70c4b100433ed8a
> > Parents: 2c94642
> > Author: Alessio Soldano <as...@redhat.com>
> > Authored: Thu Jul 10 00:04:09 2014 +0200
> > Committer: Alessio Soldano <as...@redhat.com>
> > Committed: Thu Jul 10 00:08:08 2014 +0200
> >
> > ----------------------------------------------------------------------
> > .../staxutils/DelegatingXMLStreamReader.java    | 264 +++++++++++++++++++
> > .../staxutils/SysPropExpandingStreamReader.java |  90 +++++++
> > .../cxf/staxutils/XMLStreamReaderWrapper.java   |  30 +++
> > .../SysPropExpandingStreamReaderTest.java       |  63 +++++
> > .../apache/cxf/staxutils/resources/sysprops.xml |  23 ++
> > .../org/apache/cxf/wsdl11/WSDLManagerImpl.java  |  26 +-
> > .../apache/cxf/wsdl11/WSDLManagerImplTest.java  |  28 ++
> > .../org/apache/cxf/wsdl11/hello_world_wrap.wsdl | 161 +++++++++++
> > 8 files changed, 680 insertions(+), 5 deletions(-)
> > ----------------------------------------------------------------------
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java
> > ----------------------------------------------------------------------
> > diff --git
> a/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java
> b/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java
> > new file mode 100644
> > index 0000000..56564a7
> > --- /dev/null
> > +++
> b/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java
> > @@ -0,0 +1,264 @@
> > +/**
> > + * 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.staxutils;
> > +
> > +import javax.xml.namespace.NamespaceContext;
> > +import javax.xml.namespace.QName;
> > +import javax.xml.stream.Location;
> > +import javax.xml.stream.XMLStreamException;
> > +import javax.xml.stream.XMLStreamReader;
> > +
> > +/**
> > + * A XMLStreamReader that delegates to a provided XMLStreamReader
> instance.
> > + *
> > + */
> > +public class DelegatingXMLStreamReader implements XMLStreamReader {
> > +
> > +    private final XMLStreamReader delegate;
> > +
> > +    public DelegatingXMLStreamReader(XMLStreamReader reader) {
> > +        this.delegate = reader;
> > +    }
> > +
> > +    @Override
> > +    public Object getProperty(String name) throws
> IllegalArgumentException {
> > +        return delegate.getProperty(name);
> > +    }
> > +
> > +    @Override
> > +    public int next() throws XMLStreamException {
> > +        return delegate.next();
> > +    }
> > +
> > +    @Override
> > +    public void require(int type, String namespaceURI, String
> localName) throws XMLStreamException {
> > +        delegate.require(type, namespaceURI, localName);
> > +    }
> > +
> > +    @Override
> > +    public String getElementText() throws XMLStreamException {
> > +        return delegate.getElementText();
> > +    }
> > +
> > +    @Override
> > +    public int nextTag() throws XMLStreamException {
> > +        return delegate.nextTag();
> > +    }
> > +
> > +    @Override
> > +    public boolean hasNext() throws XMLStreamException {
> > +        return delegate.hasNext();
> > +    }
> > +
> > +    @Override
> > +    public void close() throws XMLStreamException {
> > +        delegate.close();
> > +    }
> > +
> > +    @Override
> > +    public String getNamespaceURI(String prefix) {
> > +        return delegate.getNamespaceURI(prefix);
> > +    }
> > +
> > +    @Override
> > +    public boolean isStartElement() {
> > +        return delegate.isStartElement();
> > +    }
> > +
> > +    @Override
> > +    public boolean isEndElement() {
> > +        return delegate.isEndElement();
> > +    }
> > +
> > +    @Override
> > +    public boolean isCharacters() {
> > +        return delegate.isCharacters();
> > +    }
> > +
> > +    @Override
> > +    public boolean isWhiteSpace() {
> > +        return delegate.isWhiteSpace();
> > +    }
> > +
> > +    @Override
> > +    public String getAttributeValue(String namespaceURI, String
> localName) {
> > +        return delegate.getAttributeValue(namespaceURI, localName);
> > +    }
> > +
> > +    @Override
> > +    public int getAttributeCount() {
> > +        return delegate.getAttributeCount();
> > +    }
> > +
> > +    @Override
> > +    public QName getAttributeName(int index) {
> > +        return delegate.getAttributeName(index);
> > +    }
> > +
> > +    @Override
> > +    public String getAttributeNamespace(int index) {
> > +        return delegate.getAttributeNamespace(index);
> > +    }
> > +
> > +    @Override
> > +    public String getAttributeLocalName(int index) {
> > +        return delegate.getAttributeLocalName(index);
> > +    }
> > +
> > +    @Override
> > +    public String getAttributePrefix(int index) {
> > +        return delegate.getAttributePrefix(index);
> > +    }
> > +
> > +    @Override
> > +    public String getAttributeType(int index) {
> > +        return delegate.getAttributeType(index);
> > +    }
> > +
> > +    @Override
> > +    public String getAttributeValue(int index) {
> > +        return delegate.getAttributeValue(index);
> > +    }
> > +
> > +    @Override
> > +    public boolean isAttributeSpecified(int index) {
> > +        return delegate.isAttributeSpecified(index);
> > +    }
> > +
> > +    @Override
> > +    public int getNamespaceCount() {
> > +        return delegate.getNamespaceCount();
> > +    }
> > +
> > +    @Override
> > +    public String getNamespacePrefix(int index) {
> > +        return delegate.getNamespacePrefix(index);
> > +    }
> > +
> > +    @Override
> > +    public String getNamespaceURI(int index) {
> > +        return delegate.getNamespaceURI(index);
> > +    }
> > +
> > +    @Override
> > +    public NamespaceContext getNamespaceContext() {
> > +        return delegate.getNamespaceContext();
> > +    }
> > +
> > +    @Override
> > +    public int getEventType() {
> > +        return delegate.getEventType();
> > +    }
> > +
> > +    @Override
> > +    public String getText() {
> > +        return delegate.getText();
> > +    }
> > +
> > +    @Override
> > +    public char[] getTextCharacters() {
> > +        return delegate.getTextCharacters();
> > +    }
> > +
> > +    @Override
> > +    public int getTextCharacters(int sourceStart, char[] target, int
> targetStart, int length)
> > +        throws XMLStreamException {
> > +        return delegate.getTextCharacters(sourceStart, target,
> targetStart, length);
> > +    }
> > +
> > +    @Override
> > +    public int getTextStart() {
> > +        return delegate.getTextStart();
> > +    }
> > +
> > +    @Override
> > +    public int getTextLength() {
> > +        return delegate.getTextLength();
> > +    }
> > +
> > +    @Override
> > +    public String getEncoding() {
> > +        return delegate.getEncoding();
> > +    }
> > +
> > +    @Override
> > +    public boolean hasText() {
> > +        return delegate.hasText();
> > +    }
> > +
> > +    @Override
> > +    public Location getLocation() {
> > +        return delegate.getLocation();
> > +    }
> > +
> > +    @Override
> > +    public QName getName() {
> > +        return delegate.getName();
> > +    }
> > +
> > +    @Override
> > +    public String getLocalName() {
> > +        return delegate.getLocalName();
> > +    }
> > +
> > +    @Override
> > +    public boolean hasName() {
> > +        return delegate.hasName();
> > +    }
> > +
> > +    @Override
> > +    public String getNamespaceURI() {
> > +        return delegate.getNamespaceURI();
> > +    }
> > +
> > +    @Override
> > +    public String getPrefix() {
> > +        return delegate.getPrefix();
> > +    }
> > +
> > +    @Override
> > +    public String getVersion() {
> > +        return delegate.getVersion();
> > +    }
> > +
> > +    @Override
> > +    public boolean isStandalone() {
> > +        return delegate.isStandalone();
> > +    }
> > +
> > +    @Override
> > +    public boolean standaloneSet() {
> > +        return delegate.standaloneSet();
> > +    }
> > +
> > +    @Override
> > +    public String getCharacterEncodingScheme() {
> > +        return delegate.getCharacterEncodingScheme();
> > +    }
> > +
> > +    @Override
> > +    public String getPITarget() {
> > +        return delegate.getPITarget();
> > +    }
> > +
> > +    @Override
> > +    public String getPIData() {
> > +        return delegate.getPIData();
> > +    }
> > +}
> >
> >
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java
> > ----------------------------------------------------------------------
> > diff --git
> a/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java
> b/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java
> > new file mode 100644
> > index 0000000..4987338
> > --- /dev/null
> > +++
> b/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java
> > @@ -0,0 +1,90 @@
> > +/**
> > + * 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.staxutils;
> > +
> > +import javax.xml.stream.XMLStreamException;
> > +import javax.xml.stream.XMLStreamReader;
> > +
> > +/**
> > + * A wrapper around XMLStreamReader that expands system property
> references in element and attribute values.
> > + *
> > + */
> > +public class SysPropExpandingStreamReader extends
> DelegatingXMLStreamReader {
> > +
> > +    public static final String DELIMITER = "@";
> > +
> > +    public SysPropExpandingStreamReader(XMLStreamReader reader) {
> > +        super(reader);
> > +    }
> > +
> > +    protected String expandSystemProperty(String value) {
> > +        if (!isEmpty(value)) {
> > +            final int startIndx = value.indexOf(DELIMITER);
> > +            if (startIndx > -1) {
> > +                final int endIndx = value.lastIndexOf(DELIMITER);
> > +                if (endIndx > -1 && startIndx + 1 < endIndx) {
> > +                    final String propName = value.substring(startIndx +
> 1, endIndx);
> > +                    if (!isEmpty(propName)) {
> > +                        final String envValue =
> System.getProperty(propName);
> > +                        if (!isEmpty(envValue)) {
> > +                            StringBuilder sb = new StringBuilder();
> > +                            sb.append(value.substring(0, startIndx));
> > +                            sb.append(envValue);
> > +                            sb.append(value.substring(endIndx + 1));
> > +                            value = sb.toString();
> > +                        }
> > +                    }
> > +                }
> > +            }
> > +        }
> > +        return value;
> > +    }
> > +
> > +    private static boolean isEmpty(String str) {
> > +        if (str != null) {
> > +            int len = str.length();
> > +            for (int x = 0; x < len; ++x) {
> > +                if (str.charAt(x) > ' ') {
> > +                    return false;
> > +                }
> > +            }
> > +        }
> > +        return true;
> > +    }
> > +
> > +    @Override
> > +    public String getElementText() throws XMLStreamException {
> > +        return expandSystemProperty(super.getElementText());
> > +    }
> > +
> > +    @Override
> > +    public String getAttributeValue(String namespaceURI, String
> localName) {
> > +        return
> expandSystemProperty(super.getAttributeValue(namespaceURI, localName));
> > +    }
> > +
> > +    @Override
> > +    public String getAttributeValue(int index) {
> > +        return expandSystemProperty(super.getAttributeValue(index));
> > +    }
> > +
> > +    @Override
> > +    public String getText() {
> > +        return expandSystemProperty(super.getText());
> > +    }
> > +}
> >
> >
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java
> > ----------------------------------------------------------------------
> > diff --git
> a/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java
> b/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java
> > new file mode 100644
> > index 0000000..36c582f
> > --- /dev/null
> > +++
> b/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java
> > @@ -0,0 +1,30 @@
> > +/**
> > + * 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.staxutils;
> > +
> > +import javax.xml.stream.XMLStreamReader;
> > +
> > +/**
> > + * Interface for XMLStreamReader wrappers
> > + *
> > + */
> > +public interface XMLStreamReaderWrapper {
> > +
> > +    public XMLStreamReader wrap(XMLStreamReader reader);
> > +}
> >
> >
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java
> > ----------------------------------------------------------------------
> > diff --git
> a/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java
> b/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java
> > new file mode 100644
> > index 0000000..59a188c
> > --- /dev/null
> > +++
> b/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java
> > @@ -0,0 +1,63 @@
> > +/**
> > + * 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.staxutils;
> > +
> > +import java.io.InputStream;
> > +
> > +import javax.xml.stream.XMLStreamReader;
> > +
> > +import org.apache.cxf.helpers.DOMUtils;
> > +import org.junit.Assert;
> > +import org.junit.Test;
> > +import org.w3c.dom.Document;
> > +import org.w3c.dom.Element;
> > +
> > +public class SysPropExpandingStreamReaderTest extends Assert {
> > +
> > +    @Test
> > +    public void testSystemPropertyExpansion() throws Exception {
> > +        final String barProp = System.setProperty("bar", "BAR-VALUE");
> > +        final String blahProp = System.setProperty("blah",
> "BLAH-VALUE");
> > +        try {
> > +            XMLStreamReader reader = new
> SysPropExpandingStreamReader(StaxUtils.createXMLStreamReader(getTestStream("./resources/sysprops.xml")));
> > +            Document doc = StaxUtils.read(reader);
> > +            Element abc =
> DOMUtils.getChildrenWithName(doc.getDocumentElement(), "http://foo/bar",
> "abc").iterator().next();
> > +            assertEquals("fooBAR-VALUEfoo", abc.getTextContent());
> > +            Element def =
> DOMUtils.getChildrenWithName(doc.getDocumentElement(), "http://foo/bar",
> "def").iterator().next();
> > +            assertEquals("ggggg", def.getTextContent());
> > +            assertEquals("BLAH-VALUE2", def.getAttribute("myAttr"));
> > +        } finally {
> > +            if (barProp != null) {
> > +                System.setProperty("bar", barProp);
> > +            } else {
> > +                System.clearProperty("bar");
> > +            }
> > +            if (blahProp != null) {
> > +                System.setProperty("blah", blahProp);
> > +            } else {
> > +                System.clearProperty("blah");
> > +            }
> > +        }
> > +    }
> > +
> > +    private InputStream getTestStream(String resource) {
> > +        return getClass().getResourceAsStream(resource);
> > +    }
> > +}
> >
> >
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml
> > ----------------------------------------------------------------------
> > diff --git
> a/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml
> b/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml
> > new file mode 100644
> > index 0000000..7a6ca81
> > --- /dev/null
> > +++ b/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml
> > @@ -0,0 +1,23 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +<!--
> > +  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.
> > +-->
> > +<ns:ssss xmlns:ns="http://foo/bar">
> > +    <ns:abc>foo@bar@foo</ns:abc>
> > +    <ns:def myAttr="@blah@2">ggggg</ns:def>
> > +</ns:ssss>
> >
> >
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
> > ----------------------------------------------------------------------
> > diff --git
> a/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
> b/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
> > index e4f368a..2f24f9f 100644
> > --- a/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
> > +++ b/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
> > @@ -49,6 +49,9 @@ import org.apache.cxf.common.util.CacheMap;
> > import org.apache.cxf.configuration.ConfiguredBeanLocator;
> > import org.apache.cxf.service.model.ServiceSchemaInfo;
> > import org.apache.cxf.staxutils.StaxUtils;
> > +import org.apache.cxf.staxutils.DelegatingXMLStreamReader;
> > +import org.apache.cxf.staxutils.SysPropExpandingStreamReader;
> > +import org.apache.cxf.staxutils.XMLStreamReaderWrapper;
> > import org.apache.cxf.wsdl.WSDLConstants;
> > import org.apache.cxf.wsdl.WSDLExtensionLoader;
> > import org.apache.cxf.wsdl.WSDLManager;
> > @@ -71,6 +74,8 @@ public class WSDLManagerImpl implements WSDLManager {
> >     private boolean disableSchemaCache;
> >
> >     private Bus bus;
> > +
> > +    private XMLStreamReaderWrapper xmlStreamReaderWrapper;
> >
> >     public WSDLManagerImpl() throws BusException {
> >         this(null);
> > @@ -130,6 +135,9 @@ public class WSDLManagerImpl implements WSDLManager {
> >         }
> >     }
> >
> > +    protected Bus getBus() {
> > +        return bus;
> > +    }
> >
> >     /*
> >      * (non-Javadoc)
> > @@ -153,7 +161,11 @@ public class WSDLManagerImpl implements WSDLManager
> {
> >                 return definitionsMap.get(url);
> >             }
> >         }
> > -        return loadDefinition(url);
> > +        Definition def = loadDefinition(url);
> > +        synchronized (definitionsMap) {
> > +            definitionsMap.put(url, def);
> > +        }
> > +        return def;
> >     }
> >
> >     public Definition getDefinition(Element el) throws WSDLException {
> > @@ -179,7 +191,7 @@ public class WSDLManagerImpl implements WSDLManager {
> >         }
> >     }
> >
> > -    private Definition loadDefinition(String url) throws WSDLException {
> > +    protected Definition loadDefinition(String url) throws
> WSDLException {
> >         WSDLReader reader = factory.newWSDLReader();
> >         reader.setFeature("javax.wsdl.verbose", false);
> >         reader.setFeature("javax.wsdl.importDocuments", true);
> > @@ -195,6 +207,9 @@ public class WSDLManagerImpl implements WSDLManager {
> >             XMLStreamReader xmlReader = null;
> >             try {
> >                 xmlReader = StaxUtils.createXMLStreamReader(src);
> > +                if (xmlStreamReaderWrapper != null) {
> > +                    xmlReader = xmlStreamReaderWrapper.wrap(xmlReader);
> > +                }
> >                 doc = StaxUtils.read(xmlReader, true);
> >                 if (src.getSystemId() != null) {
> >                     try {
> > @@ -217,11 +232,12 @@ public class WSDLManagerImpl implements
> WSDLManager {
> >             def = reader.readWSDL(wsdlLocator);
> >         }
> >
> > -        synchronized (definitionsMap) {
> > -            definitionsMap.put(url, def);
> > -        }
> >         return def;
> >     }
> > +
> > +    public void setXMLStreamReaderWrapper(XMLStreamReaderWrapper
> wrapper) {
> > +        this.xmlStreamReaderWrapper = wrapper;
> > +    }
> >
> >     private void addExtensionAttributeTypes(ExtensionRegistry extreg) {
> >         // register types that are not of wsdl4j's default attribute
> type QName
> >
> >
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
> > ----------------------------------------------------------------------
> > diff --git
> a/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
> b/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
> > index e3e5b0a..bcafef1 100644
> > ---
> a/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
> > +++
> b/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
> > @@ -29,7 +29,10 @@ import javax.wsdl.Port;
> > import javax.wsdl.PortType;
> > import javax.wsdl.Service;
> > import javax.xml.namespace.QName;
> > +import javax.xml.stream.XMLStreamReader;
> >
> > +import org.apache.cxf.staxutils.SysPropExpandingStreamReader;
> > +import org.apache.cxf.staxutils.XMLStreamReaderWrapper;
> > import org.junit.Assert;
> > import org.junit.Test;
> >
> > @@ -106,4 +109,29 @@ public class WSDLManagerImplTest extends Assert {
> >         java.io.ByteArrayOutputStream bos = new
> java.io.ByteArrayOutputStream();
> >         builder.getWSDLFactory().newWSDLWriter().writeWSDL(def, bos);
> >     }
> > +
> > +    @Test
> > +    public void testXMLStreamReaderWrapper() throws Exception {
> > +        final String testProp =
> System.setProperty("org.apache.cxf.test.wsdl11.port", "99999");
> > +        try {
> > +            String wsdlUrl =
> getClass().getResource("hello_world_wrap.wsdl").toString();
> > +            WSDLManagerImpl builder = new WSDLManagerImpl();
> > +            builder.setXMLStreamReaderWrapper(new
> XMLStreamReaderWrapper() {
> > +                @Override
> > +                public XMLStreamReader wrap(XMLStreamReader reader) {
> > +                    return new SysPropExpandingStreamReader(reader);
> > +                }
> > +            });
> > +            Definition def = builder.getDefinition(wsdlUrl);
> > +            java.io.ByteArrayOutputStream bos = new
> java.io.ByteArrayOutputStream();
> > +            builder.getWSDLFactory().newWSDLWriter().writeWSDL(def,
> bos);
> > +            assertTrue(bos.toString().contains("
> http://localhost:99999/SoapContext/SoapPort"));
> > +        } finally {
> > +            if (testProp != null) {
> > +                System.setProperty("org.apache.cxf.test.wsdl11.port",
> testProp);
> > +            } else {
> > +                System.clearProperty("org.apache.cxf.test.wsdl11.port");
> > +            }
> > +        }
> > +    }
> > }
> >
> >
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl
> > ----------------------------------------------------------------------
> > diff --git
> a/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl
> b/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl
> > new file mode 100644
> > index 0000000..d2f1d75
> > --- /dev/null
> > +++
> b/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl
> > @@ -0,0 +1,161 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +<!--
> > +  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.
> > +-->
> > +<wsdl:definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="
> http://apache.org/hello_world_soap_http" xmlns:x1="
> http://apache.org/hello_world_soap_http/types" xmlns:wsdl="
> http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="
> http://www.w3.org/2001/XMLSchema" name="HelloWorld" targetNamespace="
> http://apache.org/hello_world_soap_http">
> > +    <wsdl:types>
> > +        <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="
> http://apache.org/hello_world_soap_http/types" targetNamespace="
> http://apache.org/hello_world_soap_http/types"
> elementFormDefault="qualified">
> > +            <simpleType name="MyStringType">
> > +                <restriction base="string">
> > +                    <maxLength value="30"/>
> > +                </restriction>
> > +            </simpleType>
> > +            <element name="sayHi">
> > +                <complexType/>
> > +            </element>
> > +            <element name="sayHiResponse">
> > +                <complexType>
> > +                    <sequence>
> > +                        <element name="responseType" type="string"/>
> > +                    </sequence>
> > +                </complexType>
> > +            </element>
> > +            <element name="greetMe">
> > +                <complexType>
> > +                    <sequence>
> > +                        <element name="requestType"
> type="tns:MyStringType"/>
> > +                    </sequence>
> > +                </complexType>
> > +            </element>
> > +            <element name="greetMeResponse">
> > +                <complexType>
> > +                    <sequence>
> > +                        <element name="responseType" type="string"/>
> > +                    </sequence>
> > +                </complexType>
> > +            </element>
> > +            <element name="greetMeOneWay">
> > +                <complexType>
> > +                    <sequence>
> > +                        <element name="requestType" type="string"/>
> > +                    </sequence>
> > +                </complexType>
> > +            </element>
> > +            <element name="pingMe">
> > +                <complexType/>
> > +            </element>
> > +            <element name="pingMeResponse">
> > +                <complexType/>
> > +            </element>
> > +            <element name="faultDetail">
> > +                <complexType>
> > +                    <sequence>
> > +                        <element name="minor" type="short"/>
> > +                        <element name="major" type="short"/>
> > +                    </sequence>
> > +                </complexType>
> > +            </element>
> > +        </schema>
> > +    </wsdl:types>
> > +    <wsdl:message name="sayHiRequest">
> > +        <wsdl:part element="x1:sayHi" name="in"/>
> > +    </wsdl:message>
> > +    <wsdl:message name="sayHiResponse">
> > +        <wsdl:part element="x1:sayHiResponse" name="out"/>
> > +    </wsdl:message>
> > +    <wsdl:message name="greetMeRequest">
> > +        <wsdl:part element="x1:greetMe" name="in"/>
> > +    </wsdl:message>
> > +    <wsdl:message name="greetMeResponse">
> > +        <wsdl:part element="x1:greetMeResponse" name="out"/>
> > +    </wsdl:message>
> > +    <wsdl:message name="greetMeOneWayRequest">
> > +        <wsdl:part element="x1:greetMeOneWay" name="in"/>
> > +    </wsdl:message>
> > +    <wsdl:message name="pingMeRequest">
> > +        <wsdl:part name="in" element="x1:pingMe"/>
> > +    </wsdl:message>
> > +    <wsdl:message name="pingMeResponse">
> > +        <wsdl:part name="out" element="x1:pingMeResponse"/>
> > +    </wsdl:message>
> > +    <wsdl:message name="pingMeFault">
> > +        <wsdl:part name="faultDetail" element="x1:faultDetail"/>
> > +    </wsdl:message>
> > +    <wsdl:portType name="Greeter">
> > +        <wsdl:operation name="sayHi">
> > +            <wsdl:input message="tns:sayHiRequest" name="sayHiRequest"/>
> > +            <wsdl:output message="tns:sayHiResponse"
> name="sayHiResponse"/>
> > +        </wsdl:operation>
> > +        <wsdl:operation name="greetMe">
> > +            <wsdl:input message="tns:greetMeRequest"
> name="greetMeRequest"/>
> > +            <wsdl:output message="tns:greetMeResponse"
> name="greetMeResponse"/>
> > +        </wsdl:operation>
> > +        <wsdl:operation name="greetMeOneWay">
> > +            <wsdl:input message="tns:greetMeOneWayRequest"
> name="greetMeOneWayRequest"/>
> > +        </wsdl:operation>
> > +        <wsdl:operation name="pingMe">
> > +            <wsdl:input name="pingMeRequest"
> message="tns:pingMeRequest"/>
> > +            <wsdl:output name="pingMeResponse"
> message="tns:pingMeResponse"/>
> > +            <wsdl:fault name="pingMeFault" message="tns:pingMeFault"/>
> > +        </wsdl:operation>
> > +    </wsdl:portType>
> > +    <wsdl:binding name="Greeter_SOAPBinding" type="tns:Greeter">
> > +        <soap:binding xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
> > +        <wsdl:operation name="sayHi">
> > +            <soap:operation xmlns:soap="
> http://schemas.xmlsoap.org/wsdl/soap/" soapAction="" style="document"/>
> > +            <wsdl:input name="sayHiRequest">
> > +                <soap:body xmlns:soap="
> http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
> > +            </wsdl:input>
> > +            <wsdl:output name="sayHiResponse">
> > +                <soap:body xmlns:soap="
> http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
> > +            </wsdl:output>
> > +        </wsdl:operation>
> > +        <wsdl:operation name="greetMe">
> > +            <soap:operation xmlns:soap="
> http://schemas.xmlsoap.org/wsdl/soap/" soapAction="" style="document"/>
> > +            <wsdl:input name="greetMeRequest">
> > +                <soap:body xmlns:soap="
> http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
> > +            </wsdl:input>
> > +            <wsdl:output name="greetMeResponse">
> > +                <soap:body xmlns:soap="
> http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
> > +            </wsdl:output>
> > +        </wsdl:operation>
> > +        <wsdl:operation name="greetMeOneWay">
> > +            <soap:operation xmlns:soap="
> http://schemas.xmlsoap.org/wsdl/soap/" soapAction="" style="document"/>
> > +            <wsdl:input name="greetMeOneWayRequest">
> > +                <soap:body xmlns:soap="
> http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
> > +            </wsdl:input>
> > +        </wsdl:operation>
> > +        <wsdl:operation name="pingMe">
> > +            <soap:operation xmlns:soap="
> http://schemas.xmlsoap.org/wsdl/soap/" style="document"/>
> > +            <wsdl:input>
> > +                <soap:body xmlns:soap="
> http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
> > +            </wsdl:input>
> > +            <wsdl:output>
> > +                <soap:body xmlns:soap="
> http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
> > +            </wsdl:output>
> > +            <wsdl:fault name="pingMeFault">
> > +                <soap:fault xmlns:soap="
> http://schemas.xmlsoap.org/wsdl/soap/" name="pingMeFault" use="literal"/>
> > +            </wsdl:fault>
> > +        </wsdl:operation>
> > +    </wsdl:binding>
> > +    <wsdl:service name="SOAPService">
> > +        <wsdl:port binding="tns:Greeter_SOAPBinding" name="SoapPort">
> > +            <soap:address xmlns:soap="
> http://schemas.xmlsoap.org/wsdl/soap/"
> location="http://localhost:@org.apache.cxf.test.wsdl11.port
> @/SoapContext/SoapPort"/>
> > +        </wsdl:port>
> > +    </wsdl:service>
> > +</wsdl:definitions>
> >
>
> --
> Daniel Kulp
> dkulp@apache.org - http://dankulp.com/blog
> Talend Community Coder - http://coders.talend.com
>
>

Re: git commit: [CXF-5866] Adding XMLStreamReaderWrapper to WSDLManagerImpl and providing a XMLStreamReader wrapper that resolves system properties

Posted by Daniel Kulp <dk...@apache.org>.
Alessio,

Two thoughts:

1) There is a java.xml.stream.util.StreamReaderDelegate class available from StAX apis, is there really a need for another delegate in CXF?

2) Would it make sense to change the SysPropExpandingStreamReader to a more generic “PropertiesExpandingStreamReader” that takes a Properties object as a constructor param (or better yet, a Map<String, Object> or similar).  That way someone could possibly configure it with some properties object specified in spring or similar.


Dan


On Jul 9, 2014, at 6:08 PM, asoldano@apache.org wrote:

> Repository: cxf
> Updated Branches:
>  refs/heads/master 2c9464299 -> e0b7f3556
> 
> 
> [CXF-5866] Adding XMLStreamReaderWrapper to WSDLManagerImpl and providing a XMLStreamReader wrapper that resolves system properties
> 
> 
> Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
> Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/e0b7f355
> Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/e0b7f355
> Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/e0b7f355
> 
> Branch: refs/heads/master
> Commit: e0b7f35566bdcb2f364f85caa70c4b100433ed8a
> Parents: 2c94642
> Author: Alessio Soldano <as...@redhat.com>
> Authored: Thu Jul 10 00:04:09 2014 +0200
> Committer: Alessio Soldano <as...@redhat.com>
> Committed: Thu Jul 10 00:08:08 2014 +0200
> 
> ----------------------------------------------------------------------
> .../staxutils/DelegatingXMLStreamReader.java    | 264 +++++++++++++++++++
> .../staxutils/SysPropExpandingStreamReader.java |  90 +++++++
> .../cxf/staxutils/XMLStreamReaderWrapper.java   |  30 +++
> .../SysPropExpandingStreamReaderTest.java       |  63 +++++
> .../apache/cxf/staxutils/resources/sysprops.xml |  23 ++
> .../org/apache/cxf/wsdl11/WSDLManagerImpl.java  |  26 +-
> .../apache/cxf/wsdl11/WSDLManagerImplTest.java  |  28 ++
> .../org/apache/cxf/wsdl11/hello_world_wrap.wsdl | 161 +++++++++++
> 8 files changed, 680 insertions(+), 5 deletions(-)
> ----------------------------------------------------------------------
> 
> 
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java
> ----------------------------------------------------------------------
> diff --git a/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java b/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java
> new file mode 100644
> index 0000000..56564a7
> --- /dev/null
> +++ b/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamReader.java
> @@ -0,0 +1,264 @@
> +/**
> + * 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.staxutils;
> +
> +import javax.xml.namespace.NamespaceContext;
> +import javax.xml.namespace.QName;
> +import javax.xml.stream.Location;
> +import javax.xml.stream.XMLStreamException;
> +import javax.xml.stream.XMLStreamReader;
> +
> +/**
> + * A XMLStreamReader that delegates to a provided XMLStreamReader instance.
> + * 
> + */
> +public class DelegatingXMLStreamReader implements XMLStreamReader {
> +    
> +    private final XMLStreamReader delegate;
> +    
> +    public DelegatingXMLStreamReader(XMLStreamReader reader) {
> +        this.delegate = reader;
> +    }
> +    
> +    @Override
> +    public Object getProperty(String name) throws IllegalArgumentException {
> +        return delegate.getProperty(name);
> +    }
> +
> +    @Override
> +    public int next() throws XMLStreamException {
> +        return delegate.next();
> +    }
> +
> +    @Override
> +    public void require(int type, String namespaceURI, String localName) throws XMLStreamException {
> +        delegate.require(type, namespaceURI, localName);
> +    }
> +
> +    @Override
> +    public String getElementText() throws XMLStreamException {
> +        return delegate.getElementText();
> +    }
> +
> +    @Override
> +    public int nextTag() throws XMLStreamException {
> +        return delegate.nextTag();
> +    }
> +
> +    @Override
> +    public boolean hasNext() throws XMLStreamException {
> +        return delegate.hasNext();
> +    }
> +
> +    @Override
> +    public void close() throws XMLStreamException {
> +        delegate.close();
> +    }
> +
> +    @Override
> +    public String getNamespaceURI(String prefix) {
> +        return delegate.getNamespaceURI(prefix);
> +    }
> +
> +    @Override
> +    public boolean isStartElement() {
> +        return delegate.isStartElement();
> +    }
> +
> +    @Override
> +    public boolean isEndElement() {
> +        return delegate.isEndElement();
> +    }
> +
> +    @Override
> +    public boolean isCharacters() {
> +        return delegate.isCharacters();
> +    }
> +
> +    @Override
> +    public boolean isWhiteSpace() {
> +        return delegate.isWhiteSpace();
> +    }
> +
> +    @Override
> +    public String getAttributeValue(String namespaceURI, String localName) {
> +        return delegate.getAttributeValue(namespaceURI, localName);
> +    }
> +
> +    @Override
> +    public int getAttributeCount() {
> +        return delegate.getAttributeCount();
> +    }
> +
> +    @Override
> +    public QName getAttributeName(int index) {
> +        return delegate.getAttributeName(index);
> +    }
> +
> +    @Override
> +    public String getAttributeNamespace(int index) {
> +        return delegate.getAttributeNamespace(index);
> +    }
> +
> +    @Override
> +    public String getAttributeLocalName(int index) {
> +        return delegate.getAttributeLocalName(index);
> +    }
> +
> +    @Override
> +    public String getAttributePrefix(int index) {
> +        return delegate.getAttributePrefix(index);
> +    }
> +
> +    @Override
> +    public String getAttributeType(int index) {
> +        return delegate.getAttributeType(index);
> +    }
> +
> +    @Override
> +    public String getAttributeValue(int index) {
> +        return delegate.getAttributeValue(index);
> +    }
> +
> +    @Override
> +    public boolean isAttributeSpecified(int index) {
> +        return delegate.isAttributeSpecified(index);
> +    }
> +
> +    @Override
> +    public int getNamespaceCount() {
> +        return delegate.getNamespaceCount();
> +    }
> +
> +    @Override
> +    public String getNamespacePrefix(int index) {
> +        return delegate.getNamespacePrefix(index);
> +    }
> +
> +    @Override
> +    public String getNamespaceURI(int index) {
> +        return delegate.getNamespaceURI(index);
> +    }
> +
> +    @Override
> +    public NamespaceContext getNamespaceContext() {
> +        return delegate.getNamespaceContext();
> +    }
> +
> +    @Override
> +    public int getEventType() {
> +        return delegate.getEventType();
> +    }
> +
> +    @Override
> +    public String getText() {
> +        return delegate.getText();
> +    }
> +
> +    @Override
> +    public char[] getTextCharacters() {
> +        return delegate.getTextCharacters();
> +    }
> +
> +    @Override
> +    public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length)
> +        throws XMLStreamException {
> +        return delegate.getTextCharacters(sourceStart, target, targetStart, length);
> +    }
> +
> +    @Override
> +    public int getTextStart() {
> +        return delegate.getTextStart();
> +    }
> +
> +    @Override
> +    public int getTextLength() {
> +        return delegate.getTextLength();
> +    }
> +
> +    @Override
> +    public String getEncoding() {
> +        return delegate.getEncoding();
> +    }
> +
> +    @Override
> +    public boolean hasText() {
> +        return delegate.hasText();
> +    }
> +
> +    @Override
> +    public Location getLocation() {
> +        return delegate.getLocation();
> +    }
> +
> +    @Override
> +    public QName getName() {
> +        return delegate.getName();
> +    }
> +
> +    @Override
> +    public String getLocalName() {
> +        return delegate.getLocalName();
> +    }
> +
> +    @Override
> +    public boolean hasName() {
> +        return delegate.hasName();
> +    }
> +
> +    @Override
> +    public String getNamespaceURI() {
> +        return delegate.getNamespaceURI();
> +    }
> +
> +    @Override
> +    public String getPrefix() {
> +        return delegate.getPrefix();
> +    }
> +
> +    @Override
> +    public String getVersion() {
> +        return delegate.getVersion();
> +    }
> +
> +    @Override
> +    public boolean isStandalone() {
> +        return delegate.isStandalone();
> +    }
> +
> +    @Override
> +    public boolean standaloneSet() {
> +        return delegate.standaloneSet();
> +    }
> +
> +    @Override
> +    public String getCharacterEncodingScheme() {
> +        return delegate.getCharacterEncodingScheme();
> +    }
> +
> +    @Override
> +    public String getPITarget() {
> +        return delegate.getPITarget();
> +    }
> +
> +    @Override
> +    public String getPIData() {
> +        return delegate.getPIData();
> +    }
> +}
> 
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java
> ----------------------------------------------------------------------
> diff --git a/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java b/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java
> new file mode 100644
> index 0000000..4987338
> --- /dev/null
> +++ b/core/src/main/java/org/apache/cxf/staxutils/SysPropExpandingStreamReader.java
> @@ -0,0 +1,90 @@
> +/**
> + * 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.staxutils;
> +
> +import javax.xml.stream.XMLStreamException;
> +import javax.xml.stream.XMLStreamReader;
> +
> +/**
> + * A wrapper around XMLStreamReader that expands system property references in element and attribute values.
> + * 
> + */
> +public class SysPropExpandingStreamReader extends DelegatingXMLStreamReader {
> +
> +    public static final String DELIMITER = "@";
> +    
> +    public SysPropExpandingStreamReader(XMLStreamReader reader) {
> +        super(reader);
> +    }
> +
> +    protected String expandSystemProperty(String value) {
> +        if (!isEmpty(value)) {
> +            final int startIndx = value.indexOf(DELIMITER);
> +            if (startIndx > -1) {
> +                final int endIndx = value.lastIndexOf(DELIMITER);
> +                if (endIndx > -1 && startIndx + 1 < endIndx) {
> +                    final String propName = value.substring(startIndx + 1, endIndx);
> +                    if (!isEmpty(propName)) {
> +                        final String envValue = System.getProperty(propName);
> +                        if (!isEmpty(envValue)) {
> +                            StringBuilder sb = new StringBuilder();
> +                            sb.append(value.substring(0, startIndx));
> +                            sb.append(envValue);
> +                            sb.append(value.substring(endIndx + 1));
> +                            value = sb.toString();
> +                        }
> +                    }
> +                }
> +            }
> +        }
> +        return value;
> +    }
> +
> +    private static boolean isEmpty(String str) {
> +        if (str != null) {
> +            int len = str.length();
> +            for (int x = 0; x < len; ++x) {
> +                if (str.charAt(x) > ' ') {
> +                    return false;
> +                }
> +            }
> +        }
> +        return true;
> +    }
> +
> +    @Override
> +    public String getElementText() throws XMLStreamException {
> +        return expandSystemProperty(super.getElementText());
> +    }
> +
> +    @Override
> +    public String getAttributeValue(String namespaceURI, String localName) {
> +        return expandSystemProperty(super.getAttributeValue(namespaceURI, localName));
> +    }
> +
> +    @Override
> +    public String getAttributeValue(int index) {
> +        return expandSystemProperty(super.getAttributeValue(index));
> +    }
> +
> +    @Override
> +    public String getText() {
> +        return expandSystemProperty(super.getText());
> +    }
> +}
> 
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java
> ----------------------------------------------------------------------
> diff --git a/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java b/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java
> new file mode 100644
> index 0000000..36c582f
> --- /dev/null
> +++ b/core/src/main/java/org/apache/cxf/staxutils/XMLStreamReaderWrapper.java
> @@ -0,0 +1,30 @@
> +/**
> + * 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.staxutils;
> +
> +import javax.xml.stream.XMLStreamReader;
> +
> +/**
> + * Interface for XMLStreamReader wrappers
> + * 
> + */
> +public interface XMLStreamReaderWrapper {
> +    
> +    public XMLStreamReader wrap(XMLStreamReader reader);
> +}
> 
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java
> ----------------------------------------------------------------------
> diff --git a/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java b/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java
> new file mode 100644
> index 0000000..59a188c
> --- /dev/null
> +++ b/core/src/test/java/org/apache/cxf/staxutils/SysPropExpandingStreamReaderTest.java
> @@ -0,0 +1,63 @@
> +/**
> + * 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.staxutils;
> +
> +import java.io.InputStream;
> +
> +import javax.xml.stream.XMLStreamReader;
> +
> +import org.apache.cxf.helpers.DOMUtils;
> +import org.junit.Assert;
> +import org.junit.Test;
> +import org.w3c.dom.Document;
> +import org.w3c.dom.Element;
> +
> +public class SysPropExpandingStreamReaderTest extends Assert {
> +
> +    @Test
> +    public void testSystemPropertyExpansion() throws Exception {
> +        final String barProp = System.setProperty("bar", "BAR-VALUE");
> +        final String blahProp = System.setProperty("blah", "BLAH-VALUE");
> +        try {
> +            XMLStreamReader reader = new SysPropExpandingStreamReader(StaxUtils.createXMLStreamReader(getTestStream("./resources/sysprops.xml")));
> +            Document doc = StaxUtils.read(reader);
> +            Element abc = DOMUtils.getChildrenWithName(doc.getDocumentElement(), "http://foo/bar", "abc").iterator().next();
> +            assertEquals("fooBAR-VALUEfoo", abc.getTextContent());
> +            Element def = DOMUtils.getChildrenWithName(doc.getDocumentElement(), "http://foo/bar", "def").iterator().next();
> +            assertEquals("ggggg", def.getTextContent());
> +            assertEquals("BLAH-VALUE2", def.getAttribute("myAttr"));
> +        } finally {
> +            if (barProp != null) {
> +                System.setProperty("bar", barProp);
> +            } else {
> +                System.clearProperty("bar");
> +            }
> +            if (blahProp != null) {
> +                System.setProperty("blah", blahProp);
> +            } else {
> +                System.clearProperty("blah");
> +            }
> +        }
> +    }
> +
> +    private InputStream getTestStream(String resource) {
> +        return getClass().getResourceAsStream(resource);
> +    }
> +}
> 
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml
> ----------------------------------------------------------------------
> diff --git a/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml b/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml
> new file mode 100644
> index 0000000..7a6ca81
> --- /dev/null
> +++ b/core/src/test/java/org/apache/cxf/staxutils/resources/sysprops.xml
> @@ -0,0 +1,23 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +<!--
> +  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.
> +-->
> +<ns:ssss xmlns:ns="http://foo/bar">
> +    <ns:abc>foo@bar@foo</ns:abc>
> +    <ns:def myAttr="@blah@2">ggggg</ns:def>
> +</ns:ssss>
> 
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
> ----------------------------------------------------------------------
> diff --git a/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java b/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
> index e4f368a..2f24f9f 100644
> --- a/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
> +++ b/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
> @@ -49,6 +49,9 @@ import org.apache.cxf.common.util.CacheMap;
> import org.apache.cxf.configuration.ConfiguredBeanLocator;
> import org.apache.cxf.service.model.ServiceSchemaInfo;
> import org.apache.cxf.staxutils.StaxUtils;
> +import org.apache.cxf.staxutils.DelegatingXMLStreamReader;
> +import org.apache.cxf.staxutils.SysPropExpandingStreamReader;
> +import org.apache.cxf.staxutils.XMLStreamReaderWrapper;
> import org.apache.cxf.wsdl.WSDLConstants;
> import org.apache.cxf.wsdl.WSDLExtensionLoader;
> import org.apache.cxf.wsdl.WSDLManager;
> @@ -71,6 +74,8 @@ public class WSDLManagerImpl implements WSDLManager {
>     private boolean disableSchemaCache;
> 
>     private Bus bus;
> +    
> +    private XMLStreamReaderWrapper xmlStreamReaderWrapper;
> 
>     public WSDLManagerImpl() throws BusException {
>         this(null);
> @@ -130,6 +135,9 @@ public class WSDLManagerImpl implements WSDLManager {
>         }
>     }
> 
> +    protected Bus getBus() {
> +        return bus;
> +    }
> 
>     /*
>      * (non-Javadoc)
> @@ -153,7 +161,11 @@ public class WSDLManagerImpl implements WSDLManager {
>                 return definitionsMap.get(url);
>             }
>         }
> -        return loadDefinition(url);
> +        Definition def = loadDefinition(url);
> +        synchronized (definitionsMap) {
> +            definitionsMap.put(url, def);
> +        }
> +        return def;
>     }
> 
>     public Definition getDefinition(Element el) throws WSDLException {
> @@ -179,7 +191,7 @@ public class WSDLManagerImpl implements WSDLManager {
>         }
>     }
> 
> -    private Definition loadDefinition(String url) throws WSDLException {
> +    protected Definition loadDefinition(String url) throws WSDLException {
>         WSDLReader reader = factory.newWSDLReader();
>         reader.setFeature("javax.wsdl.verbose", false);
>         reader.setFeature("javax.wsdl.importDocuments", true);
> @@ -195,6 +207,9 @@ public class WSDLManagerImpl implements WSDLManager {
>             XMLStreamReader xmlReader = null;
>             try {
>                 xmlReader = StaxUtils.createXMLStreamReader(src);
> +                if (xmlStreamReaderWrapper != null) {
> +                    xmlReader = xmlStreamReaderWrapper.wrap(xmlReader);
> +                }
>                 doc = StaxUtils.read(xmlReader, true);
>                 if (src.getSystemId() != null) {
>                     try {
> @@ -217,11 +232,12 @@ public class WSDLManagerImpl implements WSDLManager {
>             def = reader.readWSDL(wsdlLocator);
>         }
> 
> -        synchronized (definitionsMap) {
> -            definitionsMap.put(url, def);
> -        }
>         return def;
>     }
> +    
> +    public void setXMLStreamReaderWrapper(XMLStreamReaderWrapper wrapper) {
> +        this.xmlStreamReaderWrapper = wrapper;
> +    }
> 
>     private void addExtensionAttributeTypes(ExtensionRegistry extreg) {
>         // register types that are not of wsdl4j's default attribute type QName
> 
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
> ----------------------------------------------------------------------
> diff --git a/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java b/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
> index e3e5b0a..bcafef1 100644
> --- a/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
> +++ b/rt/wsdl/src/test/java/org/apache/cxf/wsdl11/WSDLManagerImplTest.java
> @@ -29,7 +29,10 @@ import javax.wsdl.Port;
> import javax.wsdl.PortType;
> import javax.wsdl.Service;
> import javax.xml.namespace.QName;
> +import javax.xml.stream.XMLStreamReader;
> 
> +import org.apache.cxf.staxutils.SysPropExpandingStreamReader;
> +import org.apache.cxf.staxutils.XMLStreamReaderWrapper;
> import org.junit.Assert;
> import org.junit.Test;
> 
> @@ -106,4 +109,29 @@ public class WSDLManagerImplTest extends Assert {
>         java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream(); 
>         builder.getWSDLFactory().newWSDLWriter().writeWSDL(def, bos);
>     }
> +    
> +    @Test
> +    public void testXMLStreamReaderWrapper() throws Exception {
> +        final String testProp = System.setProperty("org.apache.cxf.test.wsdl11.port", "99999");
> +        try {
> +            String wsdlUrl = getClass().getResource("hello_world_wrap.wsdl").toString();
> +            WSDLManagerImpl builder = new WSDLManagerImpl();
> +            builder.setXMLStreamReaderWrapper(new XMLStreamReaderWrapper() {
> +                @Override
> +                public XMLStreamReader wrap(XMLStreamReader reader) {
> +                    return new SysPropExpandingStreamReader(reader);
> +                }
> +            });
> +            Definition def = builder.getDefinition(wsdlUrl);
> +            java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream(); 
> +            builder.getWSDLFactory().newWSDLWriter().writeWSDL(def, bos);
> +            assertTrue(bos.toString().contains("http://localhost:99999/SoapContext/SoapPort"));
> +        } finally {
> +            if (testProp != null) {
> +                System.setProperty("org.apache.cxf.test.wsdl11.port", testProp);
> +            } else {
> +                System.clearProperty("org.apache.cxf.test.wsdl11.port");
> +            }
> +        }
> +    }
> }
> 
> http://git-wip-us.apache.org/repos/asf/cxf/blob/e0b7f355/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl
> ----------------------------------------------------------------------
> diff --git a/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl b/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl
> new file mode 100644
> index 0000000..d2f1d75
> --- /dev/null
> +++ b/rt/wsdl/src/test/resources/org/apache/cxf/wsdl11/hello_world_wrap.wsdl
> @@ -0,0 +1,161 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +<!--
> +  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.
> +-->
> +<wsdl:definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://apache.org/hello_world_soap_http" xmlns:x1="http://apache.org/hello_world_soap_http/types" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="HelloWorld" targetNamespace="http://apache.org/hello_world_soap_http">
> +    <wsdl:types>
> +        <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://apache.org/hello_world_soap_http/types" targetNamespace="http://apache.org/hello_world_soap_http/types" elementFormDefault="qualified">
> +            <simpleType name="MyStringType">
> +                <restriction base="string">
> +                    <maxLength value="30"/>
> +                </restriction>
> +            </simpleType>
> +            <element name="sayHi">
> +                <complexType/>
> +            </element>
> +            <element name="sayHiResponse">
> +                <complexType>
> +                    <sequence>
> +                        <element name="responseType" type="string"/>
> +                    </sequence>
> +                </complexType>
> +            </element>
> +            <element name="greetMe">
> +                <complexType>
> +                    <sequence>
> +                        <element name="requestType" type="tns:MyStringType"/>
> +                    </sequence>
> +                </complexType>
> +            </element>
> +            <element name="greetMeResponse">
> +                <complexType>
> +                    <sequence>
> +                        <element name="responseType" type="string"/>
> +                    </sequence>
> +                </complexType>
> +            </element>
> +            <element name="greetMeOneWay">
> +                <complexType>
> +                    <sequence>
> +                        <element name="requestType" type="string"/>
> +                    </sequence>
> +                </complexType>
> +            </element>
> +            <element name="pingMe">
> +                <complexType/>
> +            </element>
> +            <element name="pingMeResponse">
> +                <complexType/>
> +            </element>
> +            <element name="faultDetail">
> +                <complexType>
> +                    <sequence>
> +                        <element name="minor" type="short"/>
> +                        <element name="major" type="short"/>
> +                    </sequence>
> +                </complexType>
> +            </element>
> +        </schema>
> +    </wsdl:types>
> +    <wsdl:message name="sayHiRequest">
> +        <wsdl:part element="x1:sayHi" name="in"/>
> +    </wsdl:message>
> +    <wsdl:message name="sayHiResponse">
> +        <wsdl:part element="x1:sayHiResponse" name="out"/>
> +    </wsdl:message>
> +    <wsdl:message name="greetMeRequest">
> +        <wsdl:part element="x1:greetMe" name="in"/>
> +    </wsdl:message>
> +    <wsdl:message name="greetMeResponse">
> +        <wsdl:part element="x1:greetMeResponse" name="out"/>
> +    </wsdl:message>
> +    <wsdl:message name="greetMeOneWayRequest">
> +        <wsdl:part element="x1:greetMeOneWay" name="in"/>
> +    </wsdl:message>
> +    <wsdl:message name="pingMeRequest">
> +        <wsdl:part name="in" element="x1:pingMe"/>
> +    </wsdl:message>
> +    <wsdl:message name="pingMeResponse">
> +        <wsdl:part name="out" element="x1:pingMeResponse"/>
> +    </wsdl:message>
> +    <wsdl:message name="pingMeFault">
> +        <wsdl:part name="faultDetail" element="x1:faultDetail"/>
> +    </wsdl:message>
> +    <wsdl:portType name="Greeter">
> +        <wsdl:operation name="sayHi">
> +            <wsdl:input message="tns:sayHiRequest" name="sayHiRequest"/>
> +            <wsdl:output message="tns:sayHiResponse" name="sayHiResponse"/>
> +        </wsdl:operation>
> +        <wsdl:operation name="greetMe">
> +            <wsdl:input message="tns:greetMeRequest" name="greetMeRequest"/>
> +            <wsdl:output message="tns:greetMeResponse" name="greetMeResponse"/>
> +        </wsdl:operation>
> +        <wsdl:operation name="greetMeOneWay">
> +            <wsdl:input message="tns:greetMeOneWayRequest" name="greetMeOneWayRequest"/>
> +        </wsdl:operation>
> +        <wsdl:operation name="pingMe">
> +            <wsdl:input name="pingMeRequest" message="tns:pingMeRequest"/>
> +            <wsdl:output name="pingMeResponse" message="tns:pingMeResponse"/>
> +            <wsdl:fault name="pingMeFault" message="tns:pingMeFault"/>
> +        </wsdl:operation>
> +    </wsdl:portType>
> +    <wsdl:binding name="Greeter_SOAPBinding" type="tns:Greeter">
> +        <soap:binding xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
> +        <wsdl:operation name="sayHi">
> +            <soap:operation xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="" style="document"/>
> +            <wsdl:input name="sayHiRequest">
> +                <soap:body xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
> +            </wsdl:input>
> +            <wsdl:output name="sayHiResponse">
> +                <soap:body xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
> +            </wsdl:output>
> +        </wsdl:operation>
> +        <wsdl:operation name="greetMe">
> +            <soap:operation xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="" style="document"/>
> +            <wsdl:input name="greetMeRequest">
> +                <soap:body xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
> +            </wsdl:input>
> +            <wsdl:output name="greetMeResponse">
> +                <soap:body xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
> +            </wsdl:output>
> +        </wsdl:operation>
> +        <wsdl:operation name="greetMeOneWay">
> +            <soap:operation xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="" style="document"/>
> +            <wsdl:input name="greetMeOneWayRequest">
> +                <soap:body xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
> +            </wsdl:input>
> +        </wsdl:operation>
> +        <wsdl:operation name="pingMe">
> +            <soap:operation xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" style="document"/>
> +            <wsdl:input>
> +                <soap:body xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
> +            </wsdl:input>
> +            <wsdl:output>
> +                <soap:body xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
> +            </wsdl:output>
> +            <wsdl:fault name="pingMeFault">
> +                <soap:fault xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="pingMeFault" use="literal"/>
> +            </wsdl:fault>
> +        </wsdl:operation>
> +    </wsdl:binding>
> +    <wsdl:service name="SOAPService">
> +        <wsdl:port binding="tns:Greeter_SOAPBinding" name="SoapPort">
> +            <soap:address xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" location="http://localhost:@org.apache.cxf.test.wsdl11.port@/SoapContext/SoapPort"/>
> +        </wsdl:port>
> +    </wsdl:service>
> +</wsdl:definitions>
> 

-- 
Daniel Kulp
dkulp@apache.org - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com