2009-05-04 3 views
0

Я пытаюсь получить доступ к веб-сервис с JAX-WS с помощью:Неправильный Кодирование в JAX-WS Response диспетчерское

Dispatch<Source> sourceDispatch = null; 
sourceDispatch = service.createDispatch(portQName, Source.class, Service.Mode.PAYLOAD); 
Source result = sourceDispatch.invoke(new StreamSource(new StringReader(req))); 
System.out.println(sourceToXMLString(result)); 

где:

private static String sourceToXMLString(Source result) 
     throws TransformerConfigurationException, TransformerException { 
    String xmlResult = null; 
    try { 
     TransformerFactory factory = TransformerFactory.newInstance(); 
     Transformer transformer = factory.newTransformer(); 
     transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 
     transformer.setOutputProperty(OutputKeys.METHOD, "xml"); 
     transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8"); 
     OutputStream out = new ByteArrayOutputStream(); 
     StreamResult streamResult = new StreamResult(); 
     streamResult.setOutputStream(out); 
     transformer.transform(result, streamResult); 
     xmlResult = streamResult.getOutputStream().toString(); 
    } catch (TransformerException e) { 
     e.printStackTrace(); 
    } 
    return xmlResult; 
} 

Когда я распечатать результат на UTF -8, символы utf-8 отображаются неправильно.

Поскольку WS отлично работает с другими инструментами (возвращает UTF-8 в порядке), я склонен думать, что есть некоторые проблемы с моим преобразованием sourceToXMLString(). Может ли это уничтожить мою кодировку?

ответ

1

Попробуйте следующее:

private static String sourceToXMLString(Source result) throws TransformerConfigurationException, TransformerException { 

String xmlResult = null; 
try { 
    TransformerFactory factory = TransformerFactory.newInstance(); 
    Transformer transformer = factory.newTransformer(); 
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 
    transformer.setOutputProperty(OutputKeys.METHOD, "xml"); 
    transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8"); 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    transformer.transform(result, new StreamResult(out)); 
    xmlResult = out.toString("UTF-8"); 
    // or xmlResult = new String(out.toByteArray(), "UTF-8"); 
} catch (TransformerException e) { 
    e.printStackTrace(); 
} 
return xmlResult; 
}