CXF编码嵌入式XML

时间:2014-01-10 02:51:51

标签: java xml soap cxf

我有一个SOAP服务,其中一个方法接受一个String作为参数。但是,期望这个String是XML。

当我调用此服务时,CXF默认为我编码XML,如下所示:

<ORM_O01><MSH>

即使我打电话给它,我也这样称呼它:

<ORM_O01><MSH>

有没有办法将其关闭?我希望CXF只发送我指定的内容,而不是编码版本。

我正在使用CXF 2.7.8和JDK 1.7。

提前致谢。

1 个答案:

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