You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by da...@apache.org on 2007/05/01 02:56:08 UTC

svn commit: r533897 - in /incubator/cxf/trunk: rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/ systests/src/test/java/org/apache/cxf/systest/mtom/

Author: dandiep
Date: Mon Apr 30 17:56:07 2007
New Revision: 533897

URL: http://svn.apache.org/viewvc?view=rev&rev=533897
Log:
Some fixes to allow the AttachmentUnarshaller read XOP packages
that use a URL instead of a CID.


Added:
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment   (with props)
Modified:
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java

Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java?view=diff&rev=533897&r1=533896&r2=533897
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java Mon Apr 30 17:56:07 2007
@@ -23,12 +23,15 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.net.URLDecoder;
 import java.util.Collection;
 import java.util.logging.Logger;
 
 import javax.activation.DataHandler;
 import javax.activation.DataSource;
+import javax.activation.URLDataSource;
 import javax.xml.bind.attachment.AttachmentUnmarshaller;
 
 import org.apache.cxf.attachment.LazyDataSource;
@@ -41,7 +44,7 @@
     private static final Logger LOG = LogUtils.getL7dLogger(JAXBAttachmentUnmarshaller.class);
 
     private Collection<Attachment> attachments;
-
+    
     public JAXBAttachmentUnmarshaller(Collection<Attachment> attachments) {
         super();
         this.attachments = attachments;
@@ -68,7 +71,7 @@
 
     @Override
     public boolean isXOPPackage() {
-        return attachments != null && attachments.iterator().hasNext();
+        return attachments != null;
     }
 
     private DataSource getAttachmentDataSource(String contentId) {
@@ -78,7 +81,14 @@
             } catch (UnsupportedEncodingException ue) {
                 contentId = contentId.substring(4);
             }
+            return new LazyDataSource(contentId, attachments);
+        } else {
+            try {
+                return new URLDataSource(new URL(contentId));
+            } catch (MalformedURLException e) {
+                throw new Fault(e);
+            }
         }
-        return new LazyDataSource(contentId, attachments);
+        
     }
 }

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java?view=diff&rev=533897&r1=533896&r2=533897
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java Mon Apr 30 17:56:07 2007
@@ -22,6 +22,7 @@
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.net.URL;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
@@ -33,6 +34,7 @@
 import org.apache.cxf.helpers.IOUtils;
 import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
 import org.apache.cxf.message.Attachment;
+import org.apache.cxf.message.ExchangeImpl;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageImpl;
 import org.apache.cxf.service.model.EndpointInfo;
@@ -40,10 +42,16 @@
 import org.apache.cxf.transport.Conduit;
 import org.apache.cxf.transport.ConduitInitiator;
 import org.apache.cxf.transport.ConduitInitiatorManager;
+import org.apache.cxf.transport.Destination;
+import org.apache.cxf.transport.DestinationFactory;
+import org.apache.cxf.transport.DestinationFactoryManager;
+import org.apache.cxf.transport.MessageObserver;
 import org.junit.Test;
 
 public class MtomServerTest extends AbstractCXFTest {
     
+    private static final String HTTP_ID = "http://schemas.xmlsoap.org/wsdl/http/";
+    
     @Test
     public void testMtomRequest() throws Exception {
         JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
@@ -56,7 +64,7 @@
         sf.setProperties(props);
         sf.create();
 
-        EndpointInfo ei = new EndpointInfo(null, "http://schemas.xmlsoap.org/wsdl/http");
+        EndpointInfo ei = new EndpointInfo(null, HTTP_ID);
         ei.setAddress(address);
 
         ConduitInitiatorManager conduitMgr = getBus().getExtension(ConduitInitiatorManager.class);
@@ -105,9 +113,120 @@
         assertEquals(37448, out.size());
     }
 
+    @Test
+    public void testURLBasedAttachment() throws Exception {
+        JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
+        sf.setServiceBean(new EchoService());
+        sf.setBus(getBus());
+        String address = "http://localhost:9036/EchoService";
+        sf.setAddress(address);
+        Map<String, Object> props = new HashMap<String, Object>();
+        props.put(Message.MTOM_ENABLED, "true");
+        sf.setProperties(props);
+        sf.create();
+        
+        servStatic(getClass().getResource("mtom-policy.xsd"), 
+                   "http://localhost:9036/policy.xsd");
+        
+
+
+        EndpointInfo ei = new EndpointInfo(null, HTTP_ID);
+        ei.setAddress(address);
+
+        ConduitInitiatorManager conduitMgr = getBus().getExtension(ConduitInitiatorManager.class);
+        ConduitInitiator conduitInit = conduitMgr.getConduitInitiator("http://schemas.xmlsoap.org/soap/http");
+        Conduit conduit = conduitInit.getConduit(ei);
+
+        TestMessageObserver obs = new TestMessageObserver();
+        conduit.setMessageObserver(obs);
+        
+        Message m = new MessageImpl();
+        String ct = "multipart/related; type=\"application/xop+xml\"; "
+                    + "start=\"<so...@xfire.codehaus.org>\"; "
+                    + "start-info=\"text/xml; charset=utf-8\"; "
+                    + "boundary=\"----=_Part_4_701508.1145579811786\"";
+
+        m.put(Message.CONTENT_TYPE, ct);
+        conduit.prepare(m);
+
+        OutputStream os = m.getContent(OutputStream.class);
+        InputStream is = getResourceAsStream("request-url-attachment");
+        if (is == null) {
+            throw new RuntimeException("Could not find resource " + "request");
+        }
+
+        IOUtils.copy(is, os);
+
+        os.flush();
+        is.close();
+        os.close();
+        
+        byte[] res = obs.getResponseStream().toByteArray();
+        MessageImpl resMsg = new MessageImpl();
+        resMsg.setContent(InputStream.class, new ByteArrayInputStream(res));
+        resMsg.put(Message.CONTENT_TYPE, obs.getResponseContentType());
+        AttachmentDeserializer deserializer = new AttachmentDeserializer(resMsg);
+        deserializer.initializeAttachments();
+
+        Collection<Attachment> attachments = resMsg.getAttachments();
+        assertNotNull(attachments);
+        assertEquals(1, attachments.size());
+
+        Attachment inAtt = attachments.iterator().next();
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        IOUtils.copy(inAtt.getDataHandler().getInputStream(), out);
+        out.close();
+        assertEquals(197, out.size());
+    }
+
     @Override
     protected Bus createBus() throws BusException {
         return BusFactory.getDefaultBus();
     }
+    
+    /**
+     * Serve static file
+     */
+    private void servStatic(final URL resource, 
+                                   final String add) throws Exception {
+        Bus bus = getBus();
+        DestinationFactoryManager dfm = bus.getExtension(DestinationFactoryManager.class);
+        DestinationFactory df = dfm
+            .getDestinationFactory("http://cxf.apache.org/transports/http/configuration");
+
+        EndpointInfo ei = new EndpointInfo();
+        ei.setAddress(add);
+
+        Destination d = df.getDestination(ei);
+        d.setMessageObserver(new MessageObserver() {
+
+            public void onMessage(Message message) {
+                try {
+                    // HTTP seems to need this right now...
+                    ExchangeImpl ex = new ExchangeImpl();
+                    ex.setInMessage(message);
+
+                    Conduit backChannel = message.getDestination().getBackChannel(message, null, null);
+
+                    MessageImpl res = new MessageImpl();
+                    res.put(Message.CONTENT_TYPE, "text/xml");
+                    backChannel.prepare(res);
+
+                    OutputStream out = res.getContent(OutputStream.class);
+                    InputStream is = resource.openStream();
+                    IOUtils.copy(is, out, 2048);
+
+                    out.flush();
+
+                    out.close();
+                    is.close();
+
+                    backChannel.close(res);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
 
+        });
+    }
 }

Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment?view=auto&rev=533897
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment Mon Apr 30 17:56:07 2007
@@ -0,0 +1,19 @@
+
+------=_Part_4_701508.1145579811786
+Content-Type: text/xml
+Content-Transfer-Encoding: binary
+Content-ID: <echo.xml>
+
+<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
+ <env:Body>
+  <m:echo xmlns:m="http://mtom.systest.cxf.apache.org">
+    <m:Data>
+      <m:someData><xop:Include 
+        xmlns:xop='http://www.w3.org/2004/08/xop/include' 
+        href='http://localhost:9036/policy.xsd'/>
+      </m:someData>
+    </m:Data>
+  </m:echo>
+ </env:Body>
+</env:Envelope>
+------=_Part_4_701508.1145579811786--

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment
------------------------------------------------------------------------------
    svn:executable = *



Re: svn commit: r533897 - in /incubator/cxf/trunk: rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/ systests/src/test/java/org/apache/cxf/systest/mtom/

Posted by James Mao <ja...@iona.com>.
It failed on both Windows Vista and Windows 2000

Java -version
java version "1.5.0_10"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_10-b03)
Java HotSpot(TM) Client VM (build 1.5.0_10-b03, mixed mode, sharing)


> Hi Dan,
>
> I saw this after i updated to the latest trunk
>
> Running org.apache.cxf.systest.mtom.MtomServerTest
> Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 2.475 
> sec <<< FA
> ILURE!
> testURLBasedAttachment(org.apache.cxf.systest.mtom.MtomServerTest)  
> Time elapsed
> : 0.265 sec  <<< FAILURE!
> java.lang.AssertionError: expected:<197> but was:<200>
>        at org.junit.Assert.fail(Assert.java:71)
>        at org.junit.Assert.failNotEquals(Assert.java:451)
>        at org.junit.Assert.assertEquals(Assert.java:99)
>        at org.junit.Assert.assertEquals(Assert.java:116)
>
>
>
> James.
>
>
>
> dandiep@apache.org wrote:
>> Author: dandiep
>> Date: Mon Apr 30 17:56:07 2007
>> New Revision: 533897
>>
>> URL: http://svn.apache.org/viewvc?view=rev&rev=533897
>> Log:
>> Some fixes to allow the AttachmentUnarshaller read XOP packages
>> that use a URL instead of a CID.
>>
>>
>> Added:
>>     
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment   
>> (with props)
>> Modified:
>>     
>> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java 
>>
>>     
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java 
>>
>>
>> Modified: 
>> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java?view=diff&rev=533897&r1=533896&r2=533897 
>>
>> ============================================================================== 
>>
>> --- 
>> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java 
>> (original)
>> +++ 
>> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java 
>> Mon Apr 30 17:56:07 2007
>> @@ -23,12 +23,15 @@
>>  import java.io.IOException;
>>  import java.io.InputStream;
>>  import java.io.UnsupportedEncodingException;
>> +import java.net.MalformedURLException;
>> +import java.net.URL;
>>  import java.net.URLDecoder;
>>  import java.util.Collection;
>>  import java.util.logging.Logger;
>>  
>>  import javax.activation.DataHandler;
>>  import javax.activation.DataSource;
>> +import javax.activation.URLDataSource;
>>  import javax.xml.bind.attachment.AttachmentUnmarshaller;
>>  
>>  import org.apache.cxf.attachment.LazyDataSource;
>> @@ -41,7 +44,7 @@
>>      private static final Logger LOG = 
>> LogUtils.getL7dLogger(JAXBAttachmentUnmarshaller.class);
>>  
>>      private Collection<Attachment> attachments;
>> -
>> +         public JAXBAttachmentUnmarshaller(Collection<Attachment> 
>> attachments) {
>>          super();
>>          this.attachments = attachments;
>> @@ -68,7 +71,7 @@
>>  
>>      @Override
>>      public boolean isXOPPackage() {
>> -        return attachments != null && attachments.iterator().hasNext();
>> +        return attachments != null;
>>      }
>>  
>>      private DataSource getAttachmentDataSource(String contentId) {
>> @@ -78,7 +81,14 @@
>>              } catch (UnsupportedEncodingException ue) {
>>                  contentId = contentId.substring(4);
>>              }
>> +            return new LazyDataSource(contentId, attachments);
>> +        } else {
>> +            try {
>> +                return new URLDataSource(new URL(contentId));
>> +            } catch (MalformedURLException e) {
>> +                throw new Fault(e);
>> +            }
>>          }
>> -        return new LazyDataSource(contentId, attachments);
>> +             }
>>  }
>>
>> Modified: 
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java?view=diff&rev=533897&r1=533896&r2=533897 
>>
>> ============================================================================== 
>>
>> --- 
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java 
>> (original)
>> +++ 
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java 
>> Mon Apr 30 17:56:07 2007
>> @@ -22,6 +22,7 @@
>>  import java.io.ByteArrayOutputStream;
>>  import java.io.InputStream;
>>  import java.io.OutputStream;
>> +import java.net.URL;
>>  import java.util.Collection;
>>  import java.util.HashMap;
>>  import java.util.Map;
>> @@ -33,6 +34,7 @@
>>  import org.apache.cxf.helpers.IOUtils;
>>  import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
>>  import org.apache.cxf.message.Attachment;
>> +import org.apache.cxf.message.ExchangeImpl;
>>  import org.apache.cxf.message.Message;
>>  import org.apache.cxf.message.MessageImpl;
>>  import org.apache.cxf.service.model.EndpointInfo;
>> @@ -40,10 +42,16 @@
>>  import org.apache.cxf.transport.Conduit;
>>  import org.apache.cxf.transport.ConduitInitiator;
>>  import org.apache.cxf.transport.ConduitInitiatorManager;
>> +import org.apache.cxf.transport.Destination;
>> +import org.apache.cxf.transport.DestinationFactory;
>> +import org.apache.cxf.transport.DestinationFactoryManager;
>> +import org.apache.cxf.transport.MessageObserver;
>>  import org.junit.Test;
>>  
>>  public class MtomServerTest extends AbstractCXFTest {
>>      +    private static final String HTTP_ID = 
>> "http://schemas.xmlsoap.org/wsdl/http/";
>> +         @Test
>>      public void testMtomRequest() throws Exception {
>>          JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
>> @@ -56,7 +64,7 @@
>>          sf.setProperties(props);
>>          sf.create();
>>  
>> -        EndpointInfo ei = new EndpointInfo(null, 
>> "http://schemas.xmlsoap.org/wsdl/http");
>> +        EndpointInfo ei = new EndpointInfo(null, HTTP_ID);
>>          ei.setAddress(address);
>>  
>>          ConduitInitiatorManager conduitMgr = 
>> getBus().getExtension(ConduitInitiatorManager.class);
>> @@ -105,9 +113,120 @@
>>          assertEquals(37448, out.size());
>>      }
>>  
>> +    @Test
>> +    public void testURLBasedAttachment() throws Exception {
>> +        JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
>> +        sf.setServiceBean(new EchoService());
>> +        sf.setBus(getBus());
>> +        String address = "http://localhost:9036/EchoService";
>> +        sf.setAddress(address);
>> +        Map<String, Object> props = new HashMap<String, Object>();
>> +        props.put(Message.MTOM_ENABLED, "true");
>> +        sf.setProperties(props);
>> +        sf.create();
>> +        +        
>> servStatic(getClass().getResource("mtom-policy.xsd"), 
>> +                   "http://localhost:9036/policy.xsd");
>> +        +
>> +
>> +        EndpointInfo ei = new EndpointInfo(null, HTTP_ID);
>> +        ei.setAddress(address);
>> +
>> +        ConduitInitiatorManager conduitMgr = 
>> getBus().getExtension(ConduitInitiatorManager.class);
>> +        ConduitInitiator conduitInit = 
>> conduitMgr.getConduitInitiator("http://schemas.xmlsoap.org/soap/http");
>> +        Conduit conduit = conduitInit.getConduit(ei);
>> +
>> +        TestMessageObserver obs = new TestMessageObserver();
>> +        conduit.setMessageObserver(obs);
>> +        +        Message m = new MessageImpl();
>> +        String ct = "multipart/related; type=\"application/xop+xml\"; "
>> +                    + "start=\"<so...@xfire.codehaus.org>\"; "
>> +                    + "start-info=\"text/xml; charset=utf-8\"; "
>> +                    + "boundary=\"----=_Part_4_701508.1145579811786\"";
>> +
>> +        m.put(Message.CONTENT_TYPE, ct);
>> +        conduit.prepare(m);
>> +
>> +        OutputStream os = m.getContent(OutputStream.class);
>> +        InputStream is = getResourceAsStream("request-url-attachment");
>> +        if (is == null) {
>> +            throw new RuntimeException("Could not find resource " + 
>> "request");
>> +        }
>> +
>> +        IOUtils.copy(is, os);
>> +
>> +        os.flush();
>> +        is.close();
>> +        os.close();
>> +        +        byte[] res = obs.getResponseStream().toByteArray();
>> +        MessageImpl resMsg = new MessageImpl();
>> +        resMsg.setContent(InputStream.class, new 
>> ByteArrayInputStream(res));
>> +        resMsg.put(Message.CONTENT_TYPE, obs.getResponseContentType());
>> +        AttachmentDeserializer deserializer = new 
>> AttachmentDeserializer(resMsg);
>> +        deserializer.initializeAttachments();
>> +
>> +        Collection<Attachment> attachments = resMsg.getAttachments();
>> +        assertNotNull(attachments);
>> +        assertEquals(1, attachments.size());
>> +
>> +        Attachment inAtt = attachments.iterator().next();
>> +        ByteArrayOutputStream out = new ByteArrayOutputStream();
>> +        IOUtils.copy(inAtt.getDataHandler().getInputStream(), out);
>> +        out.close();
>> +        assertEquals(197, out.size());
>> +    }
>> +
>>      @Override
>>      protected Bus createBus() throws BusException {
>>          return BusFactory.getDefaultBus();
>>      }
>> +    +    /**
>> +     * Serve static file
>> +     */
>> +    private void servStatic(final URL resource, 
>> +                                   final String add) throws Exception {
>> +        Bus bus = getBus();
>> +        DestinationFactoryManager dfm = 
>> bus.getExtension(DestinationFactoryManager.class);
>> +        DestinationFactory df = dfm
>> +            
>> .getDestinationFactory("http://cxf.apache.org/transports/http/configuration"); 
>>
>> +
>> +        EndpointInfo ei = new EndpointInfo();
>> +        ei.setAddress(add);
>> +
>> +        Destination d = df.getDestination(ei);
>> +        d.setMessageObserver(new MessageObserver() {
>> +
>> +            public void onMessage(Message message) {
>> +                try {
>> +                    // HTTP seems to need this right now...
>> +                    ExchangeImpl ex = new ExchangeImpl();
>> +                    ex.setInMessage(message);
>> +
>> +                    Conduit backChannel = 
>> message.getDestination().getBackChannel(message, null, null);
>> +
>> +                    MessageImpl res = new MessageImpl();
>> +                    res.put(Message.CONTENT_TYPE, "text/xml");
>> +                    backChannel.prepare(res);
>> +
>> +                    OutputStream out = 
>> res.getContent(OutputStream.class);
>> +                    InputStream is = resource.openStream();
>> +                    IOUtils.copy(is, out, 2048);
>> +
>> +                    out.flush();
>> +
>> +                    out.close();
>> +                    is.close();
>> +
>> +                    backChannel.close(res);
>> +                } catch (Exception e) {
>> +                    e.printStackTrace();
>> +                }
>> +            }
>>  
>> +        });
>> +    }
>>  }
>>
>> Added: 
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment 
>>
>> URL: 
>> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment?view=auto&rev=533897 
>>
>> ============================================================================== 
>>
>> --- 
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment 
>> (added)
>> +++ 
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment 
>> Mon Apr 30 17:56:07 2007
>> @@ -0,0 +1,19 @@
>> +
>> +------=_Part_4_701508.1145579811786
>> +Content-Type: text/xml
>> +Content-Transfer-Encoding: binary
>> +Content-ID: <echo.xml>
>> +
>> +<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
>> + <env:Body>
>> +  <m:echo xmlns:m="http://mtom.systest.cxf.apache.org">
>> +    <m:Data>
>> +      <m:someData><xop:Include +        
>> xmlns:xop='http://www.w3.org/2004/08/xop/include' +        
>> href='http://localhost:9036/policy.xsd'/>
>> +      </m:someData>
>> +    </m:Data>
>> +  </m:echo>
>> + </env:Body>
>> +</env:Envelope>
>> +------=_Part_4_701508.1145579811786--
>>
>> Propchange: 
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment 
>>
>> ------------------------------------------------------------------------------ 
>>
>>     svn:executable = *
>>
>>
>>
>>   
>
>


Re: svn commit: r533897 - in /incubator/cxf/trunk: rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/ systests/src/test/java/org/apache/cxf/systest/mtom/

Posted by James Mao <ja...@iona.com>.
It failed on both Windows Vista and Windows 2000

Java -version
java version "1.5.0_10"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_10-b03)
Java HotSpot(TM) Client VM (build 1.5.0_10-b03, mixed mode, sharing)


> Hi Dan,
>
> I saw this after i updated to the latest trunk
>
> Running org.apache.cxf.systest.mtom.MtomServerTest
> Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 2.475 
> sec <<< FA
> ILURE!
> testURLBasedAttachment(org.apache.cxf.systest.mtom.MtomServerTest)  
> Time elapsed
> : 0.265 sec  <<< FAILURE!
> java.lang.AssertionError: expected:<197> but was:<200>
>        at org.junit.Assert.fail(Assert.java:71)
>        at org.junit.Assert.failNotEquals(Assert.java:451)
>        at org.junit.Assert.assertEquals(Assert.java:99)
>        at org.junit.Assert.assertEquals(Assert.java:116)
>
>
>
> James.
>
>
>
> dandiep@apache.org wrote:
>> Author: dandiep
>> Date: Mon Apr 30 17:56:07 2007
>> New Revision: 533897
>>
>> URL: http://svn.apache.org/viewvc?view=rev&rev=533897
>> Log:
>> Some fixes to allow the AttachmentUnarshaller read XOP packages
>> that use a URL instead of a CID.
>>
>>
>> Added:
>>     
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment   
>> (with props)
>> Modified:
>>     
>> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java 
>>
>>     
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java 
>>
>>
>> Modified: 
>> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java?view=diff&rev=533897&r1=533896&r2=533897 
>>
>> ============================================================================== 
>>
>> --- 
>> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java 
>> (original)
>> +++ 
>> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java 
>> Mon Apr 30 17:56:07 2007
>> @@ -23,12 +23,15 @@
>>  import java.io.IOException;
>>  import java.io.InputStream;
>>  import java.io.UnsupportedEncodingException;
>> +import java.net.MalformedURLException;
>> +import java.net.URL;
>>  import java.net.URLDecoder;
>>  import java.util.Collection;
>>  import java.util.logging.Logger;
>>  
>>  import javax.activation.DataHandler;
>>  import javax.activation.DataSource;
>> +import javax.activation.URLDataSource;
>>  import javax.xml.bind.attachment.AttachmentUnmarshaller;
>>  
>>  import org.apache.cxf.attachment.LazyDataSource;
>> @@ -41,7 +44,7 @@
>>      private static final Logger LOG = 
>> LogUtils.getL7dLogger(JAXBAttachmentUnmarshaller.class);
>>  
>>      private Collection<Attachment> attachments;
>> -
>> +         public JAXBAttachmentUnmarshaller(Collection<Attachment> 
>> attachments) {
>>          super();
>>          this.attachments = attachments;
>> @@ -68,7 +71,7 @@
>>  
>>      @Override
>>      public boolean isXOPPackage() {
>> -        return attachments != null && attachments.iterator().hasNext();
>> +        return attachments != null;
>>      }
>>  
>>      private DataSource getAttachmentDataSource(String contentId) {
>> @@ -78,7 +81,14 @@
>>              } catch (UnsupportedEncodingException ue) {
>>                  contentId = contentId.substring(4);
>>              }
>> +            return new LazyDataSource(contentId, attachments);
>> +        } else {
>> +            try {
>> +                return new URLDataSource(new URL(contentId));
>> +            } catch (MalformedURLException e) {
>> +                throw new Fault(e);
>> +            }
>>          }
>> -        return new LazyDataSource(contentId, attachments);
>> +             }
>>  }
>>
>> Modified: 
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java?view=diff&rev=533897&r1=533896&r2=533897 
>>
>> ============================================================================== 
>>
>> --- 
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java 
>> (original)
>> +++ 
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java 
>> Mon Apr 30 17:56:07 2007
>> @@ -22,6 +22,7 @@
>>  import java.io.ByteArrayOutputStream;
>>  import java.io.InputStream;
>>  import java.io.OutputStream;
>> +import java.net.URL;
>>  import java.util.Collection;
>>  import java.util.HashMap;
>>  import java.util.Map;
>> @@ -33,6 +34,7 @@
>>  import org.apache.cxf.helpers.IOUtils;
>>  import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
>>  import org.apache.cxf.message.Attachment;
>> +import org.apache.cxf.message.ExchangeImpl;
>>  import org.apache.cxf.message.Message;
>>  import org.apache.cxf.message.MessageImpl;
>>  import org.apache.cxf.service.model.EndpointInfo;
>> @@ -40,10 +42,16 @@
>>  import org.apache.cxf.transport.Conduit;
>>  import org.apache.cxf.transport.ConduitInitiator;
>>  import org.apache.cxf.transport.ConduitInitiatorManager;
>> +import org.apache.cxf.transport.Destination;
>> +import org.apache.cxf.transport.DestinationFactory;
>> +import org.apache.cxf.transport.DestinationFactoryManager;
>> +import org.apache.cxf.transport.MessageObserver;
>>  import org.junit.Test;
>>  
>>  public class MtomServerTest extends AbstractCXFTest {
>>      +    private static final String HTTP_ID = 
>> "http://schemas.xmlsoap.org/wsdl/http/";
>> +         @Test
>>      public void testMtomRequest() throws Exception {
>>          JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
>> @@ -56,7 +64,7 @@
>>          sf.setProperties(props);
>>          sf.create();
>>  
>> -        EndpointInfo ei = new EndpointInfo(null, 
>> "http://schemas.xmlsoap.org/wsdl/http");
>> +        EndpointInfo ei = new EndpointInfo(null, HTTP_ID);
>>          ei.setAddress(address);
>>  
>>          ConduitInitiatorManager conduitMgr = 
>> getBus().getExtension(ConduitInitiatorManager.class);
>> @@ -105,9 +113,120 @@
>>          assertEquals(37448, out.size());
>>      }
>>  
>> +    @Test
>> +    public void testURLBasedAttachment() throws Exception {
>> +        JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
>> +        sf.setServiceBean(new EchoService());
>> +        sf.setBus(getBus());
>> +        String address = "http://localhost:9036/EchoService";
>> +        sf.setAddress(address);
>> +        Map<String, Object> props = new HashMap<String, Object>();
>> +        props.put(Message.MTOM_ENABLED, "true");
>> +        sf.setProperties(props);
>> +        sf.create();
>> +        +        
>> servStatic(getClass().getResource("mtom-policy.xsd"), 
>> +                   "http://localhost:9036/policy.xsd");
>> +        +
>> +
>> +        EndpointInfo ei = new EndpointInfo(null, HTTP_ID);
>> +        ei.setAddress(address);
>> +
>> +        ConduitInitiatorManager conduitMgr = 
>> getBus().getExtension(ConduitInitiatorManager.class);
>> +        ConduitInitiator conduitInit = 
>> conduitMgr.getConduitInitiator("http://schemas.xmlsoap.org/soap/http");
>> +        Conduit conduit = conduitInit.getConduit(ei);
>> +
>> +        TestMessageObserver obs = new TestMessageObserver();
>> +        conduit.setMessageObserver(obs);
>> +        +        Message m = new MessageImpl();
>> +        String ct = "multipart/related; type=\"application/xop+xml\"; "
>> +                    + "start=\"<so...@xfire.codehaus.org>\"; "
>> +                    + "start-info=\"text/xml; charset=utf-8\"; "
>> +                    + "boundary=\"----=_Part_4_701508.1145579811786\"";
>> +
>> +        m.put(Message.CONTENT_TYPE, ct);
>> +        conduit.prepare(m);
>> +
>> +        OutputStream os = m.getContent(OutputStream.class);
>> +        InputStream is = getResourceAsStream("request-url-attachment");
>> +        if (is == null) {
>> +            throw new RuntimeException("Could not find resource " + 
>> "request");
>> +        }
>> +
>> +        IOUtils.copy(is, os);
>> +
>> +        os.flush();
>> +        is.close();
>> +        os.close();
>> +        +        byte[] res = obs.getResponseStream().toByteArray();
>> +        MessageImpl resMsg = new MessageImpl();
>> +        resMsg.setContent(InputStream.class, new 
>> ByteArrayInputStream(res));
>> +        resMsg.put(Message.CONTENT_TYPE, obs.getResponseContentType());
>> +        AttachmentDeserializer deserializer = new 
>> AttachmentDeserializer(resMsg);
>> +        deserializer.initializeAttachments();
>> +
>> +        Collection<Attachment> attachments = resMsg.getAttachments();
>> +        assertNotNull(attachments);
>> +        assertEquals(1, attachments.size());
>> +
>> +        Attachment inAtt = attachments.iterator().next();
>> +        ByteArrayOutputStream out = new ByteArrayOutputStream();
>> +        IOUtils.copy(inAtt.getDataHandler().getInputStream(), out);
>> +        out.close();
>> +        assertEquals(197, out.size());
>> +    }
>> +
>>      @Override
>>      protected Bus createBus() throws BusException {
>>          return BusFactory.getDefaultBus();
>>      }
>> +    +    /**
>> +     * Serve static file
>> +     */
>> +    private void servStatic(final URL resource, 
>> +                                   final String add) throws Exception {
>> +        Bus bus = getBus();
>> +        DestinationFactoryManager dfm = 
>> bus.getExtension(DestinationFactoryManager.class);
>> +        DestinationFactory df = dfm
>> +            
>> .getDestinationFactory("http://cxf.apache.org/transports/http/configuration"); 
>>
>> +
>> +        EndpointInfo ei = new EndpointInfo();
>> +        ei.setAddress(add);
>> +
>> +        Destination d = df.getDestination(ei);
>> +        d.setMessageObserver(new MessageObserver() {
>> +
>> +            public void onMessage(Message message) {
>> +                try {
>> +                    // HTTP seems to need this right now...
>> +                    ExchangeImpl ex = new ExchangeImpl();
>> +                    ex.setInMessage(message);
>> +
>> +                    Conduit backChannel = 
>> message.getDestination().getBackChannel(message, null, null);
>> +
>> +                    MessageImpl res = new MessageImpl();
>> +                    res.put(Message.CONTENT_TYPE, "text/xml");
>> +                    backChannel.prepare(res);
>> +
>> +                    OutputStream out = 
>> res.getContent(OutputStream.class);
>> +                    InputStream is = resource.openStream();
>> +                    IOUtils.copy(is, out, 2048);
>> +
>> +                    out.flush();
>> +
>> +                    out.close();
>> +                    is.close();
>> +
>> +                    backChannel.close(res);
>> +                } catch (Exception e) {
>> +                    e.printStackTrace();
>> +                }
>> +            }
>>  
>> +        });
>> +    }
>>  }
>>
>> Added: 
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment 
>>
>> URL: 
>> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment?view=auto&rev=533897 
>>
>> ============================================================================== 
>>
>> --- 
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment 
>> (added)
>> +++ 
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment 
>> Mon Apr 30 17:56:07 2007
>> @@ -0,0 +1,19 @@
>> +
>> +------=_Part_4_701508.1145579811786
>> +Content-Type: text/xml
>> +Content-Transfer-Encoding: binary
>> +Content-ID: <echo.xml>
>> +
>> +<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
>> + <env:Body>
>> +  <m:echo xmlns:m="http://mtom.systest.cxf.apache.org">
>> +    <m:Data>
>> +      <m:someData><xop:Include +        
>> xmlns:xop='http://www.w3.org/2004/08/xop/include' +        
>> href='http://localhost:9036/policy.xsd'/>
>> +      </m:someData>
>> +    </m:Data>
>> +  </m:echo>
>> + </env:Body>
>> +</env:Envelope>
>> +------=_Part_4_701508.1145579811786--
>>
>> Propchange: 
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment 
>>
>> ------------------------------------------------------------------------------ 
>>
>>     svn:executable = *
>>
>>
>>
>>   
>
>


Re: svn commit: r533897 - in /incubator/cxf/trunk: rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/ systests/src/test/java/org/apache/cxf/systest/mtom/

Posted by James Mao <ja...@iona.com>.
Hi Dan,

I saw this after i updated to the latest trunk

Running org.apache.cxf.systest.mtom.MtomServerTest
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 2.475 
sec <<< FA
ILURE!
testURLBasedAttachment(org.apache.cxf.systest.mtom.MtomServerTest)  Time 
elapsed
: 0.265 sec  <<< FAILURE!
java.lang.AssertionError: expected:<197> but was:<200>
        at org.junit.Assert.fail(Assert.java:71)
        at org.junit.Assert.failNotEquals(Assert.java:451)
        at org.junit.Assert.assertEquals(Assert.java:99)
        at org.junit.Assert.assertEquals(Assert.java:116)



James.



dandiep@apache.org wrote:
> Author: dandiep
> Date: Mon Apr 30 17:56:07 2007
> New Revision: 533897
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=533897
> Log:
> Some fixes to allow the AttachmentUnarshaller read XOP packages
> that use a URL instead of a CID.
>
>
> Added:
>     incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment   (with props)
> Modified:
>     incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java
>     incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java
>
> Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java
> URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java?view=diff&rev=533897&r1=533896&r2=533897
> ==============================================================================
> --- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java (original)
> +++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java Mon Apr 30 17:56:07 2007
> @@ -23,12 +23,15 @@
>  import java.io.IOException;
>  import java.io.InputStream;
>  import java.io.UnsupportedEncodingException;
> +import java.net.MalformedURLException;
> +import java.net.URL;
>  import java.net.URLDecoder;
>  import java.util.Collection;
>  import java.util.logging.Logger;
>  
>  import javax.activation.DataHandler;
>  import javax.activation.DataSource;
> +import javax.activation.URLDataSource;
>  import javax.xml.bind.attachment.AttachmentUnmarshaller;
>  
>  import org.apache.cxf.attachment.LazyDataSource;
> @@ -41,7 +44,7 @@
>      private static final Logger LOG = LogUtils.getL7dLogger(JAXBAttachmentUnmarshaller.class);
>  
>      private Collection<Attachment> attachments;
> -
> +    
>      public JAXBAttachmentUnmarshaller(Collection<Attachment> attachments) {
>          super();
>          this.attachments = attachments;
> @@ -68,7 +71,7 @@
>  
>      @Override
>      public boolean isXOPPackage() {
> -        return attachments != null && attachments.iterator().hasNext();
> +        return attachments != null;
>      }
>  
>      private DataSource getAttachmentDataSource(String contentId) {
> @@ -78,7 +81,14 @@
>              } catch (UnsupportedEncodingException ue) {
>                  contentId = contentId.substring(4);
>              }
> +            return new LazyDataSource(contentId, attachments);
> +        } else {
> +            try {
> +                return new URLDataSource(new URL(contentId));
> +            } catch (MalformedURLException e) {
> +                throw new Fault(e);
> +            }
>          }
> -        return new LazyDataSource(contentId, attachments);
> +        
>      }
>  }
>
> Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java
> URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java?view=diff&rev=533897&r1=533896&r2=533897
> ==============================================================================
> --- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java (original)
> +++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java Mon Apr 30 17:56:07 2007
> @@ -22,6 +22,7 @@
>  import java.io.ByteArrayOutputStream;
>  import java.io.InputStream;
>  import java.io.OutputStream;
> +import java.net.URL;
>  import java.util.Collection;
>  import java.util.HashMap;
>  import java.util.Map;
> @@ -33,6 +34,7 @@
>  import org.apache.cxf.helpers.IOUtils;
>  import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
>  import org.apache.cxf.message.Attachment;
> +import org.apache.cxf.message.ExchangeImpl;
>  import org.apache.cxf.message.Message;
>  import org.apache.cxf.message.MessageImpl;
>  import org.apache.cxf.service.model.EndpointInfo;
> @@ -40,10 +42,16 @@
>  import org.apache.cxf.transport.Conduit;
>  import org.apache.cxf.transport.ConduitInitiator;
>  import org.apache.cxf.transport.ConduitInitiatorManager;
> +import org.apache.cxf.transport.Destination;
> +import org.apache.cxf.transport.DestinationFactory;
> +import org.apache.cxf.transport.DestinationFactoryManager;
> +import org.apache.cxf.transport.MessageObserver;
>  import org.junit.Test;
>  
>  public class MtomServerTest extends AbstractCXFTest {
>      
> +    private static final String HTTP_ID = "http://schemas.xmlsoap.org/wsdl/http/";
> +    
>      @Test
>      public void testMtomRequest() throws Exception {
>          JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
> @@ -56,7 +64,7 @@
>          sf.setProperties(props);
>          sf.create();
>  
> -        EndpointInfo ei = new EndpointInfo(null, "http://schemas.xmlsoap.org/wsdl/http");
> +        EndpointInfo ei = new EndpointInfo(null, HTTP_ID);
>          ei.setAddress(address);
>  
>          ConduitInitiatorManager conduitMgr = getBus().getExtension(ConduitInitiatorManager.class);
> @@ -105,9 +113,120 @@
>          assertEquals(37448, out.size());
>      }
>  
> +    @Test
> +    public void testURLBasedAttachment() throws Exception {
> +        JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
> +        sf.setServiceBean(new EchoService());
> +        sf.setBus(getBus());
> +        String address = "http://localhost:9036/EchoService";
> +        sf.setAddress(address);
> +        Map<String, Object> props = new HashMap<String, Object>();
> +        props.put(Message.MTOM_ENABLED, "true");
> +        sf.setProperties(props);
> +        sf.create();
> +        
> +        servStatic(getClass().getResource("mtom-policy.xsd"), 
> +                   "http://localhost:9036/policy.xsd");
> +        
> +
> +
> +        EndpointInfo ei = new EndpointInfo(null, HTTP_ID);
> +        ei.setAddress(address);
> +
> +        ConduitInitiatorManager conduitMgr = getBus().getExtension(ConduitInitiatorManager.class);
> +        ConduitInitiator conduitInit = conduitMgr.getConduitInitiator("http://schemas.xmlsoap.org/soap/http");
> +        Conduit conduit = conduitInit.getConduit(ei);
> +
> +        TestMessageObserver obs = new TestMessageObserver();
> +        conduit.setMessageObserver(obs);
> +        
> +        Message m = new MessageImpl();
> +        String ct = "multipart/related; type=\"application/xop+xml\"; "
> +                    + "start=\"<so...@xfire.codehaus.org>\"; "
> +                    + "start-info=\"text/xml; charset=utf-8\"; "
> +                    + "boundary=\"----=_Part_4_701508.1145579811786\"";
> +
> +        m.put(Message.CONTENT_TYPE, ct);
> +        conduit.prepare(m);
> +
> +        OutputStream os = m.getContent(OutputStream.class);
> +        InputStream is = getResourceAsStream("request-url-attachment");
> +        if (is == null) {
> +            throw new RuntimeException("Could not find resource " + "request");
> +        }
> +
> +        IOUtils.copy(is, os);
> +
> +        os.flush();
> +        is.close();
> +        os.close();
> +        
> +        byte[] res = obs.getResponseStream().toByteArray();
> +        MessageImpl resMsg = new MessageImpl();
> +        resMsg.setContent(InputStream.class, new ByteArrayInputStream(res));
> +        resMsg.put(Message.CONTENT_TYPE, obs.getResponseContentType());
> +        AttachmentDeserializer deserializer = new AttachmentDeserializer(resMsg);
> +        deserializer.initializeAttachments();
> +
> +        Collection<Attachment> attachments = resMsg.getAttachments();
> +        assertNotNull(attachments);
> +        assertEquals(1, attachments.size());
> +
> +        Attachment inAtt = attachments.iterator().next();
> +        ByteArrayOutputStream out = new ByteArrayOutputStream();
> +        IOUtils.copy(inAtt.getDataHandler().getInputStream(), out);
> +        out.close();
> +        assertEquals(197, out.size());
> +    }
> +
>      @Override
>      protected Bus createBus() throws BusException {
>          return BusFactory.getDefaultBus();
>      }
> +    
> +    /**
> +     * Serve static file
> +     */
> +    private void servStatic(final URL resource, 
> +                                   final String add) throws Exception {
> +        Bus bus = getBus();
> +        DestinationFactoryManager dfm = bus.getExtension(DestinationFactoryManager.class);
> +        DestinationFactory df = dfm
> +            .getDestinationFactory("http://cxf.apache.org/transports/http/configuration");
> +
> +        EndpointInfo ei = new EndpointInfo();
> +        ei.setAddress(add);
> +
> +        Destination d = df.getDestination(ei);
> +        d.setMessageObserver(new MessageObserver() {
> +
> +            public void onMessage(Message message) {
> +                try {
> +                    // HTTP seems to need this right now...
> +                    ExchangeImpl ex = new ExchangeImpl();
> +                    ex.setInMessage(message);
> +
> +                    Conduit backChannel = message.getDestination().getBackChannel(message, null, null);
> +
> +                    MessageImpl res = new MessageImpl();
> +                    res.put(Message.CONTENT_TYPE, "text/xml");
> +                    backChannel.prepare(res);
> +
> +                    OutputStream out = res.getContent(OutputStream.class);
> +                    InputStream is = resource.openStream();
> +                    IOUtils.copy(is, out, 2048);
> +
> +                    out.flush();
> +
> +                    out.close();
> +                    is.close();
> +
> +                    backChannel.close(res);
> +                } catch (Exception e) {
> +                    e.printStackTrace();
> +                }
> +            }
>  
> +        });
> +    }
>  }
>
> Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment
> URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment?view=auto&rev=533897
> ==============================================================================
> --- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment (added)
> +++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment Mon Apr 30 17:56:07 2007
> @@ -0,0 +1,19 @@
> +
> +------=_Part_4_701508.1145579811786
> +Content-Type: text/xml
> +Content-Transfer-Encoding: binary
> +Content-ID: <echo.xml>
> +
> +<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> + <env:Body>
> +  <m:echo xmlns:m="http://mtom.systest.cxf.apache.org">
> +    <m:Data>
> +      <m:someData><xop:Include 
> +        xmlns:xop='http://www.w3.org/2004/08/xop/include' 
> +        href='http://localhost:9036/policy.xsd'/>
> +      </m:someData>
> +    </m:Data>
> +  </m:echo>
> + </env:Body>
> +</env:Envelope>
> +------=_Part_4_701508.1145579811786--
>
> Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment
> ------------------------------------------------------------------------------
>     svn:executable = *
>
>
>
>   


Re: svn commit: r533897 - in /incubator/cxf/trunk: rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/ systests/src/test/java/org/apache/cxf/systest/mtom/

Posted by James Mao <ja...@iona.com>.
Hi Dan,

I saw this after i updated to the latest trunk

Running org.apache.cxf.systest.mtom.MtomServerTest
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 2.475 
sec <<< FA
ILURE!
testURLBasedAttachment(org.apache.cxf.systest.mtom.MtomServerTest)  Time 
elapsed
: 0.265 sec  <<< FAILURE!
java.lang.AssertionError: expected:<197> but was:<200>
        at org.junit.Assert.fail(Assert.java:71)
        at org.junit.Assert.failNotEquals(Assert.java:451)
        at org.junit.Assert.assertEquals(Assert.java:99)
        at org.junit.Assert.assertEquals(Assert.java:116)



James.



dandiep@apache.org wrote:
> Author: dandiep
> Date: Mon Apr 30 17:56:07 2007
> New Revision: 533897
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=533897
> Log:
> Some fixes to allow the AttachmentUnarshaller read XOP packages
> that use a URL instead of a CID.
>
>
> Added:
>     incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment   (with props)
> Modified:
>     incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java
>     incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java
>
> Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java
> URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java?view=diff&rev=533897&r1=533896&r2=533897
> ==============================================================================
> --- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java (original)
> +++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentUnmarshaller.java Mon Apr 30 17:56:07 2007
> @@ -23,12 +23,15 @@
>  import java.io.IOException;
>  import java.io.InputStream;
>  import java.io.UnsupportedEncodingException;
> +import java.net.MalformedURLException;
> +import java.net.URL;
>  import java.net.URLDecoder;
>  import java.util.Collection;
>  import java.util.logging.Logger;
>  
>  import javax.activation.DataHandler;
>  import javax.activation.DataSource;
> +import javax.activation.URLDataSource;
>  import javax.xml.bind.attachment.AttachmentUnmarshaller;
>  
>  import org.apache.cxf.attachment.LazyDataSource;
> @@ -41,7 +44,7 @@
>      private static final Logger LOG = LogUtils.getL7dLogger(JAXBAttachmentUnmarshaller.class);
>  
>      private Collection<Attachment> attachments;
> -
> +    
>      public JAXBAttachmentUnmarshaller(Collection<Attachment> attachments) {
>          super();
>          this.attachments = attachments;
> @@ -68,7 +71,7 @@
>  
>      @Override
>      public boolean isXOPPackage() {
> -        return attachments != null && attachments.iterator().hasNext();
> +        return attachments != null;
>      }
>  
>      private DataSource getAttachmentDataSource(String contentId) {
> @@ -78,7 +81,14 @@
>              } catch (UnsupportedEncodingException ue) {
>                  contentId = contentId.substring(4);
>              }
> +            return new LazyDataSource(contentId, attachments);
> +        } else {
> +            try {
> +                return new URLDataSource(new URL(contentId));
> +            } catch (MalformedURLException e) {
> +                throw new Fault(e);
> +            }
>          }
> -        return new LazyDataSource(contentId, attachments);
> +        
>      }
>  }
>
> Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java
> URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java?view=diff&rev=533897&r1=533896&r2=533897
> ==============================================================================
> --- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java (original)
> +++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/MtomServerTest.java Mon Apr 30 17:56:07 2007
> @@ -22,6 +22,7 @@
>  import java.io.ByteArrayOutputStream;
>  import java.io.InputStream;
>  import java.io.OutputStream;
> +import java.net.URL;
>  import java.util.Collection;
>  import java.util.HashMap;
>  import java.util.Map;
> @@ -33,6 +34,7 @@
>  import org.apache.cxf.helpers.IOUtils;
>  import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
>  import org.apache.cxf.message.Attachment;
> +import org.apache.cxf.message.ExchangeImpl;
>  import org.apache.cxf.message.Message;
>  import org.apache.cxf.message.MessageImpl;
>  import org.apache.cxf.service.model.EndpointInfo;
> @@ -40,10 +42,16 @@
>  import org.apache.cxf.transport.Conduit;
>  import org.apache.cxf.transport.ConduitInitiator;
>  import org.apache.cxf.transport.ConduitInitiatorManager;
> +import org.apache.cxf.transport.Destination;
> +import org.apache.cxf.transport.DestinationFactory;
> +import org.apache.cxf.transport.DestinationFactoryManager;
> +import org.apache.cxf.transport.MessageObserver;
>  import org.junit.Test;
>  
>  public class MtomServerTest extends AbstractCXFTest {
>      
> +    private static final String HTTP_ID = "http://schemas.xmlsoap.org/wsdl/http/";
> +    
>      @Test
>      public void testMtomRequest() throws Exception {
>          JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
> @@ -56,7 +64,7 @@
>          sf.setProperties(props);
>          sf.create();
>  
> -        EndpointInfo ei = new EndpointInfo(null, "http://schemas.xmlsoap.org/wsdl/http");
> +        EndpointInfo ei = new EndpointInfo(null, HTTP_ID);
>          ei.setAddress(address);
>  
>          ConduitInitiatorManager conduitMgr = getBus().getExtension(ConduitInitiatorManager.class);
> @@ -105,9 +113,120 @@
>          assertEquals(37448, out.size());
>      }
>  
> +    @Test
> +    public void testURLBasedAttachment() throws Exception {
> +        JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
> +        sf.setServiceBean(new EchoService());
> +        sf.setBus(getBus());
> +        String address = "http://localhost:9036/EchoService";
> +        sf.setAddress(address);
> +        Map<String, Object> props = new HashMap<String, Object>();
> +        props.put(Message.MTOM_ENABLED, "true");
> +        sf.setProperties(props);
> +        sf.create();
> +        
> +        servStatic(getClass().getResource("mtom-policy.xsd"), 
> +                   "http://localhost:9036/policy.xsd");
> +        
> +
> +
> +        EndpointInfo ei = new EndpointInfo(null, HTTP_ID);
> +        ei.setAddress(address);
> +
> +        ConduitInitiatorManager conduitMgr = getBus().getExtension(ConduitInitiatorManager.class);
> +        ConduitInitiator conduitInit = conduitMgr.getConduitInitiator("http://schemas.xmlsoap.org/soap/http");
> +        Conduit conduit = conduitInit.getConduit(ei);
> +
> +        TestMessageObserver obs = new TestMessageObserver();
> +        conduit.setMessageObserver(obs);
> +        
> +        Message m = new MessageImpl();
> +        String ct = "multipart/related; type=\"application/xop+xml\"; "
> +                    + "start=\"<so...@xfire.codehaus.org>\"; "
> +                    + "start-info=\"text/xml; charset=utf-8\"; "
> +                    + "boundary=\"----=_Part_4_701508.1145579811786\"";
> +
> +        m.put(Message.CONTENT_TYPE, ct);
> +        conduit.prepare(m);
> +
> +        OutputStream os = m.getContent(OutputStream.class);
> +        InputStream is = getResourceAsStream("request-url-attachment");
> +        if (is == null) {
> +            throw new RuntimeException("Could not find resource " + "request");
> +        }
> +
> +        IOUtils.copy(is, os);
> +
> +        os.flush();
> +        is.close();
> +        os.close();
> +        
> +        byte[] res = obs.getResponseStream().toByteArray();
> +        MessageImpl resMsg = new MessageImpl();
> +        resMsg.setContent(InputStream.class, new ByteArrayInputStream(res));
> +        resMsg.put(Message.CONTENT_TYPE, obs.getResponseContentType());
> +        AttachmentDeserializer deserializer = new AttachmentDeserializer(resMsg);
> +        deserializer.initializeAttachments();
> +
> +        Collection<Attachment> attachments = resMsg.getAttachments();
> +        assertNotNull(attachments);
> +        assertEquals(1, attachments.size());
> +
> +        Attachment inAtt = attachments.iterator().next();
> +        ByteArrayOutputStream out = new ByteArrayOutputStream();
> +        IOUtils.copy(inAtt.getDataHandler().getInputStream(), out);
> +        out.close();
> +        assertEquals(197, out.size());
> +    }
> +
>      @Override
>      protected Bus createBus() throws BusException {
>          return BusFactory.getDefaultBus();
>      }
> +    
> +    /**
> +     * Serve static file
> +     */
> +    private void servStatic(final URL resource, 
> +                                   final String add) throws Exception {
> +        Bus bus = getBus();
> +        DestinationFactoryManager dfm = bus.getExtension(DestinationFactoryManager.class);
> +        DestinationFactory df = dfm
> +            .getDestinationFactory("http://cxf.apache.org/transports/http/configuration");
> +
> +        EndpointInfo ei = new EndpointInfo();
> +        ei.setAddress(add);
> +
> +        Destination d = df.getDestination(ei);
> +        d.setMessageObserver(new MessageObserver() {
> +
> +            public void onMessage(Message message) {
> +                try {
> +                    // HTTP seems to need this right now...
> +                    ExchangeImpl ex = new ExchangeImpl();
> +                    ex.setInMessage(message);
> +
> +                    Conduit backChannel = message.getDestination().getBackChannel(message, null, null);
> +
> +                    MessageImpl res = new MessageImpl();
> +                    res.put(Message.CONTENT_TYPE, "text/xml");
> +                    backChannel.prepare(res);
> +
> +                    OutputStream out = res.getContent(OutputStream.class);
> +                    InputStream is = resource.openStream();
> +                    IOUtils.copy(is, out, 2048);
> +
> +                    out.flush();
> +
> +                    out.close();
> +                    is.close();
> +
> +                    backChannel.close(res);
> +                } catch (Exception e) {
> +                    e.printStackTrace();
> +                }
> +            }
>  
> +        });
> +    }
>  }
>
> Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment
> URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment?view=auto&rev=533897
> ==============================================================================
> --- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment (added)
> +++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment Mon Apr 30 17:56:07 2007
> @@ -0,0 +1,19 @@
> +
> +------=_Part_4_701508.1145579811786
> +Content-Type: text/xml
> +Content-Transfer-Encoding: binary
> +Content-ID: <echo.xml>
> +
> +<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> + <env:Body>
> +  <m:echo xmlns:m="http://mtom.systest.cxf.apache.org">
> +    <m:Data>
> +      <m:someData><xop:Include 
> +        xmlns:xop='http://www.w3.org/2004/08/xop/include' 
> +        href='http://localhost:9036/policy.xsd'/>
> +      </m:someData>
> +    </m:Data>
> +  </m:echo>
> + </env:Body>
> +</env:Envelope>
> +------=_Part_4_701508.1145579811786--
>
> Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/request-url-attachment
> ------------------------------------------------------------------------------
>     svn:executable = *
>
>
>
>