You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ff...@apache.org on 2012/09/03 11:03:05 UTC

svn commit: r1380176 - in /cxf/trunk: rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/ systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/ testutils/src/main/resources/wsdl/

Author: ffang
Date: Mon Sep  3 09:03:04 2012
New Revision: 1380176

URL: http://svn.apache.org/viewvc?rev=1380176&view=rev
Log:
[CXF-4494]JMSDestination need set binary mode if server send MTOM message back

Modified:
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
    cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSClientServerTest.java
    cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSMTOMImpl.java
    cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/Server.java
    cxf/trunk/testutils/src/main/resources/wsdl/jms_test_mtom.wsdl

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java?rev=1380176&r1=1380175&r2=1380176&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java Mon Sep  3 09:03:04 2012
@@ -54,6 +54,7 @@ import org.apache.cxf.interceptor.OneWay
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageImpl;
+import org.apache.cxf.message.MessageUtils;
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.transport.AbstractConduit;
 import org.apache.cxf.transport.AbstractMultiplexDestination;
@@ -301,7 +302,9 @@ public class JMSDestination extends Abst
             final javax.jms.Message request = (javax.jms.Message)inMessage
                 .get(JMSConstants.JMS_REQUEST_MESSAGE);
             final String msgType;
-            if (request instanceof TextMessage) {
+            if (isMtomEnabled(outMessage)) {
+                msgType = JMSConstants.BINARY_MESSAGE_TYPE;
+            } else if (request instanceof TextMessage) {
                 msgType = JMSConstants.TEXT_MESSAGE_TYPE;
             } else if (request instanceof BytesMessage) {
                 msgType = JMSConstants.BYTE_MESSAGE_TYPE;
@@ -409,7 +412,7 @@ public class JMSDestination extends Abst
             Exchange exchange = inMessage.getExchange();
             exchange.setOutMessage(message);
             
-            if (jmsMessage instanceof TextMessage) {
+            if ((jmsMessage instanceof TextMessage) && !isMtomEnabled(message)) {
                 message.setContent(Writer.class, new StringWriter() {
                     @Override
                     public void close() throws IOException {
@@ -422,10 +425,15 @@ public class JMSDestination extends Abst
                 message.setContent(OutputStream.class, new JMSOutputStream(sender, exchange, false));
             }
         }
-
+        
         protected Logger getLogger() {
             return LOG;
         }
     }
 
+    private boolean isMtomEnabled(final Message message) {
+        return MessageUtils.isTrue(message.getContextualProperty(
+                                                       org.apache.cxf.message.Message.MTOM_ENABLED));
+    }
+
 }

Modified: cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSClientServerTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSClientServerTest.java?rev=1380176&r1=1380175&r2=1380176&view=diff
==============================================================================
--- cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSClientServerTest.java (original)
+++ cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSClientServerTest.java Mon Sep  3 09:03:04 2012
@@ -73,6 +73,7 @@ import org.apache.cxf.jms_greeter.JMSGre
 import org.apache.cxf.jms_greeter.JMSGreeterService2;
 import org.apache.cxf.jms_mtom.JMSMTOMPortType;
 import org.apache.cxf.jms_mtom.JMSMTOMService;
+import org.apache.cxf.jms_mtom.JMSOutMTOMService;
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
 import org.apache.cxf.testutil.common.EmbeddedJMSBrokerLauncher;
@@ -1095,6 +1096,28 @@ public class JMSClientServerTest extends
         assertEquals("The response file is not same with the sent file.", size, bytes.length);
     }
     
+    
+    @Test
+    public void testOutMTOM() throws Exception {
+        QName serviceName = new QName("http://cxf.apache.org/jms_mtom", "JMSMTOMService");
+        QName portName = new QName("http://cxf.apache.org/jms_mtom", "MTOMPort");
+
+        URL wsdl = getWSDLURL("/wsdl/jms_test_mtom.wsdl");
+        assertNotNull(wsdl);
+
+        JMSOutMTOMService service = new JMSOutMTOMService(wsdl, serviceName);
+        assertNotNull(service);
+
+        JMSMTOMPortType mtom = service.getPort(portName, JMSMTOMPortType.class);
+        URL fileURL = this.getClass().getResource("/org/apache/cxf/systest/jms/JMSClientServerTest.class");
+        DataHandler handler1 = new DataHandler(fileURL);
+        int size = handler1.getInputStream().available();
+        DataHandler ret = mtom.testOutMtom();
+        
+        byte bytes[] = IOUtils.readBytesFromStream(ret.getInputStream());
+        assertEquals("The response file is not same with the original file.", size, bytes.length);
+    }
+    
     @Test
     public void testSpecJMS() throws Exception {
         QName serviceName = getServiceName(new QName("http://cxf.apache.org/jms_greeter",

Modified: cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSMTOMImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSMTOMImpl.java?rev=1380176&r1=1380175&r2=1380176&view=diff
==============================================================================
--- cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSMTOMImpl.java (original)
+++ cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSMTOMImpl.java Mon Sep  3 09:03:04 2012
@@ -18,10 +18,13 @@
  */
 package org.apache.cxf.systest.jms;
 
+import java.net.URL;
+
 import javax.activation.DataHandler;
 import javax.jws.WebService;
 import javax.xml.ws.Holder;
 
+
 import org.apache.cxf.jms_mtom.JMSMTOMPortType;
 
 @WebService(serviceName = "JMSMTOMService", 
@@ -42,4 +45,10 @@ public class JMSMTOMImpl implements JMSM
         System.out.println("TestDataHandler End");
         */
     }
+
+   
+    public DataHandler testOutMtom() {
+        URL fileURL = this.getClass().getResource("/org/apache/cxf/systest/jms/JMSClientServerTest.class");
+        return new DataHandler(fileURL);
+    }
 }

Modified: cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/Server.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/Server.java?rev=1380176&r1=1380175&r2=1380176&view=diff
==============================================================================
--- cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/Server.java (original)
+++ cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/Server.java Mon Sep  3 09:03:04 2012
@@ -24,6 +24,8 @@ import javax.xml.ws.soap.SOAPBinding;
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
+import org.apache.cxf.interceptor.LoggingInInterceptor;
+import org.apache.cxf.interceptor.LoggingOutInterceptor;
 import org.apache.cxf.jaxws.EndpointImpl;
 import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
 import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
@@ -83,7 +85,9 @@ public class Server extends AbstractBusT
         Endpoint.publish("", i8);
         EndpointImpl ep = (EndpointImpl)Endpoint.publish("http://cxf.apache.org/transports/jms", mtom);
         Binding binding = ep.getBinding();        
-        ((SOAPBinding)binding).setMTOMEnabled(true);  
+        ((SOAPBinding)binding).setMTOMEnabled(true); 
+        ep.getInInterceptors().add(new LoggingInInterceptor());
+        ep.getOutInterceptors().add(new LoggingOutInterceptor());
         
         Object spec1 = new GreeterSpecImpl();
         String address1 = "jms:jndi:dynamicQueues/test.cxf.jmstransport.queue2"

Modified: cxf/trunk/testutils/src/main/resources/wsdl/jms_test_mtom.wsdl
URL: http://svn.apache.org/viewvc/cxf/trunk/testutils/src/main/resources/wsdl/jms_test_mtom.wsdl?rev=1380176&r1=1380175&r2=1380176&view=diff
==============================================================================
--- cxf/trunk/testutils/src/main/resources/wsdl/jms_test_mtom.wsdl (original)
+++ cxf/trunk/testutils/src/main/resources/wsdl/jms_test_mtom.wsdl Mon Sep  3 09:03:04 2012
@@ -31,8 +31,19 @@
 						xmime:expectedContentTypes="application/octet-stream" />
 				</sequence>
 			</complexType>
+                        <complexType name="DataHandlerOnlyType">
+                                <sequence>
+                                        <element name="attachinfo" type="xsd:base64Binary"
+                                                xmime:expectedContentTypes="application/octet-stream" />
+                                </sequence>
+                        </complexType>
+
 			<element name="testDataHandler" type="x1:DataHandlerType" />
 			<element name="testDataHandlerResponse" type="x1:DataHandlerType" />
+                        <element name="testOutMtom">
+                            <complexType/>
+                        </element>
+                        <element name="testOutMtomResponse" type="x1:DataHandlerOnlyType" />
 		</schema>
 	</wsdl:types>
 
@@ -44,11 +55,24 @@
 		<wsdl:part name="data" element="x1:testDataHandlerResponse" />
 	</wsdl:message>
 
+        <wsdl:message name="testOutMtomRequest">
+                <wsdl:part name="in" element="x1:testOutMtom" />
+        </wsdl:message>
+
+        <wsdl:message name="testOutMtomResponse">
+                <wsdl:part name="out" element="x1:testOutMtomResponse" />
+        </wsdl:message>
+
+
 	<wsdl:portType name="JMSMTOMPortType">
 		<wsdl:operation name="testDataHandler">
 			<wsdl:input message="tns:testDataHandlerIn" />
 			<wsdl:output message="tns:testDataHandlerOut" />
 		</wsdl:operation>
+                <wsdl:operation name="testOutMtom">
+                        <wsdl:input message="tns:testOutMtomRequest" />
+                        <wsdl:output message="tns:testOutMtomResponse" />
+                </wsdl:operation>
 	</wsdl:portType>
 
 	<wsdl:binding name="JMSMTOMPortBinding" type="tns:JMSMTOMPortType">
@@ -63,6 +87,15 @@
 				<soap:body use="literal" />
 			</wsdl:output>
 		</wsdl:operation>
+                <wsdl:operation name="testOutMtom">
+                        <soap:operation soapAction="" />
+                        <wsdl:input>
+                                <soap:body use="literal" />
+                        </wsdl:input>
+                        <wsdl:output>
+                                <soap:body use="literal" />
+                        </wsdl:output>
+                </wsdl:operation>
 	</wsdl:binding>
 
 	<wsdl:service name="JMSMTOMService">
@@ -79,4 +112,18 @@
 			<jms:client messageType="byte"/>
 		</wsdl:port>
 	</wsdl:service>
+        <wsdl:service name="JMSOutMTOMService">
+                <wsdl:port binding="tns:JMSMTOMPortBinding" name="MTOMPort">
+                        <jms:address destinationStyle="queue"
+                                jndiConnectionFactoryName="ConnectionFactory"
+                                jndiDestinationName="dynamicQueues/test.cxf.jmstransport.queue">
+
+                                <jms:JMSNamingProperty name="java.naming.factory.initial"
+                                        value="org.apache.activemq.jndi.ActiveMQInitialContextFactory" />
+                                <jms:JMSNamingProperty name="java.naming.provider.url"
+                                        value="tcp://localhost:61500" />
+                        </jms:address>
+                </wsdl:port>
+        </wsdl:service>
+
 </wsdl:definitions>