我有一个SOAP服务,其中一个方法接受一个String作为参数。但是,期望这个String是XML。
当我调用此服务时,CXF默认为我编码XML,如下所示:
<ORM_O01><MSH>
即使我打电话给它,我也这样称呼它:
<ORM_O01><MSH>
有没有办法将其关闭?我希望CXF只发送我指定的内容,而不是编码版本。
我正在使用CXF 2.7.8和JDK 1.7。
提前致谢。
答案 0 :(得分:2)
我很确定这不是最好的方法,但它对我有用:
public class MyClass extends AbstractPhaseInterceptor< Message > {
public MyClass () {
super( Phase.PRE_STREAM );
addAfter( AttachmentOutInterceptor.class.getName() );
}
@Override
public void handleMessage( final Message message ) throws Fault {
message.put( "disable.outputstream.optimization", Boolean.TRUE );
final SimpleNsStreamWriter writer = (SimpleNsStreamWriter)StaxUtils.createXMLStreamWriter( message.getContent( OutputStream.class ) );
message.setContent( XMLStreamWriter.class, new DelegatingXMLStreamWriter( writer ) {
@Override
public void writeCharacters( final String text ) throws XMLStreamException {
System.out.println( "text -> " + text );
writer.writeRaw( text );
}
} );
}