cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dk...@apache.org
Subject svn commit: r599924 - in /incubator/cxf/branches/2.0.x-fixes: ./ rt/core/src/main/java/org/apache/cxf/databinding/source/ rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/ rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dyn...
Date Fri, 30 Nov 2007 19:29:23 GMT
Author: dkulp
Date: Fri Nov 30 11:29:15 2007
New Revision: 599924

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

........
  r598856 | bimargulies | 2007-11-27 22:05:10 -0500 (Tue, 27 Nov 2007) | 6 lines
  
  Set up namespace control conveniently for JAXB. The JAXBDataBinding now 
  has a property, just like Aegis, that provides a map from URI to prefix.
  This is used by JAXB on the wire. Those users who want to tweak namespace
  prefixes are now good to go.
........

Added:
    incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/fortest/QualifiedBean.java
      - copied unchanged from r598856, incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/fortest/QualifiedBean.java
Modified:
    incubator/cxf/branches/2.0.x-fixes/   (props changed)
    incubator/cxf/branches/2.0.x-fixes/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java
    incubator/cxf/branches/2.0.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/AegisDatabinding.java
    incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
    incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
    incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
    incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java
    incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
    incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/servers.xml
    incubator/cxf/branches/2.0.x-fixes/testutils/src/main/java/org/apache/hello_world_soap_http/GreeterImpl.java

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

Modified: incubator/cxf/branches/2.0.x-fixes/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java
(original)
+++ incubator/cxf/branches/2.0.x-fixes/rt/core/src/main/java/org/apache/cxf/databinding/source/AbstractDataBinding.java
Fri Nov 30 11:29:15 2007
@@ -20,6 +20,9 @@
 package org.apache.cxf.databinding.source;
 
 import java.util.Collection;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
 
 import javax.xml.transform.dom.DOMSource;
 
@@ -36,6 +39,7 @@
 
 public class AbstractDataBinding {
     private Collection<DOMSource> schemas;
+    private Map<String, String> namespaceMap;
 
     public Collection<DOMSource> getSchemas() {
         return schemas;
@@ -69,5 +73,48 @@
         schema.setSchema(xmlSchema);
         serviceInfo.addSchema(schema);
         return xmlSchema;
+    }
+    
+    /**
+      * @return Returns the namespaceMap.
+     */
+    public Map<String, String> getNamespaceMap() {
+        return namespaceMap;
+    }
+
+    /**
+     * @param namespaceMap The namespaceMap to set.
+     */
+    public void setNamespaceMap(Map<String, String> namespaceMap) {
+        // make some checks. This is a map from namespace to prefix, but we want unique prefixes.
+        if (namespaceMap != null) {
+            Set<String> prefixesSoFar = new HashSet<String>();
+            for (Map.Entry<String, String> mapping : namespaceMap.entrySet()) {
+                if (prefixesSoFar.contains(mapping.getValue())) {
+                    throw new IllegalArgumentException("Duplicate prefix " + mapping.getValue());
+                }
+            }
+        }
+        this.namespaceMap = namespaceMap;
+    }
+
+    /** 
+     * Provide explicit mappings to ReflectionServiceFactory.
+     * {@inheritDoc}
+     * */
+    public Map<String, String> getDeclaredNamespaceMappings() {
+        return this.namespaceMap;
+    }
+
+    protected static void checkNamespaceMap(Map<String, String> namespaceMap) {
+        // make some checks. This is a map from namespace to prefix, but we want unique prefixes.
+        if (namespaceMap != null) {
+            Set<String> prefixesSoFar = new HashSet<String>();
+            for (Map.Entry<String, String> mapping : namespaceMap.entrySet()) {
+                if (prefixesSoFar.contains(mapping.getValue())) {
+                    throw new IllegalArgumentException("Duplicate prefix " + mapping.getValue());
+                }
+            }
+        }
     }
 }

Modified: incubator/cxf/branches/2.0.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/AegisDatabinding.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/AegisDatabinding.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/AegisDatabinding.java
(original)
+++ incubator/cxf/branches/2.0.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/databinding/AegisDatabinding.java
Fri Nov 30 11:29:15 2007
@@ -92,8 +92,6 @@
     private Map<MessagePartInfo, Type> part2Type;
     private List overrideTypes;
     private Service service;
-    // allow applications to express an opinion about the namespace prefixes.
-    private Map<String, String> namespaceMap;
     
     public AegisDatabinding() {
         super();
@@ -318,6 +316,8 @@
             }
         }
 
+        Map<String, String> namespaceMap = getDeclaredNamespaceMappings();
+        
         for (Map.Entry<String, Set<Type>> entry : tns2Type.entrySet()) {
             String xsdPrefix = XmlConstants.XSD_PREFIX;
             if (namespaceMap != null && namespaceMap.containsKey(XmlConstants.XSD))
{
@@ -474,37 +474,6 @@
 
     public Service getService() {
         return service;
-    }
-
-    /**
-      * @return Returns the namespaceMap.
-     */
-    public Map<String, String> getNamespaceMap() {
-        return namespaceMap;
-    }
-
-    /**
-     * @param namespaceMap The namespaceMap to set.
-     */
-    public void setNamespaceMap(Map<String, String> namespaceMap) {
-        // make some checks. This is a map from namespace to prefix, but we want unique prefixes.
-        if (namespaceMap != null) {
-            Set<String> prefixesSoFar = new HashSet<String>();
-            for (Map.Entry<String, String> mapping : namespaceMap.entrySet()) {
-                if (prefixesSoFar.contains(mapping.getValue())) {
-                    throw new IllegalArgumentException("Duplicate prefix " + mapping.getValue());
-                }
-            }
-        }
-        this.namespaceMap = namespaceMap;
-    }
-
-    /** 
-     * Provide explicit mappings to ReflectionServiceFactory.
-     * {@inheritDoc}
-     * */
-    public Map<String, String> getDeclaredNamespaceMappings() {
-        return this.namespaceMap;
     }
 
     /** 

Modified: incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
(original)
+++ incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
Fri Nov 30 11:29:15 2007
@@ -57,6 +57,7 @@
 import org.apache.cxf.Bus;
 import org.apache.cxf.bus.CXFBusFactory;
 import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.i18n.UncheckedException;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.endpoint.Client;
@@ -379,9 +380,8 @@
                                 classPath.addFileset(fs);
                             }
                         } catch (URISyntaxException e) {
-                            // TODO Auto-generated catch block
-                            e.printStackTrace();
-                        } 
+                            throw new UncheckedException(e);
+                        }
                     }
                 }
             }

Modified: incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
(original)
+++ incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
Fri Nov 30 11:29:15 2007
@@ -52,6 +52,7 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 
+import com.sun.xml.bind.marshaller.NamespacePrefixMapper;
 import com.sun.xml.bind.v2.ContextFactory;
 import com.sun.xml.bind.v2.runtime.JAXBContextImpl;
 
@@ -124,17 +125,46 @@
         context = ctx;
     }    
     
+    private NamespacePrefixMapper getNamespacePrefixMapper() {
+        Map<String, String> mappings = getDeclaredNamespaceMappings();
+        if (mappings == null) {
+            mappings = Collections.emptyMap();
+        }
+        
+        final Map<String, String> closedMappings = mappings;
+        
+        NamespacePrefixMapper mapper = new NamespacePrefixMapper() {
+            @Override
+            public String getPreferredPrefix(String namespaceUri, String suggestion, boolean
requirePrefix) {
+                String prefix = closedMappings.get(namespaceUri);
+                if (prefix != null) {
+                    return prefix;
+                }
+                return suggestion;
+            } 
+        };
+        return mapper;
+    }
+
+
     @SuppressWarnings("unchecked")
     public <T> DataWriter<T> createWriter(Class<T> c) {
+        Map<String, Object> currentMarshallerProperties = new HashMap<String, Object>();
+        if (!marshallerProperties.containsKey("com.sun.xml.bind.namespacePrefixMapper"))
{
+            currentMarshallerProperties.put("com.sun.xml.bind.namespacePrefixMapper",
+                                            getNamespacePrefixMapper());
+        }
+        currentMarshallerProperties.putAll(marshallerProperties);
         if (c == XMLStreamWriter.class) {
-            return (DataWriter<T>)new DataWriterImpl<XMLStreamWriter>(context,
marshallerProperties);
+            return (DataWriter<T>)new DataWriterImpl<XMLStreamWriter>(context,
currentMarshallerProperties);
         } else if (c == OutputStream.class) {
-            return (DataWriter<T>)new DataWriterImpl<OutputStream>(context, marshallerProperties);
           
+            return (DataWriter<T>)new DataWriterImpl<OutputStream>(context, 
+                currentMarshallerProperties);            
         } else if (c == XMLEventWriter.class) {
             return (DataWriter<T>)new DataWriterImpl<XMLEventWriter>(context,
-                                                                     marshallerProperties);
          
+                                                                     currentMarshallerProperties);
          
         } else if (c == Node.class) {
-            return (DataWriter<T>)new DataWriterImpl<Node>(context, marshallerProperties);
     
+            return (DataWriter<T>)new DataWriterImpl<Node>(context, currentMarshallerProperties);
     
         }
         
         return null;
@@ -427,14 +457,6 @@
             
         }
         return added;
-    }
-
-    /**
-     * Jaxb has no declared namespace prefixes.
-     * {@inheritDoc}
-     */
-    public Map<String, String> getDeclaredNamespaceMappings() {
-        return null;
     }
 
     /**

Modified: incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
(original)
+++ incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
Fri Nov 30 11:29:15 2007
@@ -52,6 +52,7 @@
 import org.apache.cxf.databinding.DataReader;
 import org.apache.cxf.databinding.DataWriter;
 import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.jaxb.fortest.QualifiedBean;
 import org.apache.cxf.jaxb.fortest.unqualified.UnqualifiedBean;
 import org.apache.cxf.jaxb.io.DataReaderImpl;
 import org.apache.cxf.jaxb.io.DataWriterImpl;
@@ -220,4 +221,27 @@
         assertTrue(xml.contains("uri:ultima:thule"));
     }
     
+    @Test
+    public void testDeclaredNamespaceMapping() throws Exception {
+        JAXBDataBinding db = new JAXBDataBinding();
+        Map<String, String> nsMap = new HashMap<String, String>();
+        nsMap.put("uri:ultima:thule", "greenland");
+        db.setNamespaceMap(nsMap);
+        Map<String, Object> contextProperties = new HashMap<String, Object>();
+        contextProperties.put(JAXBRIContext.DEFAULT_NAMESPACE_REMAP, "uri:ultima:thule");
+        db.setContextProperties(contextProperties);
+        Set<Class<?>> classes = new HashSet<Class<?>>();
+        classes.add(QualifiedBean.class);
+        db.setContext(db.createJAXBContext(classes));
+        DataWriter<XMLStreamWriter> writer = db.createWriter(XMLStreamWriter.class);
+        XMLOutputFactory writerFactory = XMLOutputFactory.newInstance();
+        StringWriter stringWriter = new StringWriter();
+        XMLStreamWriter xmlWriter = writerFactory.createXMLStreamWriter(stringWriter);
+        QualifiedBean bean = new QualifiedBean();
+        bean.setAriadne("spider");
+        writer.write(bean, xmlWriter);
+        xmlWriter.flush();
+        String xml = stringWriter.toString();
+        assertTrue(xml.contains("greenland=\"uri:ultima:thule"));
+    }
 }

Modified: incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java
(original)
+++ incubator/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java
Fri Nov 30 11:29:15 2007
@@ -221,7 +221,7 @@
         // so that it could be examined inside the debugger to see how JAXB works.
         assertTrue(xmlResult.contains("Gallia:string2"));
     }
-
+    
     @Test
     public void testMarshallIntoStax() throws Exception {
         GreetMe obj = new GreetMe();

Modified: incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
(original)
+++ incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/SpringBeansTest.java
Fri Nov 30 11:29:15 2007
@@ -18,6 +18,8 @@
  */
 package org.apache.cxf.jaxws.spring;
 
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.util.List;
 
 import javax.xml.namespace.QName;
@@ -25,6 +27,8 @@
 import junit.framework.Assert;
 
 import org.apache.cxf.BusFactory;
+import org.apache.cxf.anonymous_complex_type.AnonymousComplexType;
+import org.apache.cxf.anonymous_complex_type.SplitNameResponse.Names;
 import org.apache.cxf.binding.BindingConfiguration;
 import org.apache.cxf.binding.soap.Soap12;
 import org.apache.cxf.binding.soap.SoapBindingConfiguration;
@@ -44,6 +48,7 @@
 import org.apache.hello_world_soap_http.Greeter;
 import org.junit.After;
 import org.junit.Test;
+import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 public class SpringBeansTest extends Assert {
@@ -55,7 +60,6 @@
         }
     }
 
-    
     @Test
     public void testEndpoints() throws Exception {
         ClassPathXmlApplicationContext ctx = 
@@ -154,9 +158,23 @@
         assertTrue("Could not find server factory with autogenerated id", found);
         
         testInterceptors(ctx);
-        
     }
 
+    private void testNamespaceMapping(ApplicationContext ctx) throws Exception {
+        AnonymousComplexType act = (AnonymousComplexType) ctx.getBean("bookClient");
+        Client client = ClientProxy.getClient(act);
+        assertNotNull(act);
+
+        StringWriter logWriter = new StringWriter();
+        PrintWriter writer = new PrintWriter(logWriter);
+        LoggingInInterceptor spy = new LoggingInInterceptor(writer);
+        client.getInInterceptors().add(spy);
+        Names n = act.splitName("Hello There");
+        assertEquals("Hello", n.getFirst());
+        assertTrue(logWriter.toString().contains("BeepBeep:"));
+    }
+
+
     private void testInterceptors(ClassPathXmlApplicationContext ctx) {
         EndpointImpl ep;
         ep = (EndpointImpl) ctx.getBean("epWithInterceptors");
@@ -212,6 +230,7 @@
             }
         }
         assertTrue("Could not find server factory with autogenerated id", found);
+        testNamespaceMapping(ctx);
     }
     
 

Modified: incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/servers.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/servers.xml?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/servers.xml
(original)
+++ incubator/cxf/branches/2.0.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spring/servers.xml
Fri Nov 30 11:29:15 2007
@@ -67,9 +67,40 @@
         </constructor-arg>
       </bean>
     </jaxws:invoker>
-    
+    <jaxws:dataBinding>
+      <bean class="org.apache.cxf.jaxb.JAXBDataBinding"/>
+    </jaxws:dataBinding>
   </jaxws:server>
-  
+ 
+  <jaxws:server id="bookServer"
+  	serviceClass="org.apache.cxf.anonymous_complex_type.AnonymousComplexTypeImpl"
+    address="http://localhost:8080/act" 
+    bus="cxf">
+    <jaxws:invoker>
+      <bean class="org.apache.cxf.service.invoker.BeanInvoker">
+        <constructor-arg>
+          <bean class="org.apache.cxf.anonymous_complex_type.AnonymousComplexTypeImpl"/>
+        </constructor-arg>
+      </bean>
+    </jaxws:invoker>
+     <jaxws:dataBinding>
+      <bean class="org.apache.cxf.jaxb.JAXBDataBinding">
+        <property name="namespaceMap">
+    		<map>
+   			<entry>
+      			<key><value>http://cxf.apache.org/anonymous_complex_type/</value></key>
+      			<value>BeepBeep</value>
+   			</entry>
+      		</map>
+        </property>
+      </bean>
+      </jaxws:dataBinding>
+  </jaxws:server>
+
+   <jaxws:client id="bookClient" 
+    serviceClass="org.apache.cxf.anonymous_complex_type.AnonymousComplexType"
+    address="http://localhost:8080/act"/>
+
   <jaxws:server id="inlineSoapBinding" 
     serviceClass="org.apache.cxf.jaxws.service.Hello"
     address="http://localhost:8080/test">

Modified: incubator/cxf/branches/2.0.x-fixes/testutils/src/main/java/org/apache/hello_world_soap_http/GreeterImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/testutils/src/main/java/org/apache/hello_world_soap_http/GreeterImpl.java?rev=599924&r1=599923&r2=599924&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/testutils/src/main/java/org/apache/hello_world_soap_http/GreeterImpl.java
(original)
+++ incubator/cxf/branches/2.0.x-fixes/testutils/src/main/java/org/apache/hello_world_soap_http/GreeterImpl.java
Fri Nov 30 11:29:15 2007
@@ -26,6 +26,7 @@
 
 import javax.annotation.Resource;
 
+import javax.jws.WebMethod;
 import javax.jws.WebService;
 import javax.xml.ws.AsyncHandler;
 import javax.xml.ws.BindingProvider;
@@ -131,6 +132,7 @@
         return "How are you " + me;
     }
 
+    @WebMethod
     public BareDocumentResponse testDocLitBare(String in) {
         invocationCount++;
         BareDocumentResponse res = new BareDocumentResponse();



Mime
View raw message