1

私は次のコードを持っています...

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を開くと、新しい行のcharが機能しているように見えますが、そのエンコードされた値はまだそこにあります。誰かが私が欠けているものを知っていますか?

(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>

また、このようなものでも問題ありませんが、JAX-WS のデフォルトのマーシャラーを使用しています。そのため、どこに置くべきか正確にはわかりません。

4

2 に答える 2

4

JAXB (JSR-222) 実装は、次のことを行います。

  • \n新しい行として XML に書き込まれます。
  • \rとしてエスケープされます&#xD;

デモコード

フー

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>
于 2013-10-01T10:33:33.907 に答える