java - JAXB 似乎正在重新编码新行字符

标签 java encoding jaxb

我有以下代码...

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

然而,当我在 SOAPUI 中运行它并查看 RAW 时,它看起来又在增加它并且新行变成了



所以代替

<SOAPEnvelope>1,name,value
             2,name,value<SOAPEnvelope>

它显示为...

<SOAPEnvelope>1,name,value&#xD;
             2,name,value&#xD;<SOAPEnvelope>

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

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

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

sb.append("<![CDATA[");
...
sb.append("]]>");

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

<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns4:ReportResult xmlns:ns2="http://me.com/v1_9/service" xmlns:ns3="http://me.com/v1_9/service/objects" xmlns:ns4="http://me.com/v1_9/service/operations">&lt;![CDATA[000000,LK20130930120048,Compant,Data,20130930120048,,&#xD;
000001,user,Fname,Mname,Lname,12345 Address 1,Address 2222,setAddress3,setCity,OH,US,44332,,N,N,E,,,,?,,&#xD;
999999]]&gt;</ns4:ReportResult></soapenv:Body></soapenv:Envelope>

我也可以接受 this 这样的东西但我使用 JAX-WS 的默认编码器。所以我不确定把它放在哪里。

最佳答案

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);
    }

}

输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foo>
    <slashN>Hello
World</slashN>
    <slashR>Hello&#xD;World</slashR>
    <slashRslashN>Hello&#xD;
World</slashRslashN>
</foo>

关于java - JAXB 似乎正在重新编码新行字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19056815/

相关文章:

twitter - 使用 Go 根据 RFC 1738 编码 URL 字符串

jaxb - 将 Swagger 与 JAX-RS 和 JAXB 集成需要帮助

java - Groovy 控制台不输出旧值

java - Java如何在多态中确定运行时调用的方法?

encoding - 是否存在可发音的编码?

python - 如何在 Python 中转换编码?

java - 我如何安全连接到远程 websphere 服务器?

java - 通过子对象中的属性从数据存储区检索对象

java - JAXB boolean 处理异常和 JSF

java - 如何使用 JAXB 将子元素属性绑定(bind)到字段?