cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Kulp <dk...@apache.org>
Subject Re: git commit: [CXF-5866] Adding XMLStreamReaderWrapper to WSDLManagerImpl and providing a XMLStreamReader wrapper that resolves system properties
Date Thu, 10 Jul 2014 12:29:05 GMT

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 <asoldano@redhat.com>
> Authored: Thu Jul 10 00:04:09 2014 +0200
> Committer: Alessio Soldano <asoldano@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


Mime
View raw message