[ https://issues.apache.org/jira/browse/CXF-7520?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16183662#comment-16183662 ]
Freeman Fang commented on CXF-7520: ----------------------------------- So far I disable two tests when run with jdk9 GA JSONProviderTest.testWriteNullValueAsString JSONProviderTest.testWriteNullValueAsNull Because those two are caused by a JDK9 bug IMO. Already reported to [1] This is caused by a new introduced com.sun.xml.internal.bind.v2.runtime.output.XMLStreamWriterOutput$NewLineEscapeHandler Previously the com.sun.xml.internal.bind.v2.runtime.output.XMLStreamWriterOutput.text method is {code} public void text(String value, boolean needsSeparatingWhitespace) throws IOException, SAXException, XMLStreamException { if(needsSeparatingWhitespace) out.writeCharacters(" "); out.writeCharacters(value); } {code} So that even the String value is empty, the underlying XMLStreamWriter get chance to be invoked, so that we can do anything in customized XMLStreamWriter like JSONProviderTest$NullWriter we handle the case that the value is empty and put anything meaningful in the output payload However with JDK9 GA the com.sun.xml.internal.bind.v2.runtime.output.XMLStreamWriterOutput.text method is {code} public void text(String value, boolean needsSeparatingWhitespace) throws IOException, SAXException, XMLStreamException { if(needsSeparatingWhitespace) out.writeCharacters(" "); escapeHandler.escape(value.toCharArray(), 0, value.length(), false, writerWrapper); } {code} And the escapeHandler.escape is {code} public void escape(char[] ch, int start, int length, boolean isAttVal, Writer out) throws IOException { int limit = start+length; int lastEscaped = start; for (int i = start; i < limit; i++) { char c = ch[i]; if (c == '\r' || c == '\n') { if (i != lastEscaped) { out.write(ch, lastEscaped, i - lastEscaped); } lastEscaped = i + 1; if (out instanceof XmlStreamOutWriterAdapter) { try { ((XmlStreamOutWriterAdapter)out).writeEntityRef("#x" + Integer.toHexString(c)); } catch (XMLStreamException e) { throw new IOException("Error writing xml stream", e); } } else { out.write("&#x"); out.write(Integer.toHexString(c)); out.write(';'); } } } if (lastEscaped != limit) { //here if char[] ch lenght is 0, then there's no way to run into the out.write out.write(ch, lastEscaped, length - lastEscaped); } {code} So if the text is empty then the underlying XMLStreamWriter.writeCharacters(...) will never be invoked, and hence what we do in JSONProviderTest$NullWriter will be skipped [1]http://bugreport.java.com/ > Ensure CXF can build with JDK9 GA(build 9+181) > ---------------------------------------------- > > Key: CXF-7520 > URL: https://issues.apache.org/jira/browse/CXF-7520 > Project: CXF > Issue Type: Bug > Reporter: Freeman Fang > Assignee: Freeman Fang > > a couple of cxf test failied with JDK9 GA due to recent change > Mainly in JAXB and SAAJ -- This message was sent by Atlassian JIRA (v6.4.14#64029)