You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by Daniel Kulp <da...@iona.com> on 2006/10/02 15:51:54 UTC

Re: svn commit: r451929 - in /incubator/cxf/trunk: rt/core/src/main/java/org/apache/cxf/binding/attachment/ rt/core/src/main/java/org/apache/cxf/interceptor/ rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/ rt/frontend/jaxws/src/main/java/...


>  add JAXBElement check in wrap in interceptor

I'm -1 to this change.   The JAXBElement is a JAXB specific thing and thus 
goes into the JAXB data binding or into the JAX-WS frontend.    It should not 
be going into the core interceptors that need to work for other databindings 
and frontends.


That said, thanks for fixing the MTOM test.   Looks much better.

Dan



>
> Added:
>    
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>AttachmentOutInterceptor.java   (with props)
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>MultipartMessageInterceptor.java   (with props) Modified:
>    
> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/attachment
>/AttachmentImpl.java
> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Wrappe
>dInInterceptor.java
> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/a
>ttachment/JAXBAttachmentMarshaller.java
> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/En
>dpointInvocationHandler.java
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Clie
>ntServerMtomXopTest.java
>
> Modified:
> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/attachment
>/AttachmentImpl.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/
>apache/cxf/binding/attachment/AttachmentImpl.java?view=diff&rev=451929&r1=45
>1928&r2=451929
> ===========================================================================
>=== ---
> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/attachment
>/AttachmentImpl.java (original) +++
> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/attachment
>/AttachmentImpl.java Mon Oct  2 02:28:29 2006 @@ -48,11 +48,11 @@
>      }
>
>      public void setHeader(String name, String value) {
> -        headers.put(name, value);
> +        headers.put(name.toLowerCase(), value);
>      }
>
>      public String getHeader(String name) {
> -        return headers.get(name);
> +        return headers.get(name.toLowerCase());
>      }
>
>      public Iterator<String> getHeaderNames() {
>
> Modified:
> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Wrappe
>dInInterceptor.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/
>apache/cxf/interceptor/WrappedInInterceptor.java?view=diff&rev=451929&r1=451
>928&r2=451929
> ===========================================================================
>=== ---
> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Wrappe
>dInInterceptor.java (original) +++
> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Wrappe
>dInInterceptor.java Mon Oct  2 02:28:29 2006 @@ -23,6 +23,7 @@
>  import java.util.List;
>  import java.util.ResourceBundle;
>
> +import javax.xml.bind.JAXBElement;
>  import javax.xml.stream.XMLStreamException;
>  import javax.xml.stream.XMLStreamReader;
>
> @@ -90,6 +91,9 @@
>          if (operation.isUnwrapped() || operation.isUnwrappedCapable()) {
>              objects = new ArrayList<Object>();
>              Object wrappedObject = dr.read(message);
> +            if (wrappedObject instanceof JAXBElement) {
> +                wrappedObject = ((JAXBElement) wrappedObject).getValue();
> +            }
>              objects.add(wrappedObject);
>          } else {
>              // Unwrap each part individually if we don't have a wrapper
>
> Modified:
> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/a
>ttachment/JAXBAttachmentMarshaller.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/ma
>in/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentMarshaller.java?view=di
>ff&rev=451929&r1=451928&r2=451929
> ===========================================================================
>=== ---
> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/a
>ttachment/JAXBAttachmentMarshaller.java (original) +++
> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/a
>ttachment/JAXBAttachmentMarshaller.java Mon Oct  2 02:28:29 2006 @@ -53,7
> +53,7 @@
>              return null;
>          }
>          ByteDataSource source = new ByteDataSource(data, offset, length);
> -        if (mimeType == null) {
> +        if (mimeType != null) {
>              source.setContentType(mimeType);
>          } else {
>              source.setContentType("application/octet-stream");
>
> Modified:
> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/En
>dpointInvocationHandler.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main
>/java/org/apache/cxf/jaxws/EndpointInvocationHandler.java?view=diff&rev=4519
>29&r1=451928&r2=451929
> ===========================================================================
>=== ---
> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/En
>dpointInvocationHandler.java (original) +++
> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/En
>dpointInvocationHandler.java Mon Oct  2 02:28:29 2006 @@ -52,7 +52,7 @@
>
>      private Client client;
>
> -    EndpointInvocationHandler(Client c, Binding b) {
> +    public EndpointInvocationHandler(Client c, Binding b) {
>          super(b);
>          endpoint = c.getEndpoint();
>          client = c;
>
> Modified:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Clie
>ntServerMtomXopTest.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org
>/apache/cxf/systest/mtom/ClientServerMtomXopTest.java?view=diff&rev=451929&r
>1=451928&r2=451929
> ===========================================================================
>=== ---
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Clie
>ntServerMtomXopTest.java (original) +++
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Clie
>ntServerMtomXopTest.java Mon Oct  2 02:28:29 2006 @@ -19,38 +19,80 @@
>  package org.apache.cxf.systest.mtom;
>
>  import java.io.InputStream;
> +import java.lang.reflect.InvocationHandler;
> +import java.lang.reflect.Proxy;
>  import java.lang.reflect.UndeclaredThrowableException;
> +import java.util.List;
>
>  import javax.activation.DataHandler;
>  import javax.activation.DataSource;
>  import javax.mail.util.ByteArrayDataSource;
> -import javax.xml.ws.Binding;
> +import javax.xml.namespace.QName;
>  import javax.xml.ws.BindingProvider;
> -import javax.xml.ws.Endpoint;
>  import javax.xml.ws.Holder;
>  import javax.xml.ws.soap.SOAPBinding;
>
>  import junit.framework.Test;
>  import junit.framework.TestSuite;
>
> +import org.apache.cxf.Bus;
> +import org.apache.cxf.BusFactoryHelper;
> +import org.apache.cxf.binding.soap.SoapBinding;
> +import org.apache.cxf.binding.soap.interceptor.AttachmentOutInterceptor;
> +import
> org.apache.cxf.binding.soap.interceptor.MultipartMessageInterceptor;
> +import org.apache.cxf.endpoint.Client;
> +import org.apache.cxf.endpoint.ClientImpl;
> +import org.apache.cxf.endpoint.ServerImpl;
> +import org.apache.cxf.interceptor.Interceptor;
> +import org.apache.cxf.jaxws.EndpointInvocationHandler;
> +import org.apache.cxf.jaxws.JAXWSMethodInvoker;
> +import org.apache.cxf.jaxws.binding.soap.SOAPBindingImpl;
> +import org.apache.cxf.jaxws.support.JaxWsEndpointImpl;
> +import org.apache.cxf.jaxws.support.JaxWsImplementorInfo;
> +import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
>  import org.apache.cxf.mime.Hello;
> -import org.apache.cxf.mime.HelloService;
>  import org.apache.cxf.mtom_xop.HelloImpl;
> +import org.apache.cxf.service.Service;
> +import org.apache.cxf.service.factory.AbstractServiceFactoryBean;
> +import org.apache.cxf.service.model.EndpointInfo;
> +import org.apache.cxf.service.model.ServiceInfo;
>  import org.apache.cxf.systest.common.ClientServerSetupBase;
>  import org.apache.cxf.systest.common.ClientServerTestBase;
>  import org.apache.cxf.systest.common.TestServerBase;
> +import org.apache.cxf.transport.ChainInitiationObserver;
> +import org.apache.cxf.transport.MessageObserver;
>
>  public class ClientServerMtomXopTest extends ClientServerTestBase {
>
> +    public static final QName HELLO_PORT = new
> QName("http://cxf.apache.org/mime", "HelloPort"); +    public static final
> QName HELLO_SERVICE = new QName("http://cxf.apache.org/mime",
> "HelloService"); +
>      public static class Server extends TestServerBase {
>
>          protected void run() {
>              Object implementor = new HelloImpl();
>              String address = "http://localhost:9036/mime-test";
> -            Endpoint ep = Endpoint.publish(address, implementor);
> -            Binding binding = ep.getBinding();
> -            assertTrue(binding instanceof SOAPBinding);
> -            ((SOAPBinding)binding).setMTOMEnabled(true);
> +            try {
> +                Bus bus = BusFactoryHelper.newInstance().getDefaultBus();
> +                JaxWsImplementorInfo implInfo = new
> JaxWsImplementorInfo(implementor.getClass()); +               
> AbstractServiceFactoryBean serviceFactory = new
> JaxWsServiceFactoryBean(implInfo); +               
> serviceFactory.setBus(bus);
> +                Service service = serviceFactory.create();
> +                QName endpointName = implInfo.getEndpointName();
> +                EndpointInfo ei =
> service.getServiceInfo().getEndpoint(endpointName); +               
> service.setInvoker(new JAXWSMethodInvoker(implementor)); +               
> org.apache.cxf.endpoint.EndpointImpl endpoint = new JaxWsEndpointImpl(bus,
> service, ei); +                SOAPBinding jaxWsSoapBinding = new
> SOAPBindingImpl((SoapBinding) endpoint.getBinding()); +               
> jaxWsSoapBinding.setMTOMEnabled(true);
> +               
> modifyBindingInterceptors(endpoint.getBinding().getInInterceptors(),
> endpoint.getBinding() +                        .getOutInterceptors());
> +                endpoint.getEndpointInfo().setAddress(address);
> +                MessageObserver observer = new
> ChainInitiationObserver(endpoint, bus); +                ServerImpl server
> = new ServerImpl(bus, endpoint, observer); +                server.start();
> +            } catch (Exception e) {
> +                Thread.currentThread().interrupt();
> +            }
>          }
>
>          public static void main(String args[]) {
> @@ -76,11 +118,7 @@
>      }
>
>      public void testMtomSWA() throws Exception {
> -        HelloService hs = new HelloService();
> -        Hello hello = hs.getPort(Hello.class);
> -        Binding binding = ((BindingProvider)hello).getBinding();
> -        assertTrue(binding instanceof SOAPBinding);
> -        ((SOAPBinding)binding).setMTOMEnabled(true);
> +        Hello hello = createPort(HELLO_SERVICE, HELLO_PORT, Hello.class);
>          try {
>              InputStream pre =
> this.getClass().getResourceAsStream("/wsdl/mtom_xop.wsdl"); long fileSize =
> 0;
> @@ -89,7 +127,7 @@
>              }
>
>              ByteArrayDataSource bads = new
> ByteArrayDataSource(this.getClass().getResourceAsStream( -                 
>           "/wsdl/mtom_xop.wsdl"), "application/octet-stream"); +           
>         "/wsdl/mtom_xop.wsdl"), "application/octet-stream"); DataHandler dh
> = new DataHandler(bads);
>              DataHandler dhResp = hello.claimForm(dh);
>              DataSource ds = dhResp.getDataSource();
> @@ -105,11 +143,7 @@
>      }
>
>      public void testMtomXop() throws Exception {
> -        HelloService hs = new HelloService();
> -        Hello hello = hs.getPort(Hello.class);
> -        Binding binding = ((BindingProvider)hello).getBinding();
> -        assertTrue(binding instanceof SOAPBinding);
> -        ((SOAPBinding)binding).setMTOMEnabled(true);
> +        Hello hello = createPort(HELLO_SERVICE, HELLO_PORT, Hello.class);
>          try {
>              InputStream pre =
> this.getClass().getResourceAsStream("/wsdl/mtom_xop.wsdl"); long fileSize =
> 0;
> @@ -126,6 +160,56 @@
>              assertEquals("attachinfo changed", target, new
> String(param.value)); } catch (UndeclaredThrowableException ex) {
>              throw (Exception) ex.getCause();
> +        }
> +    }
> +
> +    private static <T> T createPort(QName serviceName, QName portName,
> Class<T> serviceEndpointInterface) +        throws Exception {
> +        Bus bus = BusFactoryHelper.newInstance().getDefaultBus();
> +        JaxWsServiceFactoryBean serviceFactory = new
> JaxWsServiceFactoryBean(); +        serviceFactory.setBus(bus);
> +        serviceFactory.setServiceName(serviceName);
> +        serviceFactory.setServiceClass(serviceEndpointInterface);
> +        Service service = serviceFactory.create();
> +        ServiceInfo si = service.getServiceInfo();
> +        EndpointInfo ei = null;
> +        ei = si.getEndpoint(portName);
> +        JaxWsEndpointImpl jaxwsEndpoint = new JaxWsEndpointImpl(bus,
> service, ei); +        SOAPBinding jaxWsSoapBinding = new
> SOAPBindingImpl((SoapBinding) jaxwsEndpoint.getBinding()); +       
> jaxWsSoapBinding.setMTOMEnabled(true);
> +       
> modifyBindingInterceptors(jaxwsEndpoint.getBinding().getInInterceptors(),
> jaxwsEndpoint.getBinding() +                .getOutInterceptors());
> +        Client client = new ClientImpl(bus, jaxwsEndpoint);
> +        InvocationHandler ih = new EndpointInvocationHandler(client,
> jaxwsEndpoint.getJaxwsBinding()); +        Object obj =
> Proxy.newProxyInstance(serviceEndpointInterface.getClassLoader(), new
> Class[] { +            serviceEndpointInterface, BindingProvider.class },
> ih); +        return serviceEndpointInterface.cast(obj);
> +    }
> +
> +    private static void modifyBindingInterceptors(List<Interceptor> in,
> List<Interceptor> out) { +        Interceptor inRemoved = null;
> +        Interceptor outRemoved = null;
> +        for (Interceptor i : in) {
> +            if (i instanceof MultipartMessageInterceptor) {
> +                inRemoved = i;
> +            }
> +        }
> +        if (inRemoved != null) {
> +            in.add(new TestMultipartMessageInterceptor());
> +            in.remove(inRemoved);
> +        } else {
> +            fail("hasn't found MultipartMessageInterceptor in soap
> binding"); +        }
> +        for (Interceptor o : out) {
> +            if (o instanceof AttachmentOutInterceptor) {
> +                outRemoved = o;
> +            }
> +        }
> +        if (outRemoved != null) {
> +            out.add(new TestAttachmentOutInterceptor());
> +            out.remove(outRemoved);
> +        } else {
> +            fail("hasn't found AttachmentOutInterceptor in soap binding");
>          }
>      }
>
>
> Added:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>AttachmentOutInterceptor.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org
>/apache/cxf/systest/mtom/TestAttachmentOutInterceptor.java?view=auto&rev=451
>929
> ===========================================================================
>=== ---
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>AttachmentOutInterceptor.java (added) +++
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>AttachmentOutInterceptor.java Mon Oct  2 02:28:29 2006 @@ -0,0 +1,40 @@
> +/**
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements. See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership. The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied. See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +
> +package org.apache.cxf.systest.mtom;
> +
> +import junit.framework.TestCase;
> +
> +import org.apache.cxf.binding.soap.SoapMessage;
> +import org.apache.cxf.binding.soap.interceptor.AttachmentOutInterceptor;
> +import org.apache.cxf.interceptor.Fault;
> +import org.apache.cxf.message.Attachment;
> +
> +public class TestAttachmentOutInterceptor extends AttachmentOutInterceptor
> { +
> +    public void handleMessage(SoapMessage message) throws Fault {
> +        super.handleMessage(message);
> +        TestCase.assertEquals("check attachment count",
> message.getAttachments().size(), 1); +        Attachment att =
> message.getAttachments().iterator().next(); +       
> TestCase.assertNotNull("Attachment is null", att);
> +        TestCase.assertNotNull("Attachment content-type is null",
> att.getDataHandler().getDataSource() +                .getContentType());
> +    }
> +
> +}
>
> Propchange:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>AttachmentOutInterceptor.java
> ---------------------------------------------------------------------------
>--- svn:eol-style = native
>
> Propchange:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>AttachmentOutInterceptor.java
> ---------------------------------------------------------------------------
>--- svn:keywords = Rev Date
>
> Added:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>MultipartMessageInterceptor.java URL:
> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org
>/apache/cxf/systest/mtom/TestMultipartMessageInterceptor.java?view=auto&rev=
>451929
> ===========================================================================
>=== ---
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>MultipartMessageInterceptor.java (added) +++
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>MultipartMessageInterceptor.java Mon Oct  2 02:28:29 2006 @@ -0,0 +1,36 @@
> +/**
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements. See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership. The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied. See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +
> +package org.apache.cxf.systest.mtom;
> +
> +import junit.framework.TestCase;
> +
> +import org.apache.cxf.binding.soap.SoapMessage;
> +import
> org.apache.cxf.binding.soap.interceptor.MultipartMessageInterceptor;
> +import org.apache.cxf.interceptor.Fault;
> +import org.apache.cxf.jaxb.attachment.AttachmentDeserializer;
> +
> +public class TestMultipartMessageInterceptor extends
> MultipartMessageInterceptor { +
> +    public void handleMessage(SoapMessage message) throws Fault {
> +        super.handleMessage(message);
> +        AttachmentDeserializer ad =
> message.get(AttachmentDeserializer.class); +       
> TestCase.assertNotNull("Not MIME Message received, Attachment Deserializer
> hasn't been created", ad); +    }
> +}
>
> Propchange:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>MultipartMessageInterceptor.java
> ---------------------------------------------------------------------------
>--- svn:eol-style = native
>
> Propchange:
> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>MultipartMessageInterceptor.java
> ---------------------------------------------------------------------------
>--- svn:keywords = Rev Date

-- 
J. Daniel Kulp
Principal Engineer
IONA
P: 781-902-8727    C: 508-380-7194   F:781-902-8001
daniel.kulp@iona.com

Re: svn commit: r451929 - in /incubator/cxf/trunk: rt/core/src/main/java/org/apache/cxf/binding/attachment/ rt/core/src/main/java/org/apache/cxf/interceptor/ rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/attachment/ rt/frontend/jaxws/src/main/java/...

Posted by Dan Diephouse <da...@envoisolutions.com>.
I doubt that anyone's gone out and fixed this yet - but I've fixed in my 
tree. I'm stuck trying to get the XML binding to work correctly, but I 
have a large commit coming in soon with it...

- Dan

Daniel Kulp wrote:
>   
>>  add JAXBElement check in wrap in interceptor
>>     
>
> I'm -1 to this change.   The JAXBElement is a JAXB specific thing and thus 
> goes into the JAXB data binding or into the JAX-WS frontend.    It should not 
> be going into the core interceptors that need to work for other databindings 
> and frontends.
>
>
> That said, thanks for fixing the MTOM test.   Looks much better.
>
> Dan
>
>
>
>   
>> Added:
>>    
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>> AttachmentOutInterceptor.java   (with props)
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>> MultipartMessageInterceptor.java   (with props) Modified:
>>    
>> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/attachment
>> /AttachmentImpl.java
>> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Wrappe
>> dInInterceptor.java
>> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/a
>> ttachment/JAXBAttachmentMarshaller.java
>> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/En
>> dpointInvocationHandler.java
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Clie
>> ntServerMtomXopTest.java
>>
>> Modified:
>> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/attachment
>> /AttachmentImpl.java URL:
>> http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/
>> apache/cxf/binding/attachment/AttachmentImpl.java?view=diff&rev=451929&r1=45
>> 1928&r2=451929
>> ===========================================================================
>> === ---
>> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/attachment
>> /AttachmentImpl.java (original) +++
>> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/binding/attachment
>> /AttachmentImpl.java Mon Oct  2 02:28:29 2006 @@ -48,11 +48,11 @@
>>      }
>>
>>      public void setHeader(String name, String value) {
>> -        headers.put(name, value);
>> +        headers.put(name.toLowerCase(), value);
>>      }
>>
>>      public String getHeader(String name) {
>> -        return headers.get(name);
>> +        return headers.get(name.toLowerCase());
>>      }
>>
>>      public Iterator<String> getHeaderNames() {
>>
>> Modified:
>> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Wrappe
>> dInInterceptor.java URL:
>> http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/
>> apache/cxf/interceptor/WrappedInInterceptor.java?view=diff&rev=451929&r1=451
>> 928&r2=451929
>> ===========================================================================
>> === ---
>> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Wrappe
>> dInInterceptor.java (original) +++
>> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Wrappe
>> dInInterceptor.java Mon Oct  2 02:28:29 2006 @@ -23,6 +23,7 @@
>>  import java.util.List;
>>  import java.util.ResourceBundle;
>>
>> +import javax.xml.bind.JAXBElement;
>>  import javax.xml.stream.XMLStreamException;
>>  import javax.xml.stream.XMLStreamReader;
>>
>> @@ -90,6 +91,9 @@
>>          if (operation.isUnwrapped() || operation.isUnwrappedCapable()) {
>>              objects = new ArrayList<Object>();
>>              Object wrappedObject = dr.read(message);
>> +            if (wrappedObject instanceof JAXBElement) {
>> +                wrappedObject = ((JAXBElement) wrappedObject).getValue();
>> +            }
>>              objects.add(wrappedObject);
>>          } else {
>>              // Unwrap each part individually if we don't have a wrapper
>>
>> Modified:
>> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/a
>> ttachment/JAXBAttachmentMarshaller.java URL:
>> http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/ma
>> in/java/org/apache/cxf/jaxb/attachment/JAXBAttachmentMarshaller.java?view=di
>> ff&rev=451929&r1=451928&r2=451929
>> ===========================================================================
>> === ---
>> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/a
>> ttachment/JAXBAttachmentMarshaller.java (original) +++
>> incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/a
>> ttachment/JAXBAttachmentMarshaller.java Mon Oct  2 02:28:29 2006 @@ -53,7
>> +53,7 @@
>>              return null;
>>          }
>>          ByteDataSource source = new ByteDataSource(data, offset, length);
>> -        if (mimeType == null) {
>> +        if (mimeType != null) {
>>              source.setContentType(mimeType);
>>          } else {
>>              source.setContentType("application/octet-stream");
>>
>> Modified:
>> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/En
>> dpointInvocationHandler.java URL:
>> http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main
>> /java/org/apache/cxf/jaxws/EndpointInvocationHandler.java?view=diff&rev=4519
>> 29&r1=451928&r2=451929
>> ===========================================================================
>> === ---
>> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/En
>> dpointInvocationHandler.java (original) +++
>> incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/En
>> dpointInvocationHandler.java Mon Oct  2 02:28:29 2006 @@ -52,7 +52,7 @@
>>
>>      private Client client;
>>
>> -    EndpointInvocationHandler(Client c, Binding b) {
>> +    public EndpointInvocationHandler(Client c, Binding b) {
>>          super(b);
>>          endpoint = c.getEndpoint();
>>          client = c;
>>
>> Modified:
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Clie
>> ntServerMtomXopTest.java URL:
>> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org
>> /apache/cxf/systest/mtom/ClientServerMtomXopTest.java?view=diff&rev=451929&r
>> 1=451928&r2=451929
>> ===========================================================================
>> === ---
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Clie
>> ntServerMtomXopTest.java (original) +++
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Clie
>> ntServerMtomXopTest.java Mon Oct  2 02:28:29 2006 @@ -19,38 +19,80 @@
>>  package org.apache.cxf.systest.mtom;
>>
>>  import java.io.InputStream;
>> +import java.lang.reflect.InvocationHandler;
>> +import java.lang.reflect.Proxy;
>>  import java.lang.reflect.UndeclaredThrowableException;
>> +import java.util.List;
>>
>>  import javax.activation.DataHandler;
>>  import javax.activation.DataSource;
>>  import javax.mail.util.ByteArrayDataSource;
>> -import javax.xml.ws.Binding;
>> +import javax.xml.namespace.QName;
>>  import javax.xml.ws.BindingProvider;
>> -import javax.xml.ws.Endpoint;
>>  import javax.xml.ws.Holder;
>>  import javax.xml.ws.soap.SOAPBinding;
>>
>>  import junit.framework.Test;
>>  import junit.framework.TestSuite;
>>
>> +import org.apache.cxf.Bus;
>> +import org.apache.cxf.BusFactoryHelper;
>> +import org.apache.cxf.binding.soap.SoapBinding;
>> +import org.apache.cxf.binding.soap.interceptor.AttachmentOutInterceptor;
>> +import
>> org.apache.cxf.binding.soap.interceptor.MultipartMessageInterceptor;
>> +import org.apache.cxf.endpoint.Client;
>> +import org.apache.cxf.endpoint.ClientImpl;
>> +import org.apache.cxf.endpoint.ServerImpl;
>> +import org.apache.cxf.interceptor.Interceptor;
>> +import org.apache.cxf.jaxws.EndpointInvocationHandler;
>> +import org.apache.cxf.jaxws.JAXWSMethodInvoker;
>> +import org.apache.cxf.jaxws.binding.soap.SOAPBindingImpl;
>> +import org.apache.cxf.jaxws.support.JaxWsEndpointImpl;
>> +import org.apache.cxf.jaxws.support.JaxWsImplementorInfo;
>> +import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
>>  import org.apache.cxf.mime.Hello;
>> -import org.apache.cxf.mime.HelloService;
>>  import org.apache.cxf.mtom_xop.HelloImpl;
>> +import org.apache.cxf.service.Service;
>> +import org.apache.cxf.service.factory.AbstractServiceFactoryBean;
>> +import org.apache.cxf.service.model.EndpointInfo;
>> +import org.apache.cxf.service.model.ServiceInfo;
>>  import org.apache.cxf.systest.common.ClientServerSetupBase;
>>  import org.apache.cxf.systest.common.ClientServerTestBase;
>>  import org.apache.cxf.systest.common.TestServerBase;
>> +import org.apache.cxf.transport.ChainInitiationObserver;
>> +import org.apache.cxf.transport.MessageObserver;
>>
>>  public class ClientServerMtomXopTest extends ClientServerTestBase {
>>
>> +    public static final QName HELLO_PORT = new
>> QName("http://cxf.apache.org/mime", "HelloPort"); +    public static final
>> QName HELLO_SERVICE = new QName("http://cxf.apache.org/mime",
>> "HelloService"); +
>>      public static class Server extends TestServerBase {
>>
>>          protected void run() {
>>              Object implementor = new HelloImpl();
>>              String address = "http://localhost:9036/mime-test";
>> -            Endpoint ep = Endpoint.publish(address, implementor);
>> -            Binding binding = ep.getBinding();
>> -            assertTrue(binding instanceof SOAPBinding);
>> -            ((SOAPBinding)binding).setMTOMEnabled(true);
>> +            try {
>> +                Bus bus = BusFactoryHelper.newInstance().getDefaultBus();
>> +                JaxWsImplementorInfo implInfo = new
>> JaxWsImplementorInfo(implementor.getClass()); +               
>> AbstractServiceFactoryBean serviceFactory = new
>> JaxWsServiceFactoryBean(implInfo); +               
>> serviceFactory.setBus(bus);
>> +                Service service = serviceFactory.create();
>> +                QName endpointName = implInfo.getEndpointName();
>> +                EndpointInfo ei =
>> service.getServiceInfo().getEndpoint(endpointName); +               
>> service.setInvoker(new JAXWSMethodInvoker(implementor)); +               
>> org.apache.cxf.endpoint.EndpointImpl endpoint = new JaxWsEndpointImpl(bus,
>> service, ei); +                SOAPBinding jaxWsSoapBinding = new
>> SOAPBindingImpl((SoapBinding) endpoint.getBinding()); +               
>> jaxWsSoapBinding.setMTOMEnabled(true);
>> +               
>> modifyBindingInterceptors(endpoint.getBinding().getInInterceptors(),
>> endpoint.getBinding() +                        .getOutInterceptors());
>> +                endpoint.getEndpointInfo().setAddress(address);
>> +                MessageObserver observer = new
>> ChainInitiationObserver(endpoint, bus); +                ServerImpl server
>> = new ServerImpl(bus, endpoint, observer); +                server.start();
>> +            } catch (Exception e) {
>> +                Thread.currentThread().interrupt();
>> +            }
>>          }
>>
>>          public static void main(String args[]) {
>> @@ -76,11 +118,7 @@
>>      }
>>
>>      public void testMtomSWA() throws Exception {
>> -        HelloService hs = new HelloService();
>> -        Hello hello = hs.getPort(Hello.class);
>> -        Binding binding = ((BindingProvider)hello).getBinding();
>> -        assertTrue(binding instanceof SOAPBinding);
>> -        ((SOAPBinding)binding).setMTOMEnabled(true);
>> +        Hello hello = createPort(HELLO_SERVICE, HELLO_PORT, Hello.class);
>>          try {
>>              InputStream pre =
>> this.getClass().getResourceAsStream("/wsdl/mtom_xop.wsdl"); long fileSize =
>> 0;
>> @@ -89,7 +127,7 @@
>>              }
>>
>>              ByteArrayDataSource bads = new
>> ByteArrayDataSource(this.getClass().getResourceAsStream( -                 
>>           "/wsdl/mtom_xop.wsdl"), "application/octet-stream"); +           
>>         "/wsdl/mtom_xop.wsdl"), "application/octet-stream"); DataHandler dh
>> = new DataHandler(bads);
>>              DataHandler dhResp = hello.claimForm(dh);
>>              DataSource ds = dhResp.getDataSource();
>> @@ -105,11 +143,7 @@
>>      }
>>
>>      public void testMtomXop() throws Exception {
>> -        HelloService hs = new HelloService();
>> -        Hello hello = hs.getPort(Hello.class);
>> -        Binding binding = ((BindingProvider)hello).getBinding();
>> -        assertTrue(binding instanceof SOAPBinding);
>> -        ((SOAPBinding)binding).setMTOMEnabled(true);
>> +        Hello hello = createPort(HELLO_SERVICE, HELLO_PORT, Hello.class);
>>          try {
>>              InputStream pre =
>> this.getClass().getResourceAsStream("/wsdl/mtom_xop.wsdl"); long fileSize =
>> 0;
>> @@ -126,6 +160,56 @@
>>              assertEquals("attachinfo changed", target, new
>> String(param.value)); } catch (UndeclaredThrowableException ex) {
>>              throw (Exception) ex.getCause();
>> +        }
>> +    }
>> +
>> +    private static <T> T createPort(QName serviceName, QName portName,
>> Class<T> serviceEndpointInterface) +        throws Exception {
>> +        Bus bus = BusFactoryHelper.newInstance().getDefaultBus();
>> +        JaxWsServiceFactoryBean serviceFactory = new
>> JaxWsServiceFactoryBean(); +        serviceFactory.setBus(bus);
>> +        serviceFactory.setServiceName(serviceName);
>> +        serviceFactory.setServiceClass(serviceEndpointInterface);
>> +        Service service = serviceFactory.create();
>> +        ServiceInfo si = service.getServiceInfo();
>> +        EndpointInfo ei = null;
>> +        ei = si.getEndpoint(portName);
>> +        JaxWsEndpointImpl jaxwsEndpoint = new JaxWsEndpointImpl(bus,
>> service, ei); +        SOAPBinding jaxWsSoapBinding = new
>> SOAPBindingImpl((SoapBinding) jaxwsEndpoint.getBinding()); +       
>> jaxWsSoapBinding.setMTOMEnabled(true);
>> +       
>> modifyBindingInterceptors(jaxwsEndpoint.getBinding().getInInterceptors(),
>> jaxwsEndpoint.getBinding() +                .getOutInterceptors());
>> +        Client client = new ClientImpl(bus, jaxwsEndpoint);
>> +        InvocationHandler ih = new EndpointInvocationHandler(client,
>> jaxwsEndpoint.getJaxwsBinding()); +        Object obj =
>> Proxy.newProxyInstance(serviceEndpointInterface.getClassLoader(), new
>> Class[] { +            serviceEndpointInterface, BindingProvider.class },
>> ih); +        return serviceEndpointInterface.cast(obj);
>> +    }
>> +
>> +    private static void modifyBindingInterceptors(List<Interceptor> in,
>> List<Interceptor> out) { +        Interceptor inRemoved = null;
>> +        Interceptor outRemoved = null;
>> +        for (Interceptor i : in) {
>> +            if (i instanceof MultipartMessageInterceptor) {
>> +                inRemoved = i;
>> +            }
>> +        }
>> +        if (inRemoved != null) {
>> +            in.add(new TestMultipartMessageInterceptor());
>> +            in.remove(inRemoved);
>> +        } else {
>> +            fail("hasn't found MultipartMessageInterceptor in soap
>> binding"); +        }
>> +        for (Interceptor o : out) {
>> +            if (o instanceof AttachmentOutInterceptor) {
>> +                outRemoved = o;
>> +            }
>> +        }
>> +        if (outRemoved != null) {
>> +            out.add(new TestAttachmentOutInterceptor());
>> +            out.remove(outRemoved);
>> +        } else {
>> +            fail("hasn't found AttachmentOutInterceptor in soap binding");
>>          }
>>      }
>>
>>
>> Added:
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>> AttachmentOutInterceptor.java URL:
>> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org
>> /apache/cxf/systest/mtom/TestAttachmentOutInterceptor.java?view=auto&rev=451
>> 929
>> ===========================================================================
>> === ---
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>> AttachmentOutInterceptor.java (added) +++
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>> AttachmentOutInterceptor.java Mon Oct  2 02:28:29 2006 @@ -0,0 +1,40 @@
>> +/**
>> + * Licensed to the Apache Software Foundation (ASF) under one
>> + * or more contributor license agreements. See the NOTICE file
>> + * distributed with this work for additional information
>> + * regarding copyright ownership. The ASF licenses this file
>> + * to you under the Apache License, Version 2.0 (the
>> + * "License"); you may not use this file except in compliance
>> + * with the License. You may obtain a copy of the License at
>> + *
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing,
>> + * software distributed under the License is distributed on an
>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> + * KIND, either express or implied. See the License for the
>> + * specific language governing permissions and limitations
>> + * under the License.
>> + */
>> +
>> +package org.apache.cxf.systest.mtom;
>> +
>> +import junit.framework.TestCase;
>> +
>> +import org.apache.cxf.binding.soap.SoapMessage;
>> +import org.apache.cxf.binding.soap.interceptor.AttachmentOutInterceptor;
>> +import org.apache.cxf.interceptor.Fault;
>> +import org.apache.cxf.message.Attachment;
>> +
>> +public class TestAttachmentOutInterceptor extends AttachmentOutInterceptor
>> { +
>> +    public void handleMessage(SoapMessage message) throws Fault {
>> +        super.handleMessage(message);
>> +        TestCase.assertEquals("check attachment count",
>> message.getAttachments().size(), 1); +        Attachment att =
>> message.getAttachments().iterator().next(); +       
>> TestCase.assertNotNull("Attachment is null", att);
>> +        TestCase.assertNotNull("Attachment content-type is null",
>> att.getDataHandler().getDataSource() +                .getContentType());
>> +    }
>> +
>> +}
>>
>> Propchange:
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>> AttachmentOutInterceptor.java
>> ---------------------------------------------------------------------------
>> --- svn:eol-style = native
>>
>> Propchange:
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>> AttachmentOutInterceptor.java
>> ---------------------------------------------------------------------------
>> --- svn:keywords = Rev Date
>>
>> Added:
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>> MultipartMessageInterceptor.java URL:
>> http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org
>> /apache/cxf/systest/mtom/TestMultipartMessageInterceptor.java?view=auto&rev=
>> 451929
>> ===========================================================================
>> === ---
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>> MultipartMessageInterceptor.java (added) +++
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>> MultipartMessageInterceptor.java Mon Oct  2 02:28:29 2006 @@ -0,0 +1,36 @@
>> +/**
>> + * Licensed to the Apache Software Foundation (ASF) under one
>> + * or more contributor license agreements. See the NOTICE file
>> + * distributed with this work for additional information
>> + * regarding copyright ownership. The ASF licenses this file
>> + * to you under the Apache License, Version 2.0 (the
>> + * "License"); you may not use this file except in compliance
>> + * with the License. You may obtain a copy of the License at
>> + *
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing,
>> + * software distributed under the License is distributed on an
>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> + * KIND, either express or implied. See the License for the
>> + * specific language governing permissions and limitations
>> + * under the License.
>> + */
>> +
>> +package org.apache.cxf.systest.mtom;
>> +
>> +import junit.framework.TestCase;
>> +
>> +import org.apache.cxf.binding.soap.SoapMessage;
>> +import
>> org.apache.cxf.binding.soap.interceptor.MultipartMessageInterceptor;
>> +import org.apache.cxf.interceptor.Fault;
>> +import org.apache.cxf.jaxb.attachment.AttachmentDeserializer;
>> +
>> +public class TestMultipartMessageInterceptor extends
>> MultipartMessageInterceptor { +
>> +    public void handleMessage(SoapMessage message) throws Fault {
>> +        super.handleMessage(message);
>> +        AttachmentDeserializer ad =
>> message.get(AttachmentDeserializer.class); +       
>> TestCase.assertNotNull("Not MIME Message received, Attachment Deserializer
>> hasn't been created", ad); +    }
>> +}
>>
>> Propchange:
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>> MultipartMessageInterceptor.java
>> ---------------------------------------------------------------------------
>> --- svn:eol-style = native
>>
>> Propchange:
>> incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/mtom/Test
>> MultipartMessageInterceptor.java
>> ---------------------------------------------------------------------------
>> --- svn:keywords = Rev Date
>>     
>
>   


-- 
Dan Diephouse
Envoi Solutions
http://envoisolutions.com
http://netzooid.com/blog