JAXB似乎正在重新编码新的行char

我有以下代码……

public static final String NEWLINE = String.format("%n"); ... StringBuilder b = new StringBuilder(); ... b.append(NEWLINE); return b.toString(); 

然而,当我在SOAPUI中运行它并查看RAW时,看起来它再次扩充它并且新行转为

 
 

而不是

 1,name,value 2,name,value 

它显示为……

 1,name,value
 2,name,value
 

因此,当我使用正则表达式查询解析替换为空字符串时,全文仍然存在

现在我对编码并不熟悉,但这是SOAP消息的有效负载。 信封被剥离,并将其保存为CSV文件。 当我在Notepad ++中打开CSV时,新的行字符似乎可以工作,但该编码值仍然存在。 有谁知道我错过了什么?

我尝试添加一个(sb = Stringbuilder)

 sb.append(""); 

但这似乎不起作用,再次JAXB似乎逃脱了角色。

 <![CDATA[000000,LK20130930120048,Compant,Data,20130930120048,,
 000001,user,Fname,Mname,Lname,12345 Address 1,Address 2222,setAddress3,setCity,OH,US,44332,,N,N,E,,,,?,,
 999999]]> 

我也可以这样做,但我使用JAX-WS的默认marshaller。 所以我不确定在哪里放。

JAXB(JSR-222)实现将执行以下操作:

  • \n将作为新行写入XML。
  • \r将被转义为

演示代码

 import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Foo { public String slashN; public String slashR; public String slashRslashN; } 

演示

 import javax.xml.bind.*; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Foo.class); Foo foo = new Foo(); foo.slashN = "Hello\nWorld"; foo.slashR = "Hello\rWorld"; foo.slashRslashN = "Hello\r\nWorld"; Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(foo, System.out); } } 

产量

   Hello World Hello
World Hello
 World  

尝试将特殊字符包装在块中。 它应该避免重新编码。