You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2009/03/13 19:02:34 UTC

svn commit: r753333 - in /cxf/trunk: rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ rt/frontend/jaxrs/src/test/java...

Author: sergeyb
Date: Fri Mar 13 18:02:21 2009
New Revision: 753333

URL: http://svn.apache.org/viewvc?rev=753333&view=rev
Log:
JAXRS : enhancing XMLSource, adding omitted JAXRSClientFactoryBeanTest

Added:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/XMLSource.java   (with props)
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java   (with props)
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/XMLSourceTest.java   (with props)
Removed:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/XMLSource.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/XMLSourceTest.java
Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/SourceProvider.java
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java?rev=753333&r1=753332&r2=753333&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java Fri Mar 13 18:02:21 2009
@@ -121,7 +121,8 @@
         return context != null ? context : getClassContext(type);
     }
     
-    private JAXBContext getClassContext(Class<?> type) throws JAXBException {
+    // TODO : move this method to a dedicated JAXBContextRegistry class
+    public JAXBContext getClassContext(Class<?> type) throws JAXBException {
         synchronized (classContexts) {
             JAXBContext context = classContexts.get(type);
             if (context == null) {
@@ -132,7 +133,8 @@
         }
     }
     
-    protected JAXBContext getPackageContext(Class<?> type) {
+    //  TODO : move this method to a dedicated JAXBContextRegistry class
+    public JAXBContext getPackageContext(Class<?> type) {
         if (type == null) {
             return null;
         }

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/SourceProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/SourceProvider.java?rev=753333&r1=753332&r2=753333&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/SourceProvider.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/SourceProvider.java Fri Mar 13 18:02:21 2009
@@ -45,7 +45,7 @@
 
 import org.w3c.dom.Document;
 
-import org.apache.cxf.jaxrs.client.XMLSource;
+import org.apache.cxf.jaxrs.utils.XMLSource;
 
 @Provider
 @Produces({"application/xml", "text/xml" })

Added: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/XMLSource.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/XMLSource.java?rev=753333&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/XMLSource.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/XMLSource.java Fri Mar 13 18:02:21 2009
@@ -0,0 +1,190 @@
+/**
+ * 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.jaxrs.utils;
+
+import java.io.InputStream;
+import java.lang.reflect.Array;
+import java.net.URI;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.transform.Source;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import org.xml.sax.InputSource;
+
+import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.jaxrs.provider.JAXBElementProvider;
+
+/**
+ * Utiliity class for manipulating XML response using XPath and XSLT
+ *
+ */
+public class XMLSource {
+    
+    private static final String XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace"; 
+    
+    private InputSource source; 
+    private RuntimeException exceptionToThrow;
+    
+    public XMLSource(InputStream is) {
+        source = new InputSource(is);
+    }
+    
+    public void setException(RuntimeException ex) {
+        exceptionToThrow = ex; 
+    }
+    
+    public <T> T getNode(String expression, Class<T> cls) {
+        return getNode(expression, CastUtils.cast(Collections.emptyMap(), String.class, String.class), cls);
+    }
+    
+    public <T> T getNode(String expression, Map<String, String> namespaces, Class<T> cls) {
+        XPath xpath = XPathFactory.newInstance().newXPath();
+        xpath.setNamespaceContext(new NamespaceContextImpl(namespaces));
+        try {
+            Node node = (Node)xpath.evaluate(expression, source, XPathConstants.NODE);
+            if (node == null) {
+                if (exceptionToThrow != null) {
+                    throw exceptionToThrow;
+                }
+                return null;
+            }
+            DOMSource ds = new DOMSource(node);
+            return readFromSource(ds, cls);
+        } catch (XPathExpressionException ex) {
+            throw new IllegalArgumentException("Illegal XPath expression '" + expression + "'", ex);
+        }
+    }
+    
+    public <T> T[] getNodes(String expression, Class<T> cls) {
+        return getNodes(expression, CastUtils.cast(Collections.emptyMap(), String.class, String.class), cls);
+    }
+    
+    @SuppressWarnings("unchecked")
+    public <T> T[] getNodes(String expression, Map<String, String> namespaces, Class<T> cls) {
+        XPath xpath = XPathFactory.newInstance().newXPath();
+        xpath.setNamespaceContext(new NamespaceContextImpl(namespaces));
+        try {
+            NodeList nodes = (NodeList)xpath.evaluate(expression, source, XPathConstants.NODESET);
+            if (nodes == null || nodes.getLength() == 0) {
+                if (exceptionToThrow != null) {
+                    throw exceptionToThrow;
+                }
+                return null;
+            }
+            T[] values = (T[])Array.newInstance(cls, nodes.getLength());
+ 
+            for (int i = 0; i < nodes.getLength(); i++) {
+                DOMSource ds = new DOMSource(nodes.item(i));
+                values[i] = readFromSource(ds, cls);
+            }
+                  
+            return values;
+            
+        } catch (XPathExpressionException ex) {
+            throw new IllegalArgumentException("Illegal XPath expression '" + expression + "'", ex);
+        }
+    }
+
+    public URI getLink(String expression) {
+        return getLink(expression, CastUtils.cast(Collections.emptyMap(), String.class, String.class));
+    }
+    
+    public URI getLink(String expression, Map<String, String> namespaces) {
+        String value = getValue(expression, namespaces);
+        return value == null ? null : URI.create(value);
+    }
+    
+    public URI getBaseURI() {
+        Map<String, String> map = new LinkedHashMap<String, String>();
+        map.put("xml", XML_NAMESPACE);
+        return getLink("/*/@xml:base", map);
+    }
+    
+    public String getValue(String expression) {
+        return getValue(expression, CastUtils.cast(Collections.emptyMap(), String.class, String.class));
+    }
+    
+    public String getValue(String expression, Map<String, String> namespaces) {
+        XPath xpath = XPathFactory.newInstance().newXPath();
+        xpath.setNamespaceContext(new NamespaceContextImpl(namespaces));
+        try {
+            return (String)xpath.evaluate(expression, source, XPathConstants.STRING);
+        } catch (XPathExpressionException ex) {
+            throw new IllegalArgumentException("Illegal XPath expression '" + expression + "'", ex);
+        }
+    }
+    
+    private static class NamespaceContextImpl implements NamespaceContext {
+        
+        private Map<String, String> namespaces;
+        
+        public NamespaceContextImpl(Map<String, String> namespaces) {
+            this.namespaces = namespaces;    
+        }
+
+        public String getNamespaceURI(String prefix) {
+            return namespaces.get(prefix);
+        }
+
+        public String getPrefix(String namespace) {
+            for (Map.Entry<String, String> entry : namespaces.entrySet()) {
+                if (entry.getValue().equals(namespace)) {
+                    return entry.getKey();
+                }
+            }
+            return null;
+        }
+
+        public Iterator getPrefixes(String namespace) {
+            String prefix = namespaces.get(namespace);
+            if (prefix == null) {
+                return null;
+            }
+            return Collections.singletonList(prefix).iterator();
+        }
+    }
+    
+    private <T> T readFromSource(Source s, Class<T> cls) {
+        try {
+            JAXBElementProvider provider = new JAXBElementProvider();
+            JAXBContext c = provider.getPackageContext(cls);
+            if (c == null) {
+                c = provider.getClassContext(cls);
+            }
+            Unmarshaller u = c.createUnmarshaller();
+            return cls.cast(u.unmarshal(s));
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+}

Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/XMLSource.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/XMLSource.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java?rev=753333&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java Fri Mar 13 18:02:21 2009
@@ -0,0 +1,71 @@
+/**
+ * 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.jaxrs.client;
+
+import org.apache.cxf.jaxrs.resources.BookStore;
+import org.apache.cxf.jaxrs.resources.BookStoreSubresourcesOnly;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class JAXRSClientFactoryBeanTest extends Assert {
+
+    @Test
+    public void testCreateClient() throws Exception {
+        JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
+        bean.setAddress("http://bar");
+        bean.setResourceClass(BookStore.class);
+        assertTrue(bean.create() instanceof BookStore);
+    }
+    
+    @Test
+    public void testTemplateInRootPathInherit() throws Exception {
+        JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
+        bean.setAddress("http://bar");
+        bean.setResourceClass(BookStoreSubresourcesOnly.class);
+        BookStoreSubresourcesOnly store = bean.create(BookStoreSubresourcesOnly.class, 1, 2, 3);
+        BookStoreSubresourcesOnly store2 = store.getItself();
+        assertEquals("http://bar/bookstore/1/2/3/sub1", 
+                     WebClient.client(store2).getCurrentURI().toString());
+    }
+    
+    @Test
+    public void testTemplateInRootReplace() throws Exception {
+        JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
+        bean.setAddress("http://bar");
+        bean.setResourceClass(BookStoreSubresourcesOnly.class);
+        BookStoreSubresourcesOnly store = bean.create(BookStoreSubresourcesOnly.class, 1, 2, 3);
+        BookStoreSubresourcesOnly store2 = store.getItself2("11", "33");
+        assertEquals("http://bar/bookstore/11/2/33/sub2", 
+                     WebClient.client(store2).getCurrentURI().toString());
+    }
+    
+    @Test
+    public void testTemplateInRootAppend() throws Exception {
+        JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
+        bean.setAddress("http://bar");
+        bean.setResourceClass(BookStoreSubresourcesOnly.class);
+        BookStoreSubresourcesOnly store = bean.create(BookStoreSubresourcesOnly.class, 1, 2, 3);
+        BookStoreSubresourcesOnly store2 = store.getItself3("id4");
+        assertEquals("http://bar/bookstore/1/2/3/id4/sub3", 
+                     WebClient.client(store2).getCurrentURI().toString());
+    }
+    
+}

Propchange: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBeanTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/XMLSourceTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/XMLSourceTest.java?rev=753333&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/XMLSourceTest.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/XMLSourceTest.java Fri Mar 13 18:02:21 2009
@@ -0,0 +1,145 @@
+/**
+ * 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.jaxrs.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.net.URI;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class XMLSourceTest extends Assert {
+
+    @Test
+    public void testGetNodeNoNamespace() {
+        InputStream is = new ByteArrayInputStream("<foo><bar/></foo>".getBytes());
+        XMLSource xp = new XMLSource(is);
+        Bar bar = xp.getNode("/foo/bar", Bar.class);
+        assertNotNull(bar);
+    }
+    
+    @Test
+    public void testGetNodeNamespace() {
+        String data = "<x:foo xmlns:x=\"http://baz\"><x:bar/></x:foo>"; 
+        InputStream is = new ByteArrayInputStream(data.getBytes());
+        XMLSource xp = new XMLSource(is);
+        Map<String, String> map = new LinkedHashMap<String, String>();
+        map.put("x", "http://baz");
+        Bar2 bar = xp.getNode("/x:foo/x:bar", map, Bar2.class);
+        assertNotNull(bar);
+    }
+    
+    @Test
+    public void testGetNodeNamespace2() {
+        String data = "<z:foo xmlns:z=\"http://baz\"><z:bar/></z:foo>"; 
+        InputStream is = new ByteArrayInputStream(data.getBytes());
+        XMLSource xp = new XMLSource(is);
+        Map<String, String> map = new LinkedHashMap<String, String>();
+        map.put("x", "http://baz");
+        Bar2 bar = xp.getNode("/x:foo/x:bar", map, Bar2.class);
+        assertNotNull(bar);
+    }
+    
+    @Test
+    public void testGetNodeNamespace3() {
+        String data = "<x:foo xmlns:x=\"http://foo\" xmlns:z=\"http://baz\"><z:bar/></x:foo>"; 
+        InputStream is = new ByteArrayInputStream(data.getBytes());
+        XMLSource xp = new XMLSource(is);
+        Map<String, String> map = new LinkedHashMap<String, String>();
+        map.put("x", "http://foo");
+        map.put("y", "http://baz");
+        Bar2 bar = xp.getNode("/x:foo/y:bar", map, Bar2.class);
+        assertNotNull(bar);
+    }
+    
+    @Test
+    public void testGetNodeDefaultNamespace() {
+        String data = "<foo xmlns=\"http://baz\"><bar/></foo>"; 
+        InputStream is = new ByteArrayInputStream(data.getBytes());
+        XMLSource xp = new XMLSource(is);
+        Map<String, String> map = new LinkedHashMap<String, String>();
+        map.put("x", "http://baz");
+        Bar2 bar = xp.getNode("/x:foo/x:bar", map, Bar2.class);
+        assertNotNull(bar);
+    }
+
+    @Test
+    public void testGetNodesNoNamespace() {
+        InputStream is = new ByteArrayInputStream("<foo><bar/><bar/></foo>".getBytes());
+        XMLSource xp = new XMLSource(is);
+        Bar[] bars = xp.getNodes("/foo/bar", Bar.class);
+        assertNotNull(bars);
+        assertEquals(2, bars.length);
+        assertNotSame(bars[0], bars[1]);
+    }
+    
+    @Test
+    public void testGetNodesNamespace() {
+        String data = "<x:foo xmlns:x=\"http://baz\"><x:bar/><x:bar/></x:foo>"; 
+        InputStream is = new ByteArrayInputStream(data.getBytes());
+        XMLSource xp = new XMLSource(is);
+        Map<String, String> map = new LinkedHashMap<String, String>();
+        map.put("x", "http://baz");
+        Bar2[] bars = xp.getNodes("/x:foo/x:bar", map, Bar2.class);
+        assertNotNull(bars);
+        assertNotNull(bars);
+        assertEquals(2, bars.length);
+        assertNotSame(bars[0], bars[1]);
+    }
+    
+    @Test
+    public void testGetStringValue() {
+        InputStream is = new ByteArrayInputStream("<foo><bar/><bar id=\"2\"/></foo>".getBytes());
+        XMLSource xp = new XMLSource(is);
+        String value = xp.getValue("/foo/bar/@id");
+        assertEquals("2", value);
+    }
+    
+    @Test
+    public void testGetRelativeLink() {
+        InputStream is = new ByteArrayInputStream("<foo><bar/><bar href=\"/2\"/></foo>".getBytes());
+        XMLSource xp = new XMLSource(is);
+        URI value = xp.getLink("/foo/bar/@href");
+        assertEquals("/2", value.toString());
+    }
+    
+    @Test
+    public void testBaseURI() {
+        InputStream is = new ByteArrayInputStream(
+            "<foo xml:base=\"http://bar\"><bar/><bar href=\"/2\"/></foo>".getBytes());
+        XMLSource xp = new XMLSource(is);
+        URI value = xp.getBaseURI();
+        assertEquals("http://bar", value.toString());
+    }
+    
+    @XmlRootElement
+    private static class Bar {
+        
+    }
+    
+    @XmlRootElement(name = "bar", namespace = "http://baz")
+    private static class Bar2 {
+        
+    }
+}

Propchange: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/XMLSourceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/XMLSourceTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java?rev=753333&r1=753332&r2=753333&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSSoapBookTest.java Fri Mar 13 18:02:21 2009
@@ -44,9 +44,9 @@
 import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
 import org.apache.cxf.jaxrs.client.ResponseExceptionMapper;
 import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.cxf.jaxrs.client.XMLSource;
 import org.apache.cxf.jaxrs.ext.form.Form;
 import org.apache.cxf.jaxrs.impl.MetadataMap;
+import org.apache.cxf.jaxrs.utils.XMLSource;
 import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
 
 import org.junit.BeforeClass;