[ 
https://issues.apache.org/jira/browse/CXF-1564?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12593584#action_12593584
 ] 

Harri Hohteri commented on CXF-1564:
------------------------------------

I think you are better off making it from scratch than trying to create a test 
case from my code.

But something like this would do the trick:

public class MyType extends Type {
  public boolean isWriteOuter() {
    return true;
  }
}

public class MockMessageWriter extends AbstractMessageWriter {
  boolean isClosed = false;
  public void close() {
    super.close();
    isClosed = true;
  }
}

public class ArrayTypeTest extends TestCase {
  public testCXF-1564() throws Exception {
    ArrayType type = new ArrayType();
    MockMessageWriter writer = new MockMessageWriter();
    type.writeValue(new Object(), writer, null, type, "MyType", 
"http://cxf.apache.org/test";)
    assertFalse("type should not close writer of the parent", 
writer.isClosed());
  }
}




> ArrayType does not work correctly if isWriteOuter == false
> ----------------------------------------------------------
>
>                 Key: CXF-1564
>                 URL: https://issues.apache.org/jira/browse/CXF-1564
>             Project: CXF
>          Issue Type: Bug
>          Components: Aegis Databinding
>    Affects Versions: 2.0, 2.0.1, 2.0.2, 2.0.3, 2.0.4, 2.0.5, 2.1, 2.0.6, 
> 2.1.1, 2.0.7
>            Reporter: Harri Hohteri
>            Assignee: Benson Margulies
>             Fix For: 2.1.1
>
>
> In org.apache.cxf.aegis.type.basic.ArrayType:
>     protected void writeValue(Object value, MessageWriter writer, Context 
> context, Type type, String name,
>         ...
>         if (type.isWriteOuter()) {
>             cwriter = writer.getElementWriter(name, ns);
>         } else {
>             cwriter = writer;
>         }
>         if (value == null && type.isNillable()) {
>             cwriter.writeXsiNil();
>         } else {
>             type.writeObject(value, cwriter, context);
>         }
>         cwriter.close();
>     }
> Should be: 
>     protected void writeValue(Object value, MessageWriter writer, Context 
> context, Type type, String name,
>         ...
>         if (type.isWriteOuter()) {
>             cwriter = writer.getElementWriter(name, ns);
>         } else {
>             cwriter = writer;
>         }
>         if (value == null && type.isNillable()) {
>             cwriter.writeXsiNil();
>         } else {
>             type.writeObject(value, cwriter, context);
>         }
>         if (type.isWriteOuter()) {
>             cwriter.close();
>         }
>     }
> Similar bug was in XFire (http://jira.codehaus.org/browse/XFIRE-547).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to