簡體   English   中英

JAX-WS RI:實現方法攔截器的最佳方式

[英]JAX-WS RI: Best way to implement a Method Interceptor

我想為我的 web 服務調用提供我自己的方法攔截器。 基本上,這個方法攔截器應該在真正的方法被調用之前被調用......見下面的片段:

public class MyMethodInterceptor {
  public Object invoke(Object t, Method m, Object[] args) throws Throwable {
    // do some magic, such as tracing, authorise, etc...
    return m.invoke(t, args);
  }     
}

// ....    

public class MyWebServiceImpl implements MyWebServiceInterface {
  public String greet(final String name) {
    return "Hi there, " + name;
  }
}

這個想法是每次調用 web 服務時,都會通過我的攔截器進行調度。 我看過連接我自己的InstanceResolver ,但它已經失控了。 我知道如何在 CXF 和 JAX-RS (Jersey) + Guice 中做到這一點。

JAX-WS 提供了handler-chains ,但是這些處理程序被調用得太早了(即,在方法調用之前很久),所以我現在沒有所需的信息。

使用 JAX-WS 的引用實現實現此目的的最佳方法是什么?

在 jax-ws 處理程序中,您就在真正的事物之前,您可以訪問整個 SOAP 消息的內容,您需要什么還不可用?

編輯:
在處理程序中使用的一些示例:

public String getMessage(SOAPMessageContext smc) {
    SOAPMessage message = smc.getMessage();
    ByteArrayOutputStream soapEnvelope = new ByteArrayOutputStream();
    message.writeTo(soapEnvelope);
    soapEnvelope.close();
    return new String(soapEnvelope.toByteArray());
}

public String getMethod(SOAPMessageContext smc) {
    SOAPMessage message = smc.getMessage();
    SOAPBody body = message.getSOAPBody();
    return body.getFirstChild().getLocalName();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM