You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/09/03 18:12:14 UTC

svn commit: r691649 - in /servicemix/components/bindings/servicemix-jms/trunk/src: main/java/org/apache/servicemix/jms/ test/java/org/apache/servicemix/jms/ test/resources/org/apache/servicemix/jms/

Author: gnodet
Date: Wed Sep  3 09:12:13 2008
New Revision: 691649

URL: http://svn.apache.org/viewvc?rev=691649&view=rev
Log:
SM-1362: encoding problem creating JMS TextMessage from SoapMessage

Added:
    servicemix/components/bindings/servicemix-jms/trunk/src/test/resources/org/apache/servicemix/jms/charsettest.xml
Modified:
    servicemix/components/bindings/servicemix-jms/trunk/src/main/java/org/apache/servicemix/jms/DefaultJmsMarshaler.java
    servicemix/components/bindings/servicemix-jms/trunk/src/main/java/org/apache/servicemix/jms/JmsMarshaler.java
    servicemix/components/bindings/servicemix-jms/trunk/src/test/java/org/apache/servicemix/jms/JmsMarshalerTest.java

Modified: servicemix/components/bindings/servicemix-jms/trunk/src/main/java/org/apache/servicemix/jms/DefaultJmsMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-jms/trunk/src/main/java/org/apache/servicemix/jms/DefaultJmsMarshaler.java?rev=691649&r1=691648&r2=691649&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-jms/trunk/src/main/java/org/apache/servicemix/jms/DefaultJmsMarshaler.java (original)
+++ servicemix/components/bindings/servicemix-jms/trunk/src/main/java/org/apache/servicemix/jms/DefaultJmsMarshaler.java Wed Sep  3 09:12:13 2008
@@ -32,6 +32,7 @@
 import org.apache.servicemix.soap.SoapHelper;
 import org.apache.servicemix.soap.marshalers.SoapMessage;
 import org.apache.servicemix.soap.marshalers.SoapWriter;
+import org.apache.servicemix.jbi.jaxp.SourceTransformer;
 
 /**
  * Encapsulates the conversion to and from JMS messages
@@ -47,14 +48,14 @@
     
     /**
      * Converts an {@link Exception} into an JMS message. This method will be
-     * invoked when the {@link MessageExchange} contains an error.
+     * invoked when the {@link javax.jbi.messaging.MessageExchange} contains an error.
      * 
      * @param e
      *            Exception to convert
      * @param session
      *            JMS session used to create JMS messages
      * @return JMS message
-     * @see MessageExchange#getError()
+     * @see javax.jbi.messaging.MessageExchange#getError()
      */
     public Message toJMS(Exception e, Session session) throws Exception {
         return session.createObjectMessage(e);
@@ -68,7 +69,7 @@
      * @param session JMS session used to create JMS messages
      * @return JMS version of the specified source SOAP message
      * @throws Exception if an IO error occurs
-     * @throws JMSException if a JMS error occurs
+     * @throws javax.jms.JMSException if a JMS error occurs
      */
     protected Message toJMS(SoapMessage message, Session session) throws Exception {
         SoapHelper soapHelper = new SoapHelper(endpoint);
@@ -80,7 +81,7 @@
         
         // create text message
         TextMessage msg = session.createTextMessage();
-        msg.setText(baos.toString());
+        msg.setText(baos.toString(SourceTransformer.getDefaultCharset()));
         
         // overwrite whatever content-type was passed on to us with the one
         // the SoapWriter constructed
@@ -130,7 +131,7 @@
      * @throws Exception
      *             if JMS message is an ObjectMessage containing an Exception
      *             (the containing exception is thrown.)
-     * @throws JMSException
+     * @throws javax.jms.JMSException
      *             if a JMS problem occurs
      * @throws UnsupportedOperationException
      *             if the JMS message is an ObjectMessage which contains

Modified: servicemix/components/bindings/servicemix-jms/trunk/src/main/java/org/apache/servicemix/jms/JmsMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-jms/trunk/src/main/java/org/apache/servicemix/jms/JmsMarshaler.java?rev=691649&r1=691648&r2=691649&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-jms/trunk/src/main/java/org/apache/servicemix/jms/JmsMarshaler.java (original)
+++ servicemix/components/bindings/servicemix-jms/trunk/src/main/java/org/apache/servicemix/jms/JmsMarshaler.java Wed Sep  3 09:12:13 2008
@@ -29,8 +29,7 @@
      * Marshalls the JMS message into an XML/SOAP message
      *
      * @param src Message to marshall
-     * @param soapHelper 
-     * @throws Exception 
+     * @throws Exception
      */
     SoapMessage toSOAP(Message src) throws Exception;
     
@@ -39,8 +38,8 @@
      *
      * @param message Message to unmarshall
      * @param session Used to create the JMS message
-     * @throws MessagingException
-     * @throws JMSException
+     * @throws javax.jbi.messaging.MessagingException
+     * @throws javax.jms.JMSException
      */
     Message toJMS(SoapMessage message, Map headers, Session session) throws Exception;
 

Modified: servicemix/components/bindings/servicemix-jms/trunk/src/test/java/org/apache/servicemix/jms/JmsMarshalerTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-jms/trunk/src/test/java/org/apache/servicemix/jms/JmsMarshalerTest.java?rev=691649&r1=691648&r2=691649&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-jms/trunk/src/test/java/org/apache/servicemix/jms/JmsMarshalerTest.java (original)
+++ servicemix/components/bindings/servicemix-jms/trunk/src/test/java/org/apache/servicemix/jms/JmsMarshalerTest.java Wed Sep  3 09:12:13 2008
@@ -17,6 +17,7 @@
 package org.apache.servicemix.jms;
 
 import java.util.List;
+import java.nio.charset.Charset;
 
 import javax.jbi.messaging.MessageExchange;
 import javax.jbi.messaging.NormalizedMessage;
@@ -36,6 +37,8 @@
 import org.apache.servicemix.jbi.container.JBIContainer;
 import org.apache.servicemix.jbi.jaxp.SourceTransformer;
 import org.apache.servicemix.tck.ReceiverComponent;
+import org.apache.servicemix.soap.marshalers.SoapMarshaler;
+import org.apache.servicemix.soap.marshalers.SoapMessage;
 import org.springframework.core.io.ClassPathResource;
 
 public class JmsMarshalerTest extends TestCase {
@@ -104,6 +107,42 @@
         // Wait for DONE status
         Thread.sleep(50);
     }
+
+    public void testEncoding() throws Exception {
+        JmsEndpoint ep = new JmsEndpoint();
+        ep.setService(ReceiverComponent.SERVICE);
+        ep.setEndpoint("jms");
+        ep.setTargetService(ReceiverComponent.SERVICE);
+        ep.setTargetEndpoint(ReceiverComponent.ENDPOINT);
+        ep.setRole(MessageExchange.Role.CONSUMER);
+        ep.setDestinationStyle(AbstractJmsProcessor.STYLE_QUEUE);
+        ep.setDestination(queue);
+        ep.setDefaultMep(JbiConstants.IN_ONLY);
+        ep.setMarshaler(new DefaultJmsMarshaler(ep));
+
+        QueueConnection qConn = connectionFactory.createQueueConnection();
+        QueueSession qSess = qConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
+        
+        // Test character encoding.
+        String defaultCharset = SourceTransformer.getDefaultCharset();
+        try {
+            SourceTransformer.setDefaultCharset("ISO-8859-1");
+
+            SourceTransformer sourceTransformer = new SourceTransformer();
+            SoapMarshaler marshaler = new SoapMarshaler(true);
+            SoapMessage soapMessage = marshaler.createReader().read(getClass().getResourceAsStream("charsettest.xml"));
+            soapMessage.setHeaders(null);
+            soapMessage.setBodyName(null);
+            soapMessage.setEnvelopeName(null);
+
+            soapMessage.setSource(sourceTransformer.toDOMSource(soapMessage.getSource()));
+            TextMessage m = (TextMessage) ep.getMarshaler().toJMS(soapMessage, null, qSess);
+
+            assertEquals("Messages match", new SourceTransformer().toString(soapMessage.getSource()), m.getText().replace('\'', '"'));
+        } finally {
+            SourceTransformer.setDefaultCharset(defaultCharset);
+        }
+    }
     
 
 }

Added: servicemix/components/bindings/servicemix-jms/trunk/src/test/resources/org/apache/servicemix/jms/charsettest.xml
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-jms/trunk/src/test/resources/org/apache/servicemix/jms/charsettest.xml?rev=691649&view=auto
==============================================================================
--- servicemix/components/bindings/servicemix-jms/trunk/src/test/resources/org/apache/servicemix/jms/charsettest.xml (added)
+++ servicemix/components/bindings/servicemix-jms/trunk/src/test/resources/org/apache/servicemix/jms/charsettest.xml Wed Sep  3 09:12:13 2008
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<e:Envelope xmlns:e="http://schemas.xmlsoap.org/soap/envelope/"
+            xmlns:wsa="http://schemas.xmlsoap.org/soap/envelope/">
+  <e:Header>
+    <wsa:To>http://test/MyServiceConsumer/</wsa:To>
+  </e:Header>
+  <e:Body>
+    <ping><pingRequest><message xmlns="http://soap">german umlauts: ä ö ü</message></pingRequest></ping>
+  </e:Body>
+</e:Envelope>
\ No newline at end of file