您可以在服务器上使用传入拦截器或在客户端上使用传出拦截器,并在解组发生之前清理 xml。
进入阶段
------------------------------------------------------------------------------
|Phase | Functions |
------------------------------------------------------------------------------
|RECEIVE | Transport level processing |
|(PRE/USER/POST)_STREAM | Stream level processing/transformations |
|READ | | This is where header reading typically occurs |
|(PRE/USER/POST)_PROTOCOL | Protocol processing, such as JAX-WS SOAP handlers|
|UNMARSHAL | Unmarshalling of the request |
|(PRE/USER/POST)_LOGICAL | Processing of the umarshalled request |
|PRE_INVOKE | Pre invocation actions |
|INVOKE | Invocation of the service |
|POST_INVOKE | Invocation of the outgoing chain if there is one |
------------------------------------------------------------------------------
输出阶段
---------------------------------------------------------------------------------------
|Phase | Functions |
---------------------------------------------------------------------------------------
|SETUP | Any set up for the following phases |
|(PRE/USER/POST)_LOGICAL | Processing of objects about to marshalled |
|PREPARE_SEND | Opening of the connection |
|PRE_STREAM | |
|PRE_PROTOCOL | Misc protocol actions |
|WRITE | Writing of the protocol message, such as the SOAP Envelope|
|MARSHAL | Marshalling of the objects |
|(USER/POST)_PROTOCOL | Processing of the protocol message |
|(USER/POST)_STREAM | Processing of the byte level message |
|SEND | |
---------------------------------------------------------------------------------------
请记住,您必须在解组(传入)之前或编组(传出)之后执行此操作。
在这里您可以找到所有详细信息,以及使用拦截器的必要示例。
更新
经过更多研究,我发现了这些:
- 用弹簧解决
- 无弹簧解决方案
从第二个链接复制并粘贴(第一个是 SO 答案)
package tmp;
public class MyWstxOutputFatory extends WstxOutputFactory {
public MyWstxOutputFatory() {
setProperty(com.ctc.wstx.api.WstxOutputProperties.P_OUTPUT_INVALID_CHAR_HANDLER,
new
com.ctc.wstx.api.InvalidCharHandler.ReplacingHandler(' '));
}
}
并在您的 jaxws 配置中使用它
<bean id="outStaxFactory" class="tmp.MyWstxOutputFatory"/>
<!-- jaxws:client or server -->
...
<jaxws:properties>
<entry key="javax.xml.stream.XMLOutputFactory">
<ref bean="outStaxFactory"/>
</entry>
</jaxws:properties>
...