2011-07-18 21 views
2

提取完整的包膜XML我有一個這樣的攔截器:從MessageContext的

public class WebServiceInterceptor extends EndpointInterceptorAdapter { 

@Inject 
private Jaxb2Marshaller myJaxb2Marshaller; 

@Inject 
private WebServiceHistoryDao webServiceHistoryDao; 

@Override 
public boolean handleRequest(MessageContext messageContext, Object endpoint) 
     throws Exception { 

    Source payloadSource = messageContext.getRequest().getPayloadSource(); 
    Object unmarshaled = myJaxb2Marshaller.unmarshal(payloadSource); 

    //EXTRACT XML HERE 
    //is there a better way than this: 
    String extractedXml = myJaxb2Marshaller.marshal(unmarshaled); 

    return true; 
} 

} 

我如何可以提取信封的整個XML(用於記錄的目的 - 把它寫入DB)

+0

我找到了一個解決方案,並將其粘貼在原始帖子中(編組人員的解決方案)。有沒有更好的方法來做到這一點? – Benchik

回答

1

你不需要寫一個,API中有一個現有的 - SoapEnvelopeLoggingInterceptor。請參閱javadoc

特定於SOAP的EndpointInterceptor記錄完整的請求和響應信封SoapMessage消息。默認情況下,會記錄請求,響應和錯誤消息,但可以使用logRequest,logResponse,logFault屬性更改此行爲。

如果您只需要查看有效負載,而不是整個SOAP信封,那麼就有PayloadLoggingInterceptor

+0

我正在使用PayloadLoggingInterceptor查看有效內容。但我需要的是將其保存到數據庫。爲此,我使用我自己的攔截器與DAO對象。 – Benchik

+0

@Benchik:所以上述類的一個子類,或者看他們的源代碼,看看他們是如何工作的。 – skaffman

+0

好的,非常感謝:) – Benchik

相關問題