2017-02-13 125 views
0

我得到了CXF OSGi的Web服務(基於實例演示中的ServiceMix:https://github.com/apache/servicemix/tree/master/examples/cxf/cxf-jaxws-blueprint檢索CXF Web服務WS請求

Web服務工作正常,我呼籲所有可用服務實現的方法。

我的問題是我如何檢索WS方法內的請求和解析字符串XML格式。

我發現這可能在攔截器內進行日誌記錄,但是我也想要在我的方法中使用WS-Request。

+0

如果你想要簡單的xml那麼爲什麼要使用jax ws?你需要什麼xml for? –

+0

我想要在我的servicemix日誌中看到的請求的實際有效負載。關於「我需要什麼」的問題。我將有效載荷存儲在我的數據庫中以備將來處理。 – Stephan

+0

我看到這裏(http://stackoverflow.com/questions/11038313/how-to-get-incoming-outgoing-soap-xml-in-a-simple-way-using-apache-cxf)一些方法來獲得如上所述,來自攔截器的消息,但我需要在我的WS方法中的有效載荷。 – Stephan

回答

1

爲了將請求存儲在數據庫中,我建議擴展new CXF message logging

您可以實施寫入數據庫的自定義LogEventSender

+0

感謝您的提議,但這並不回答實際問題。如何或如果我可以進入我的webmethod請求有效載荷。 – Stephan

0

我有類似的需求,我需要將數據保存到數據庫一旦方法被調用。我曾用ThreadLocalLoggingInInterceptorLoggingOutInterceptor。例如在LoggingInInterceptor中,我用於將消息設置爲ThreadContext,並在webservice方法中使用LoggingContext.getMessage()獲取消息,並在LoggingOutInterceptor中用於刪除消息(注意:在此處需要注意需要明確地從線程上下文中刪除消息你最終會與內存泄漏,並且還櫃面客戶端代碼攔截得到逆轉。

public class LoggingContext { 

    private static ThreadLocal<String> message; 

    public static Optional<String> getMessage() { 
     return Optional.ofNullable(message.get()); 
    } 

    public static void setMessage(final String message) { 
     LoggingContext.message = new ThreadLocal<>(); 
     LoggingContext.message.set(message); 
    } 

} 
0

不回答這個問題,但我實現了在年底使用JAXB做我的工作,並做一些操作