0

Java で JAX-RS を使用して実装されている残りの API に、次の utf-8 でエンコードされた XML を送信しようとしています。

XML データ:

<?xml version="1.0" encoding="UTF-8"?>
<incomingData><Text>καλημέρα</Text></incomingData>

次に、次の REST API 呼び出しを使用してデータを解析しようとしています。

@PUT()
@Produces(MediaType.TEXT_XML)
@Consumes(MediaType.TEXT_XML)
public void print(@QueryParam("printerID") int printerID,
                  InputStream requestBodyStream) {

    IncomingData StudentData = null;
    try {    
        JAXBContext jaxbContext =
          JAXBContext.newInstance(IncomingData.class);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        StudentData = (IncomingData) jaxbUnmarshaller.unmarshal(requestBodyStream);
    } catch (JAXBException e) {
        e.printStackTrace();
    }

    try {
        System.out.println(new String(StudentData.Text.getBytes(), "UTF-8"));
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
}

XML コンテンツを簡単に解析するために、次の JAXB アノテーション付きクラスも使用しています。

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class IncomingData {
    @XmlElement(name = "Text")
    String Text = new String();
}

ただし、TextXML タグの内容は、その内容を?????UTF-8 でエンコードされた文字列として印刷しているときと同じように表示されます。

どうすれば問題を解決できますか?

4

2 に答える 2

0

@Consumes(MediaType.TEXT_XML)があなたをつまずかせているのではないかと思います@Consumes(MediaType.APPLICATION_XML)。のエンコーディングtext/xmlUS-ASCII.


XML データをどのように送信していますか? 送信されるデータは「UTF-8」でエンコードされていますか? スタンドアロンの例であなたのモデルを試してみましたが、すべてうまくいきました。

デモ

package forum12974953;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(IncomingData.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum12974953/input.xml");
        IncomingData id = (IncomingData) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(id, System.out);
    } 

}

input.xml (明示的に UTF-8 として保存)/出力

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<incomingData>
    <Text>καλημέρα</Text>
</incomingData>
于 2012-10-19T18:47:55.230 に答える
0

まず、コンテナのエンコーディングが UTF-8 に設定されていることを確認してください。2 番目に、出力を ではなくファイルに書き込んでみてSystem.outください。出力は既に UTF-8 になっている可能性がありますが、「out」では UTF-8 を表示できないためです。

于 2012-10-19T13:16:02.423 に答える