cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From serg...@apache.org
Subject svn commit: r797124 - in /cxf/branches/2.2.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ systests/src/test/java/org/apache/cxf/systest/jaxrs/resources/
Date Thu, 23 Jul 2009 16:04:26 GMT
Author: sergeyb
Date: Thu Jul 23 16:04:25 2009
New Revision: 797124

URL: http://svn.apache.org/viewvc?rev=797124&view=rev
Log:
Merged revisions 797117 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r797117 | sergeyb | 2009-07-23 16:53:59 +0100 (Thu, 23 Jul 2009) | 1 line
  
  JAXRS: adding AegisJSONProvider plus few more jaxb/json tests
........

Added:
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisJSONProvider.java
      - copied unchanged from r797117, cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisJSONProvider.java
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java
      - copied unchanged from r797117, cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/book2.xml
      - copied unchanged from r797117, cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/book2.xml
Modified:
    cxf/branches/2.2.x-fixes/   (props changed)
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractAegisProvider.java
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisElementProvider.java
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisProviderTest.java
    cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JSONProviderTest.java
    cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/resources/expected_add_book_aegis.txt

Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jul 23 16:04:25 2009
@@ -1 +1 @@
-/cxf/trunk:782728-782730,783097,783294,783396,784059,784181-784184,784893,784895,785279-785282,785468,785621,785624,785651,785734,785866,786142,786271-786272,786395,786512,786514,786582-786583,786638,786647,786850,787200,787269,787277-787279,787290-787291,787305,787323,787366,787849,788030,788060,788187,788444,788451,788703,788752,788774,788819-788820,789013,789371,789387,789420,789527-789530,789704-789705,789788,789811,789896-789901,790074,790094,790134,790188,790294,790553,790637-790644,790868,791301,791354,791538,791753,791947,792007,792096,792183,792261-792265,792271,792604,792683-792685,792975,792985,793059,793570,794297,794396,794680,794728,794771,794778-794780,794892,795044,795104,795160,795583,795907,796022-796023,796352,796593,796741,796994-796997
+/cxf/trunk:782728-782730,783097,783294,783396,784059,784181-784184,784893,784895,785279-785282,785468,785621,785624,785651,785734,785866,786142,786271-786272,786395,786512,786514,786582-786583,786638,786647,786850,787200,787269,787277-787279,787290-787291,787305,787323,787366,787849,788030,788060,788187,788444,788451,788703,788752,788774,788819-788820,789013,789371,789387,789420,789527-789530,789704-789705,789788,789811,789896-789901,790074,790094,790134,790188,790294,790553,790637-790644,790868,791301,791354,791538,791753,791947,792007,792096,792183,792261-792265,792271,792604,792683-792685,792975,792985,793059,793570,794297,794396,794680,794728,794771,794778-794780,794892,795044,795104,795160,795583,795907,796022-796023,796352,796593,796741,796994-796997,797117

Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractAegisProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractAegisProvider.java?rev=797124&r1=797123&r2=797124&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractAegisProvider.java
(original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractAegisProvider.java
Thu Jul 23 16:04:25 2009
@@ -41,8 +41,18 @@
     implements MessageBodyReader<Object>, MessageBodyWriter<Object> {
     
     private static Map<Class<?>, AegisContext> classContexts = new WeakHashMap<Class<?>,
AegisContext>();
+    protected boolean writeXsiType = true;
+    protected boolean readXsiType = true;
+    @Context 
+    protected ContextResolver<AegisContext> resolver;
     
-    @Context protected ContextResolver<AegisContext> resolver;
+    public void setWriteXsiType(boolean write) {
+        writeXsiType = write;
+    }
+    
+    public void setReadXsiType(boolean read) {
+        readXsiType = read;
+    }
     
     public boolean isWriteable(Class<?> type, Type genericType, Annotation[] anns,
MediaType mt) {
         return isSupported(type, genericType, anns);
@@ -94,8 +104,8 @@
             AegisContext context = classContexts.get(type);
             if (context == null) {
                 context = new AegisContext();
-                context.setWriteXsiTypes(true); // needed, since we know no element/type
maps.
-                context.setReadXsiTypes(true);
+                context.setWriteXsiTypes(writeXsiType); 
+                context.setReadXsiTypes(readXsiType);
                 Set<Class<?>> rootClasses = new HashSet<Class<?>>();
                 rootClasses.add(type);
                 if (!(genericType instanceof Class)) {
@@ -119,4 +129,8 @@
     protected boolean isSupported(Class<?> type, Type genericType, Annotation[] annotations)
{
         return true;
     }
+    
+    void clearContexts() {
+        classContexts.clear();
+    }
 }

Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java?rev=797124&r1=797123&r2=797124&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
(original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
Thu Jul 23 16:04:25 2009
@@ -87,6 +87,23 @@
     private Schema schema;
     private String collectionWrapperName;
     private Map<String, String> collectionWrapperMap;
+    private List<String> jaxbElementClassNames;
+    
+    public void setJaxbElementClassNames(List<String> names) {
+        jaxbElementClassNames = names;
+    }
+
+    @SuppressWarnings("unchecked")
+    protected Object convertToJaxbElementIfNeeded(Object obj, Class<?> cls, Type genericType)

+        throws Exception {
+        if (jaxbElementClassNames != null && jaxbElementClassNames.contains(cls.getName()))
{
+            QName name = getJaxbQName(cls, genericType, obj, false);
+            if (name != null) {
+                return new JAXBElement(name, cls, null, obj);
+            }
+        }
+        return obj;
+    }
     
     public void setCollectionWrapperName(String wName) {
         collectionWrapperName = wName;

Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisElementProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisElementProvider.java?rev=797124&r1=797123&r2=797124&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisElementProvider.java
(original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisElementProvider.java
Thu Jul 23 16:04:25 2009
@@ -44,21 +44,24 @@
 @Provider
 @Produces({"application/xml", "application/*+xml", "text/xml" })
 @Consumes({"application/xml", "application/*+xml", "text/xml" })
-public final class AegisElementProvider extends AbstractAegisProvider  {
+public class AegisElementProvider extends AbstractAegisProvider  {
     
     public Object readFrom(Class<Object> type, Type genericType, Annotation[] annotations,
MediaType m, 
         MultivaluedMap<String, String> headers, InputStream is) 
         throws IOException {
         AegisContext context = getAegisContext(type, genericType);
         AegisReader<XMLStreamReader> aegisReader = context.createXMLStreamReader();
-        XMLStreamReader xmlStreamReader = StaxUtils.createXMLStreamReader(is);
         try {
+            XMLStreamReader xmlStreamReader = createStreamReader(type, is);
             return aegisReader.read(xmlStreamReader);
         } catch (Exception e) {
             throw new WebApplicationException(e);
         }
     }
 
+    protected XMLStreamReader createStreamReader(Class<?> type, InputStream is) throws
Exception {
+        return StaxUtils.createXMLStreamReader(is);
+    }
     
     public void writeTo(Object obj, Class<?> type, Type genericType, Annotation[] anns,
 
         MediaType m, MultivaluedMap<String, Object> headers, OutputStream os) 
@@ -69,13 +72,19 @@
         AegisContext context = getAegisContext(type, genericType);
         org.apache.cxf.aegis.type.Type aegisType = TypeUtil.getWriteTypeStandalone(context,
obj, null);
         AegisWriter<XMLStreamWriter> aegisWriter = context.createXMLStreamWriter();
-        XMLStreamWriter xmlStreamWriter = StaxUtils.createXMLStreamWriter(os);
         try {
+            XMLStreamWriter xmlStreamWriter = createStreamWriter(type, os);
             // use type qname as element qname?
+            xmlStreamWriter.writeStartDocument();
             aegisWriter.write(obj, aegisType.getSchemaType(), false, xmlStreamWriter, aegisType);
+            xmlStreamWriter.writeEndDocument();
             xmlStreamWriter.close();
         } catch (Exception e) {
             throw new WebApplicationException(e);
         }
     }
+    
+    protected XMLStreamWriter createStreamWriter(Class<?> type, OutputStream os) throws
Exception {
+        return StaxUtils.createXMLStreamWriter(os);
+    }
 }

Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java?rev=797124&r1=797123&r2=797124&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
(original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
Thu Jul 23 16:04:25 2009
@@ -72,7 +72,6 @@
     private Map<String, Object> mProperties = new HashMap<String, Object>();
     private boolean enableStreaming;
     private ValidationEventHandler eventHandler;
-    private List<String> jaxbElementClassNames;
     
     @Override
     public boolean isReadable(Class<?> type, Type genericType, Annotation[] anns, MediaType
mt) {
@@ -92,10 +91,6 @@
         super.setContext(mc);
     }
     
-    public void setJaxbElementClassNames(List<String> names) {
-        jaxbElementClassNames = names;
-    }
-    
     public void setValidationHandler(ValidationEventHandler handler) {
         eventHandler = handler;
     }
@@ -282,15 +277,9 @@
     
     protected void marshal(Object obj, Class<?> cls, Type genericType, 
                            String enc, OutputStream os, MediaType mt) throws Exception {
-        
-        if (jaxbElementClassNames != null && jaxbElementClassNames.contains(cls.getName()))
{
-            QName name = getJaxbQName(cls, genericType, obj, false);
-            if (name != null) {
-                @SuppressWarnings("unchecked")
-                JAXBElement el = new JAXBElement(name, cls, null, obj);
-                obj = el;
-                cls = JAXBElement.class;
-            }
+        obj = convertToJaxbElementIfNeeded(obj, cls, genericType);
+        if (obj instanceof JAXBElement && cls != JAXBElement.class) {
+            cls = JAXBElement.class;
         }
         
         Marshaller ms = createMarshaller(obj, cls, genericType, enc);

Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java?rev=797124&r1=797123&r2=797124&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java
(original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java
Thu Jul 23 16:04:25 2009
@@ -328,6 +328,12 @@
     
     protected void marshal(Object actualObject, Class<?> actualClass, 
                            Type genericType, String enc, OutputStream os) throws Exception
{
+        
+        actualObject = convertToJaxbElementIfNeeded(actualObject, actualClass, genericType);
+        if (actualObject instanceof JAXBElement && actualClass != JAXBElement.class)
{
+            actualClass = JAXBElement.class;
+        }
+        
         Marshaller ms = createMarshaller(actualObject, actualClass, genericType, enc);
         marshal(ms, actualObject, actualClass, genericType, enc, os, false);
     }
@@ -388,7 +394,10 @@
         }
 
         public void writeCharacters(String text) throws XMLStreamException {
-            if (!lastWriteChars) {
+            if (!lastWriteChars || text.trim().length() > 0) {
+                if (lastWriteChars) {
+                    text = text.trim();
+                }
                 super.writeCharacters(text);
                 lastWriteChars = true;
             }

Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisProviderTest.java?rev=797124&r1=797123&r2=797124&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisProviderTest.java
(original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisProviderTest.java
Thu Jul 23 16:04:25 2009
@@ -37,7 +37,8 @@
 public class AegisProviderTest extends Assert {
     
     private static final String SIMPLE_BEAN_XML 
-        = "<ns1:AegisTestBean xmlns:ns1=\"http://fortest.jaxrs.cxf.apache.org\" "
+        = "<?xml version='1.0' encoding='UTF-8'?><ns1:AegisTestBean "
+            + "xmlns:ns1=\"http://fortest.jaxrs.cxf.apache.org\" "
             + "xmlns:ns2=\"http://www.w3.org/2001/XMLSchema-instance\" ns2:type=\"ns1:AegisTestBean\">"
             + "<ns1:boolValue>true</ns1:boolValue><ns1:strValue>hovercraft</ns1:strValue>"
             + "</ns1:AegisTestBean>";

Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JSONProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JSONProviderTest.java?rev=797124&r1=797123&r2=797124&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JSONProviderTest.java
(original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JSONProviderTest.java
Thu Jul 23 16:04:25 2009
@@ -44,6 +44,7 @@
 import org.apache.cxf.jaxrs.resources.Book;
 import org.apache.cxf.jaxrs.resources.CollectionsResource;
 import org.apache.cxf.jaxrs.resources.ManyTags;
+import org.apache.cxf.jaxrs.resources.SuperBook;
 import org.apache.cxf.jaxrs.resources.TagVO;
 import org.apache.cxf.jaxrs.resources.TagVO2;
 import org.apache.cxf.jaxrs.resources.Tags;
@@ -298,16 +299,24 @@
     
     @Test
     public void testWriteIgnoreMixedContent() throws Exception {
-        doTestMixedContent("{\"Book\":{\"name\":\"CXF\",\"id\":125}}", true);
+        doTestMixedContent("{\"Book\":{\"name\":\"CXF\",\"id\":125}}",
+                           true, "book.xml");
+    }
+    
+    @Test
+    public void testWriteIgnoreMixedContent2() throws Exception {
+        doTestMixedContent("{\"Book\":{\"name\":\"CXF\",\"id\":125,\"$\":\"books\"}}",
+                           true, "book2.xml");
     }
     
     @Test
     public void testWriteMixedContent() throws Exception {
-        doTestMixedContent("{\"Book\":{\"name\":\"CXF\",\"id\":125,\"$\":\"\\n     \\n\"}}",
false);
+        doTestMixedContent("{\"Book\":{\"name\":\"CXF\",\"id\":125,\"$\":\"\\n     \\n\"}}",
+                           false, "book.xml");
     }
     
-    private void doTestMixedContent(String data, boolean ignore) throws Exception {
-        InputStream is = getClass().getResourceAsStream("book.xml");
+    private void doTestMixedContent(String data, boolean ignore, String fileName) throws
Exception {
+        InputStream is = getClass().getResourceAsStream(fileName);
         JAXBContext context = JAXBContext.newInstance(new Class[]{Books.class, Book.class});
         Unmarshaller um = context.createUnmarshaller();
         JAXBElement jaxbEl = um.unmarshal(new StreamSource(is), Books.class);
@@ -322,6 +331,44 @@
     }
     
     @Test
+    public void testWriteListOfDerivedTypes() throws Exception {
+        JSONProvider p = new JSONProvider();
+        Map<String, String> namespaceMap = new HashMap<String, String>();
+        namespaceMap.put("http://www.w3.org/2001/XMLSchema-instance", "xsins");
+        p.setNamespaceMap(namespaceMap);
+        Books2 books2 = new Books2();
+        books2.setBooks(Collections.singletonList(
+                            new SuperBook("CXF Rocks", 123L, 124L)));
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        
+        p.writeTo(books2, (Class)Books2.class, Books2.class, Books2.class.getAnnotations(),

+                  MediaType.APPLICATION_JSON_TYPE, new MetadataMap<String, Object>(),
os);
+        String s = os.toString();
+        String data = "{\"books2\":{\"books\":{\"@xsins.type\":\"superBook\",\"id\":123,"
+            + "\"name\":\"CXF Rocks\",\"superId\":124}}}";
+        assertEquals(data, s);
+    }
+    
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testReadListOfDerivedTypes() throws Exception {
+        JSONProvider p = new JSONProvider();
+        Map<String, String> namespaceMap = new HashMap<String, String>();
+        namespaceMap.put("http://www.w3.org/2001/XMLSchema-instance", "xsins");
+        p.setNamespaceMap(namespaceMap);
+        String data = "{\"books2\":{\"books\":{\"@xsins.type\":\"superBook\",\"id\":123,"
+            + "\"name\":\"CXF Rocks\",\"superId\":124}}}";
+        byte[] bytes = data.getBytes();
+        Object books2Object = p.readFrom((Class)Books2.class, null, null, 
+                                          null, null, new ByteArrayInputStream(bytes));
+        Books2 books = (Books2)books2Object;
+        List<? extends Book> list = books.getBooks();
+        assertEquals(1, list.size());
+        SuperBook book = (SuperBook)list.get(0);
+        assertEquals(124L, book.getSuperId());
+    }
+    
+    @Test
     public void testWriteToListWithManyValues() throws Exception {
         JSONProvider p = new JSONProvider();
         Tags tags = new Tags();
@@ -394,4 +441,17 @@
         @XmlAnyElement(lax = true)
         protected List<Object> books;
     }
+    
+    @XmlRootElement()
+    public static class Books2 {
+        protected List<? extends Book> books;
+        
+        public void setBooks(List<? extends Book> list) {
+            books = list;
+        }
+        
+        public List<? extends Book> getBooks() {
+            return books;
+        }
+    }
 }

Modified: cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/resources/expected_add_book_aegis.txt
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/resources/expected_add_book_aegis.txt?rev=797124&r1=797123&r2=797124&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/resources/expected_add_book_aegis.txt
(original)
+++ cxf/branches/2.2.x-fixes/systests/src/test/java/org/apache/cxf/systest/jaxrs/resources/expected_add_book_aegis.txt
Thu Jul 23 16:04:25 2009
@@ -1 +1 @@
-<ns1:Book xmlns:ns1="http://jaxrs.systest.cxf.apache.org" xmlns:ns2="http://www.w3.org/2001/XMLSchema-instance"
ns2:type="ns1:Book"><ns1:id>124</ns1:id><ns1:name>CXF in Action - 2</ns1:name></ns1:Book>
\ No newline at end of file
+<?xml version='1.0' encoding='UTF-8'?><ns1:Book xmlns:ns1="http://jaxrs.systest.cxf.apache.org"
xmlns:ns2="http://www.w3.org/2001/XMLSchema-instance" ns2:type="ns1:Book"><ns1:id>124</ns1:id><ns1:name>CXF
in Action - 2</ns1:name></ns1:Book>
\ No newline at end of file



Mime
View raw message