avro-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cutt...@apache.org
Subject svn commit: r1210703 - in /avro/trunk: ./ lang/java/archetypes/avro-service-archetype/src/main/resources/archetype-resources/ lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/ lang/java/ipc/src/test/java/org/apache/avro/specific/ lang/java/maven-p...
Date Mon, 05 Dec 2011 23:24:51 GMT
Author: cutting
Date: Mon Dec  5 23:24:50 2011
New Revision: 1210703

URL: http://svn.apache.org/viewvc?rev=1210703&view=rev
Log:
AVRO-962. Java: Fix Maven plugin to support string type override.  Contributed by George Fletcher.

Modified:
    avro/trunk/CHANGES.txt
    avro/trunk/lang/java/archetypes/avro-service-archetype/src/main/resources/archetype-resources/pom.xml
    avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/TestFileSpanStorage.java
    avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/TestSpanAggregation.java
    avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/TestSpanTraceFormation.java
    avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificRecordBuilder.java
    avro/trunk/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/IDLProtocolMojo.java

Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1210703&r1=1210702&r2=1210703&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Mon Dec  5 23:24:50 2011
@@ -10,6 +10,9 @@ Avro 1.6.2 (unreleased)
 
   BUG FIXES
 
+    AVRO-962. Java: Fix Maven plugin to support string type override.
+    (George Fletcher via cutting)
+
 Avro 1.6.1 (8 November 2011)
 
   INCOMPATIBLE CHANGES

Modified: avro/trunk/lang/java/archetypes/avro-service-archetype/src/main/resources/archetype-resources/pom.xml
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/archetypes/avro-service-archetype/src/main/resources/archetype-resources/pom.xml?rev=1210703&r1=1210702&r2=1210703&view=diff
==============================================================================
--- avro/trunk/lang/java/archetypes/avro-service-archetype/src/main/resources/archetype-resources/pom.xml
(original)
+++ avro/trunk/lang/java/archetypes/avro-service-archetype/src/main/resources/archetype-resources/pom.xml
Mon Dec  5 23:24:50 2011
@@ -23,7 +23,7 @@
   <version>${version}</version>
   <name>Simple Avro Ordering Service</name>
   <properties>
-    <avro-version>1.6.1-SNAPSHOT</avro-version>
+    <avro-version>1.6.2-SNAPSHOT</avro-version>
     <jackson-version>1.8.4</jackson-version>
     <junit.version>4.8.1</junit.version>
     <logback.version>0.9.29</logback.version>

Modified: avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/TestFileSpanStorage.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/TestFileSpanStorage.java?rev=1210703&r1=1210702&r2=1210703&view=diff
==============================================================================
--- avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/TestFileSpanStorage.java
(original)
+++ avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/TestFileSpanStorage.java
Mon Dec  5 23:24:50 2011
@@ -39,7 +39,7 @@ public class TestFileSpanStorage {
     TracePluginConfiguration conf = new TracePluginConfiguration();
     FileSpanStorage test = new FileSpanStorage(false, conf);
     Span s = Util.createEventlessSpan(Util.idValue(1), Util.idValue(1), null);
-    s.setMessageName(new Utf8("message"));
+    s.setMessageName(new String("message"));
     test.addSpan(s);
     try {
       Thread.sleep(1000);
@@ -58,7 +58,7 @@ public class TestFileSpanStorage {
     List<Span> spans = new ArrayList<Span>(50000);
     for (int i = 0; i < 50000; i++) {
       Span s = Util.createEventlessSpan(Util.idValue(i), Util.idValue(i), null);
-      s.setMessageName(new Utf8("message"));
+      s.setMessageName(new String("message"));
       test.addSpan(s);
       spans.add(s);
     }
@@ -76,7 +76,7 @@ public class TestFileSpanStorage {
     spans.clear();
     for (int i = 0; i < 5000; i++) {
       Span s = Util.createEventlessSpan(Util.idValue(i), Util.idValue(i), null);
-      s.setMessageName(new Utf8("message"));
+      s.setMessageName(new String("message"));
       test2.addSpan(s);
       spans.add(s);
     }
@@ -99,14 +99,14 @@ public class TestFileSpanStorage {
     // Add a bunch of spans
     for (int i = 0; i < 100; i++) {
       Span s = Util.createEventlessSpan(Util.idValue(i), Util.idValue(i), null);
-      s.setMessageName(new Utf8("message"));
+      s.setMessageName(new String("message"));
       test.addSpan(s);
     }
     
     List<Span> lastNine = new LinkedList<Span>();
     for (int i = 0; i < 9; i++) {
       Span s = Util.createEventlessSpan(Util.idValue(100 + i), Util.idValue(100 + i), null);
-      s.setMessageName(new Utf8("message"));
+      s.setMessageName(new String("message"));
       lastNine.add(s);
       test.addSpan(s);
     }
@@ -150,7 +150,7 @@ public class TestFileSpanStorage {
       s.getEvents().add(te1);
       s.getEvents().add(te2);
       
-      s.setMessageName(new Utf8("message"));
+      s.setMessageName(new String("message"));
       test.addSpan(s);
       spans[i] = s;
       

Modified: avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/TestSpanAggregation.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/TestSpanAggregation.java?rev=1210703&r1=1210702&r2=1210703&view=diff
==============================================================================
--- avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/TestSpanAggregation.java
(original)
+++ avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/TestSpanAggregation.java
Mon Dec  5 23:24:50 2011
@@ -44,11 +44,11 @@ public class TestSpanAggregation {
    */
   @Test
   public void testSpanCompletion1() {
-    Span span1a = createClientSpan(idValue(1), idValue(1), null, new Utf8("a"));
+    Span span1a = createClientSpan(idValue(1), idValue(1), null, new String("a"));
     span1a.setRequestPayloadSize(10L);
     span1a.setResponsePayloadSize(0L);
     
-    Span span1b = createServerSpan(idValue(1), idValue(1), null, new Utf8("a"));
+    Span span1b = createServerSpan(idValue(1), idValue(1), null, new String("a"));
     span1b.setRequestPayloadSize(0L);
     span1b.setResponsePayloadSize(11L);
     
@@ -76,19 +76,19 @@ public class TestSpanAggregation {
   @Test
   public void testInvalidSpanCompletion() {
     // Trace: 1, Span: 1, Parent: null 
-    Span span1a = createClientSpan(idValue(1), idValue(1), null, new Utf8("a"));
-    Span span1b = createServerSpan(idValue(1), idValue(1), null, new Utf8("a"));
+    Span span1a = createClientSpan(idValue(1), idValue(1), null, new String("a"));
+    Span span1b = createServerSpan(idValue(1), idValue(1), null, new String("a"));
     
     // Trace: 1, Span: 10, Parent: 3 
-    Span spanBogus1 = createClientSpan(idValue(1), idValue(10), idValue(3), new Utf8("not"));
-    Span spanBogus2 = createServerSpan(idValue(1), idValue(10), idValue(3), new Utf8("equal"));
+    Span spanBogus1 = createClientSpan(idValue(1), idValue(10), idValue(3), new String("not"));
+    Span spanBogus2 = createServerSpan(idValue(1), idValue(10), idValue(3), new String("equal"));
     
     // Trace: 1, Span: 5, Parent: (2/3) 
-    Span spanBogus3 = createClientSpan(idValue(1), idValue(5), idValue(2), new Utf8("equal"));
-    Span spanBogus4 = createServerSpan(idValue(1), idValue(5), idValue(3), new Utf8("equal"));
+    Span spanBogus3 = createClientSpan(idValue(1), idValue(5), idValue(2), new String("equal"));
+    Span spanBogus4 = createServerSpan(idValue(1), idValue(5), idValue(3), new String("equal"));
     
     // Trace:1, Span: 4, Parent: 1
-    Span spanBogus5 = createClientSpan(idValue(1), idValue(4), idValue(1), new Utf8("alone"));
+    Span spanBogus5 = createClientSpan(idValue(1), idValue(4), idValue(1), new String("alone"));
     
     List<Span> partials = new ArrayList<Span>();
     partials.add(span1a);
@@ -114,10 +114,10 @@ public class TestSpanAggregation {
     Span result = results.completeSpans.get(0);
     assertTrue(result.getComplete());
     assertTrue(idsEqual(idValue(1), result.getSpanID()));
-    assertEquals(new Utf8("requestorHostname"), result.getRequestorHostname());
-    assertEquals(new Utf8("responderHostname"), result.getResponderHostname());
+    assertEquals(new String("requestorHostname"), result.getRequestorHostname());
+    assertEquals(new String("responderHostname"), result.getResponderHostname());
     assertNull(result.getParentSpanID());
-    assertEquals(new Utf8("a"), result.getMessageName());
+    assertEquals(new String("a"), result.getMessageName());
   }
   
   /**
@@ -129,20 +129,20 @@ public class TestSpanAggregation {
    */
   @Test
   public void testTraceFormation1() {
-    Span a1 = createClientSpan(idValue(1), idValue(1), null, new Utf8("a"));
-    Span a2 = createServerSpan(idValue(1), idValue(1), null, new Utf8("a"));
+    Span a1 = createClientSpan(idValue(1), idValue(1), null, new String("a"));
+    Span a2 = createServerSpan(idValue(1), idValue(1), null, new String("a"));
     
-    Span b1 = createClientSpan(idValue(1), idValue(2), idValue(1), new Utf8("b"));
-    Span b2 = createServerSpan(idValue(1), idValue(2), idValue(1), new Utf8("b"));
+    Span b1 = createClientSpan(idValue(1), idValue(2), idValue(1), new String("b"));
+    Span b2 = createServerSpan(idValue(1), idValue(2), idValue(1), new String("b"));
 
-    Span c1 = createClientSpan(idValue(1), idValue(3), idValue(2), new Utf8("c"));
-    Span c2 = createServerSpan(idValue(1), idValue(3), idValue(2), new Utf8("c"));
+    Span c1 = createClientSpan(idValue(1), idValue(3), idValue(2), new String("c"));
+    Span c2 = createServerSpan(idValue(1), idValue(3), idValue(2), new String("c"));
     
-    Span d1 = createClientSpan(idValue(1), idValue(4), idValue(2), new Utf8("d"));
-    Span d2 = createServerSpan(idValue(1), idValue(4), idValue(2), new Utf8("d"));
+    Span d1 = createClientSpan(idValue(1), idValue(4), idValue(2), new String("d"));
+    Span d2 = createServerSpan(idValue(1), idValue(4), idValue(2), new String("d"));
     
-    Span e1 = createClientSpan(idValue(1), idValue(5), idValue(4), new Utf8("e"));
-    Span e2 = createServerSpan(idValue(1), idValue(5), idValue(4), new Utf8("e"));
+    Span e1 = createClientSpan(idValue(1), idValue(5), idValue(4), new String("e"));
+    Span e2 = createServerSpan(idValue(1), idValue(5), idValue(4), new String("e"));
     
     List<Span> spans = new LinkedList<Span>();
     spans.addAll(Arrays.asList(new Span[] {a1, a2, b1, b2, c1, c2, d1, d2, e1, e2}));
@@ -151,8 +151,8 @@ public class TestSpanAggregation {
     
     assertEquals(5, merged.size());
     for (Span s: merged) {
-      assertEquals(new Utf8("requestorHostname"), s.getRequestorHostname());
-      assertEquals(new Utf8("responderHostname"), s.getResponderHostname());
+      assertEquals(new String("requestorHostname"), s.getRequestorHostname());
+      assertEquals(new String("responderHostname"), s.getResponderHostname());
     }
     
     List<Trace> traces = SpanAggregator.getTraces(merged).traces;
@@ -165,11 +165,11 @@ public class TestSpanAggregation {
   /**
    * Make a mock Span including client-side timing data.
    */
-  public Span createClientSpan(ID traceID, ID spanID, ID parentID, Utf8 msgName) {
+  public Span createClientSpan(ID traceID, ID spanID, ID parentID, String msgName) {
     Span out = new Span();
     out.setSpanID(spanID);
     out.setTraceID(traceID);
-    out.setRequestorHostname(new Utf8("requestorHostname"));
+    out.setRequestorHostname(new String("requestorHostname"));
     
     if (parentID != null) {
       out.setParentSpanID(parentID);
@@ -196,11 +196,11 @@ public class TestSpanAggregation {
   /**
    * Make a mock Span including server-side timing data.
    */
-  public Span createServerSpan(ID traceID, ID spanID, ID parentID, Utf8 msgName) {
+  public Span createServerSpan(ID traceID, ID spanID, ID parentID, String msgName) {
     Span out = new Span();
     out.setSpanID(spanID);
     out.setTraceID(traceID);
-    out.setResponderHostname(new Utf8("responderHostname"));
+    out.setResponderHostname(new String("responderHostname"));
     
     if (parentID != null) {
       out.setParentSpanID(parentID);

Modified: avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/TestSpanTraceFormation.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/TestSpanTraceFormation.java?rev=1210703&r1=1210702&r2=1210703&view=diff
==============================================================================
--- avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/TestSpanTraceFormation.java
(original)
+++ avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/ipc/trace/TestSpanTraceFormation.java
Mon Dec  5 23:24:50 2011
@@ -38,22 +38,22 @@ public class TestSpanTraceFormation {
     Span root = new Span();
     root.setSpanID(Util.idValue(10));
     root.setParentSpanID(null);
-    root.setMessageName(new Utf8("startCall"));
+    root.setMessageName(new String("startCall"));
     
     Span a = new Span();
     a.setSpanID(Util.idValue(11));
     a.setParentSpanID(Util.idValue(10));
-    a.setMessageName(new Utf8("childCall1"));
+    a.setMessageName(new String("childCall1"));
     
     Span b = new Span();
     b.setSpanID(Util.idValue(12));
     b.setParentSpanID(Util.idValue(10));
-    b.setMessageName(new Utf8("childCall2"));
+    b.setMessageName(new String("childCall2"));
     
     Span c = new Span();
     c.setSpanID(Util.idValue(13));
     c.setParentSpanID(Util.idValue(10));
-    c.setMessageName(new Utf8("childCall3"));
+    c.setMessageName(new String("childCall3"));
     
     List<Span> spans = new LinkedList<Span>();
     spans.add(root);
@@ -65,17 +65,17 @@ public class TestSpanTraceFormation {
     Span d = new Span();
     d.setSpanID(Util.idValue(11));
     d.setParentSpanID(Util.idValue(10));
-    d.setMessageName(new Utf8("childCall1"));
+    d.setMessageName(new String("childCall1"));
     
     Span e = new Span();
     e.setSpanID(Util.idValue(12));
     e.setParentSpanID(Util.idValue(10));
-    e.setMessageName(new Utf8("childCall2"));
+    e.setMessageName(new String("childCall2"));
     
     Span f = new Span();
     f.setSpanID(Util.idValue(13));
     f.setParentSpanID(Util.idValue(10));
-    f.setMessageName(new Utf8("childCall3"));
+    f.setMessageName(new String("childCall3"));
     
     spans.clear();
     spans.add(d);
@@ -93,22 +93,22 @@ public class TestSpanTraceFormation {
     Span root = new Span();
     root.setSpanID(Util.idValue(10));
     root.setParentSpanID(null);
-    root.setMessageName(new Utf8("startCall"));
+    root.setMessageName(new String("startCall"));
     
     Span a = new Span();
     a.setSpanID(Util.idValue(11));
     a.setParentSpanID(Util.idValue(10));
-    a.setMessageName(new Utf8("childCall1"));
+    a.setMessageName(new String("childCall1"));
     
     Span b = new Span();
     b.setSpanID(Util.idValue(12));
     b.setParentSpanID(Util.idValue(10));
-    b.setMessageName(new Utf8("childCall2"));
+    b.setMessageName(new String("childCall2"));
     
     Span c = new Span();
     c.setSpanID(Util.idValue(13));
     c.setParentSpanID(Util.idValue(10));
-    c.setMessageName(new Utf8("childCall3"));
+    c.setMessageName(new String("childCall3"));
     
     List<Span> spans = new LinkedList<Span>();
     spans.add(root);
@@ -120,22 +120,22 @@ public class TestSpanTraceFormation {
     Span d = new Span();
     d.setSpanID(Util.idValue(11));
     d.setParentSpanID(Util.idValue(10));
-    d.setMessageName(new Utf8("childCall1"));
+    d.setMessageName(new String("childCall1"));
     
     Span e = new Span();
     e.setSpanID(Util.idValue(12));
     e.setParentSpanID(Util.idValue(10));
-    e.setMessageName(new Utf8("childCall2"));
+    e.setMessageName(new String("childCall2"));
     
     Span f = new Span();
     f.setSpanID(Util.idValue(13));
     f.setParentSpanID(Util.idValue(10));
-    f.setMessageName(new Utf8("childCall3"));
+    f.setMessageName(new String("childCall3"));
     
     Span g = new Span();
     g.setSpanID(Util.idValue(14));
     g.setParentSpanID(Util.idValue(13));
-    g.setMessageName(new Utf8("childCall4"));
+    g.setMessageName(new String("childCall4"));
     
     spans.clear();
     spans.add(d);
@@ -155,7 +155,7 @@ public class TestSpanTraceFormation {
     if (parentID != null) {
       out.setParentSpanID(Util.idValue(parentID));
     }
-    out.setMessageName(new Utf8(messageName));
+    out.setMessageName(new String(messageName));
     
     out.setEvents(new GenericData.Array<TimestampedEvent>(
         4, Schema.createArray(TimestampedEvent.SCHEMA$)));
@@ -227,22 +227,22 @@ public class TestSpanTraceFormation {
     Span root = new Span();
     root.setSpanID(Util.idValue(10));
     root.setParentSpanID(null);
-    root.setMessageName(new Utf8("startCall"));
+    root.setMessageName(new String("startCall"));
     
     Span a = new Span();
     a.setSpanID(Util.idValue(11));
     a.setParentSpanID(Util.idValue(10));
-    a.setMessageName(new Utf8("childCall1"));
+    a.setMessageName(new String("childCall1"));
     
     Span b = new Span();
     b.setSpanID(Util.idValue(12));
     b.setParentSpanID(Util.idValue(10));
-    b.setMessageName(new Utf8("childCall2"));
+    b.setMessageName(new String("childCall2"));
     
     Span c = new Span();
     c.setSpanID(Util.idValue(13));
     c.setParentSpanID(Util.idValue(10));
-    c.setMessageName(new Utf8("childCall3"));
+    c.setMessageName(new String("childCall3"));
     
     List<Span> spans = new LinkedList<Span>();
     spans.add(root);
@@ -254,19 +254,19 @@ public class TestSpanTraceFormation {
     assertNotNull(trace);
     
     TraceNode rootNode = trace.getRoot();
-    assertEquals(rootNode.span.getMessageName(), new Utf8("startCall"));
+    assertEquals(rootNode.span.getMessageName(), new String("startCall"));
     assertEquals(3, rootNode.children.size());
     boolean found1, found2, found3;
     found1 = found2 = found3 = false;
     
     for (TraceNode tn: rootNode.children) {
-      if (tn.span.getMessageName().equals(new Utf8("childCall1"))) {
+      if (tn.span.getMessageName().equals(new String("childCall1"))) {
         found1 = true;
       }
-      if (tn.span.getMessageName().equals(new Utf8("childCall2"))) {
+      if (tn.span.getMessageName().equals(new String("childCall2"))) {
         found2 = true;
       }
-      if (tn.span.getMessageName().equals(new Utf8("childCall3"))) {
+      if (tn.span.getMessageName().equals(new String("childCall3"))) {
         found3 = true;
       }
       assertNotNull(tn.children);

Modified: avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificRecordBuilder.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificRecordBuilder.java?rev=1210703&r1=1210702&r2=1210703&view=diff
==============================================================================
--- avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificRecordBuilder.java
(original)
+++ avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificRecordBuilder.java
Mon Dec  5 23:24:50 2011
@@ -93,7 +93,7 @@ public class TestSpecificRecordBuilder {
   public void testBuilderPerformance() {
     int count = 1000000;
     List<Person> friends = new ArrayList<Person>(0);
-    List<CharSequence> languages = new ArrayList<CharSequence>(Arrays.asList(new
CharSequence[] { "English", "Java" }));
+    List<String> languages = new ArrayList<String>(Arrays.asList(new String[]
{ "English", "Java" }));
     long startTimeNanos = System.nanoTime();
     for (int ii = 0; ii < count; ii++) {
       Person.newBuilder().setName("James Gosling").setYearOfBirth(1955).setCountry("US").setState("CA").setFriends(friends).
@@ -127,7 +127,7 @@ public class TestSpecificRecordBuilder {
   public void testManualBuildPerformance() {
     int count = 1000000;
     List<Person> friends = new ArrayList<Person>(0);
-    List<CharSequence> languages = new ArrayList<CharSequence>(Arrays.asList(new
CharSequence[] { "English", "Java" }));
+    List<String> languages = new ArrayList<String>(Arrays.asList(new String[]
{ "English", "Java" }));
     long startTimeNanos = System.nanoTime();
     for (int ii = 0; ii < count; ii++) {
       Person person = new Person();

Modified: avro/trunk/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/IDLProtocolMojo.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/IDLProtocolMojo.java?rev=1210703&r1=1210702&r2=1210703&view=diff
==============================================================================
--- avro/trunk/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/IDLProtocolMojo.java
(original)
+++ avro/trunk/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/IDLProtocolMojo.java
Mon Dec  5 23:24:50 2011
@@ -25,6 +25,7 @@ import org.apache.avro.Protocol;
 import org.apache.avro.compiler.idl.Idl;
 import org.apache.avro.compiler.idl.ParseException;
 import org.apache.avro.compiler.specific.SpecificCompiler;
+import org.apache.avro.generic.GenericData;
 
 /**
  * Generate Java classes and interfaces from AvroIDL files (.avdl)
@@ -59,6 +60,7 @@ public class IDLProtocolMojo extends Abs
       String json = p.toString(true);
       Protocol protocol = Protocol.parse(json);
       SpecificCompiler compiler = new SpecificCompiler(protocol);
+      compiler.setStringType(GenericData.StringType.valueOf(stringType));
       compiler.compileToDestination(null, outputDirectory);
     } catch (ParseException e) {
       throw new IOException(e);



Mime
View raw message