That definitely sounds good. I am so sick of system properties for configuration. On 10/07/2014 10:30 PM, "Daniel Kulp" <[email protected]> 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, [email protected] 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 <[email protected]> > > Authored: Thu Jul 10 00:04:09 2014 +0200 > > Committer: Alessio Soldano <[email protected]> > > 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 > [email protected] - http://dankulp.com/blog > Talend Community Coder - http://coders.talend.com > >
